{"version":3,"sources":["webpack:///./src/components/pages/InternalMaintenance/OperationTimeline.vue?4aea","webpack:///./src/components/pages/InternalMaintenance/OperationTimeline.vue","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/enum.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/value-formatter.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/column.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/constant.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/common/checkbox-filter-base.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/data.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/row.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-merge-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/string-literals.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/row-model-generator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/summary-model-generator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/group-model-generator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/content-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/aria-service.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/stacked-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/indent-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/caption-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/expand-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-indent-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-header-indent-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-expand-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-drop-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-header-indent-render.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/render.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/cell-render-factory.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/responsive-dialog-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/service-locator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/renderer-factory.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/width-controller.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/focus-strategy.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/page-settings.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/column-chooser-settings.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/selection.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/search.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/show-hide.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/scroll.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/aggregate.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/clipboard.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/grid.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/print.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/util.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/base/utils.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/base/date-processor.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/base/task-processor.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/base/css-constants.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/chart-scroll.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/virtual-content-render.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/base/gantt-chart.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/timeline.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/column.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/loading-indicator.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/filter-settings.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/textwrap-settings.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/logger.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/logger.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/base/constant.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/clipboard.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/utils.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/selection.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/enum.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/print.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/search-settings.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/selection-settings.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/renderer/render.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/base/data.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/page-settings.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/summary.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/edit-settings.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/sort-settings.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/crud-actions.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/infinite-scroll-settings.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/base/treegrid.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/column.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/base/tree-grid.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/sort-settings.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/loading-indicator.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/day-working-time.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/holiday.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/event-marker.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/task-fields.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/timeline-settings.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/edit-settings.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/selection-settings.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/label-settings.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/tooltip-settings.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/filter-settings.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/splitter-settings.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/resource-fields.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/models/search-settings.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/chart-rows.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/dependency.js","webpack:///./node_modules/@syncfusion/ej2-svg-base/src/svg-render/svg-renderer.js","webpack:///./node_modules/@syncfusion/ej2-svg-base/src/svg-render/canvas-renderer.js","webpack:///./node_modules/@syncfusion/ej2-svg-base/src/tooltip/interface.js","webpack:///./node_modules/@syncfusion/ej2-svg-base/src/tooltip/helper.js","webpack:///./node_modules/@syncfusion/ej2-svg-base/src/tooltip/tooltip.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/connector-line.js","webpack:///./node_modules/@syncfusion/ej2-layouts/src/splitter/splitter.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/base/splitter.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/tooltip.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/keyboard.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/base/gantt.js","webpack:///./node_modules/@syncfusion/ej2-vue-gantt/src/gantt/columns.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-gantt/src/gantt/adddialogfields.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-gantt/src/gantt/editdialogfields.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-gantt/src/gantt/dayworkingtime.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-gantt/src/gantt/holidays.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-gantt/src/gantt/eventmarkers.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-gantt/src/gantt/gantt.component.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/inline-edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/batch-edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/dialog-edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/edit-cell-base.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/dropdown-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/numeric-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/textbox/textbox.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/default-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/normal-edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/inline-edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/batch-edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/dialog-edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/datepicker-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/template-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/enum.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/edit.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/batch-edit.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/edit.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/cell-edit.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/edit-tooltip.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/taskbar-edit.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/tab/tab.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/numeric-container.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/pager-message.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/pager.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/pager-dropdown.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/external-message.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/page.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/toolbar.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/foreign-key.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/constant.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/classes.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/render.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/common/constant.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/keyboard.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/view-source.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/interface.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/service-locator.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/renderer-factory.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/execute-command-callback.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/ajax-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/contextMenu-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/details-view-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/navigation-pane-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/search-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/toolbar-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/upload-settings.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/items.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/toolbar-settings.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/iframe-settings.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/inline-mode.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/default-locale.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-attributes.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/full-screen.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/enter-key.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/util.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/dialog-renderer.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/rich-text-editor.js","webpack:///./node_modules/@syncfusion/ej2-splitbuttons/src/common/common.js","webpack:///./node_modules/@syncfusion/ej2-splitbuttons/src/drop-down-button/drop-down-button.js","webpack:///./node_modules/@syncfusion/ej2-splitbuttons/src/split-button/split-button.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/slider/slider.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/color-picker/color-picker.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/toolbar-renderer.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-toolbar.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/dropdown-buttons.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar-action.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/common/util.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/link-module.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/formatter.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/constant.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/selection/selection.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/common/config.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/dom-node.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/lists.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/insert-methods.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/nodecutter.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/formats.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/link.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/alignments.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/indents.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/classes.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/image.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/audio.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/video.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/table.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/isformatted.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-commands.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-exec.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml-exec.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat-exec.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/undo.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/ms-word-clean-up.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/insert-text.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/format-painter-actions.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/emoji-picker-action.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/editor-manager.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/html-formatter.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/toolbar-status.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-toolbar-status.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/content-renderer.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/iframe-content-renderer.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/color-picker.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/xhtml-validation.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-editor.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-quick-toolbar.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/popup-renderer.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/quick-toolbar.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/count.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/maskedtextbox/base/mask-base.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/maskedtextbox/maskedtextbox/maskedtextbox.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/combo-box/combo-box.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-operator.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/common/highlight-search.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/auto-complete/auto-complete.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/string-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/number-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/date-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/checkbox-filter.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/menu-scroll.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/menu-base.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/context-menu/context-menu.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/common/excel-filter-base.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-filter.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/filter.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/filter.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/intersection-observer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/virtual-row-model-generator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/virtual-content-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/virtual-scroll.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/renderer/virtual-row-model-generator.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/renderer/virtual-tree-content-render.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/virtual-scroll.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/dialog-edit.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/multi-select/checkbox-selection.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/connector-line-edit.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/edit.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/selection.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/base/constant.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/toolbar.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/resize.js","webpack:///./node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/resize.js","webpack:///./node_modules/@syncfusion/ej2-gantt/src/gantt/actions/column-resize.js","webpack:///src/components/pages/InternalMaintenance/OperationTimeline.vue","webpack:///./src/components/pages/InternalMaintenance/OperationTimeline.vue?96c8","webpack:///./src/components/pages/InternalMaintenance/OperationTimeline.vue?bfa0"],"names":["CellType","RenderType","ToolbarItem","ResponsiveDialogAction","ResponsiveToolbarAction","render","_vm","this","_c","_self","isLoaded1","ref","attrs","data","taskFields","columns","editSettings","toolbar","taskMode","_e","staticRenderFns","ValueFormatter","cultureName","intl","culture","prototype","getFormatFunction","format","type","getDateFormat","getNumberFormat","getParserFunction","getDateParser","getNumberParser","fromView","value","toView","result","setCulture","__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","Column","options","parent","_this","disableHtmlEncode","allowSorting","allowResizing","allowFiltering","allowGrouping","allowReordering","showColumnMenu","enableGroupByFormat","allowEditing","filter","showInColumnChooser","edit","allowSearching","autoFit","sortDirection","getEditTemplate","editTemplateFn","getFilterTemplate","filterTemplateFn","toLowerCase","undefined","editType","uid","getUid","valueFormatter","skeleton","setFormatter","setParser","toJSON","col","skip","keys","parseInt","toString","j","push","indexOf","field","some","commands","textAlign","template","commandsTemplate","templateFn","templateCompiler","headerTemplate","headerTemplateFn","itemTemplate","fltrTemplateFn","editTemplate","filterTemplate","isForeignColumn","params","dataSource","ddEditedData","query","fields","foreignKeyField","text","foreignKeyValue","sortComparer","a_1","x","y","xObj","yObj","getObject","window","z","obj","getForeignData","fnDescending","fnAscending","getSortDirection","setSortDirection","direction","getFreezeTableName","freezeTable","setProperties","column","isReact","refreshReactColumnTemplateByUid","refreshReactHeaderTemplateByUid","getFormatter","formatFn","getParser","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","CommandColumnModel","_super","GridColumn","apply","StackedColumn","load","rowDataBound","queryCellInfo","headerCellInfo","actionBegin","actionComplete","actionFailure","dataBound","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnSelecting","columnSelected","columnDeselecting","columnDeselected","columnDragStart","columnDrag","columnDrop","beforePrint","printComplete","detailDataBound","toolbarClick","batchAdd","batchCancel","batchDelete","beforeBatchAdd","beforeBatchDelete","beforeBatchSave","beginEdit","cellEdit","cellSave","cellSaved","recordDoubleClick","recordClick","beforeDataBound","beforeOpenAdaptiveDialog","resizeStart","onResize","resizeStop","checkBoxChange","beforeCopy","beforePaste","beforeAutoFill","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","filterSearchBegin","initialLoad","initialEnd","dataReady","contentReady","uiUpdate","onEmpty","inBoundModelChanged","modelChanged","colGroupRefresh","headerRefreshed","pageComplete","filterComplete","searchComplete","groupComplete","groupAggregates","refreshFooterRenderer","refreshAggregateCell","rowSelectionComplete","cellSelectionComplete","beforeCellFocused","cellFocused","keyPressed","click","columnVisibilityChanged","columnWidthChanged","columnPositionChanged","rowsAdded","rowsRemoved","columnDragStop","headerDrop","dataSourceModified","refreshComplete","refreshVirtualBlock","dblclick","toolbarRefresh","bulkSave","autoCol","tooltipDestroy","updateData","saveComplete","deleteComplete","preventBatch","dialogDestroy","crudAction","addDeleteAction","destroyForm","doubleTap","freezeRender","filterOpen","filterDialogCreated","filterMenuClose","initForeignKeyColumn","getForeignKeyData","generateQuery","showEmptyGrid","columnDataStateChange","dataStateChange","dataSourceChanged","rtlUpdated","beforeFragAppend","frozenHeight","textWrapRefresh","recordAdded","cancelBegin","editNextValCell","hierarchyPrint","expandChildGrid","printGridInit","rowPositionChanged","batchForm","beforeStartEdit","beforeBatchCancel","batchEditFormRendered","partialRefresh","beforeCustomFilterOpen","columnsPrepared","cBoxFltrBegin","cBoxFltrComplete","fltrPrevent","beforeFltrcMenuOpen","valCustomPlacement","filterCboxValue","restoreFocus","detailIndentCellInfo","virtaulCellFocus","virtualScrollEditActionBegin","virtualScrollEditSuccess","virtualScrollEditCancel","virtualScrollEdit","refreshVirtualCache","editReset","virtualScrollAddActionBegin","getVirtualData","refreshInfiniteModeBlocks","resetInfiniteBlocks","infiniteScrollHandler","infinitePageQuery","infiniteShowHide","appendInfiniteContent","removeInfiniteRows","setInfiniteCache","infiniteEditHandler","closeFilterDialog","getFilterBarOperator","resetColumns","setGroupCache","lazyLoadScrollHandler","groupCollapse","beforeCheckboxRenderer","refreshHandlers","refreshVirtualFrozenHeight","setFreezeSelection","beforeRefreshOnDataChange","immutableBatchCancel","refreshVirtualFrozenRows","checkScrollReset","preventFrozenScrollRefresh","nextCellIndex","refreshInfiniteCurrentViewData","filterDialogClose","refreshCustomFilterOkBtn","refreshCustomFilterClearBtn","renderResponsiveCmenu","filterCmenuSelect","customFilterClose","setFullScreenDialog","refreshExpandandCollapse","rowModeChange","enterKeyHandler","refreshVirtualMaxPage","setVirtualPageQuery","selectRowOnContextOpen","pagerRefresh","closeInline","closeBatch","closeEdit","resetVirtualFocus","refreshVirtualEditFormCells","scrollToEdit","beforeCheckboxRendererQuery","createVirtualValidationForm","validateVirtualForm","destroyChildGrid","stickyScrollComplete","refreshInfinitePersistSelection","refreshInfiniteEditrowindex","afterFilterColumnMenuClose","beforeCheckboxfilterRenderer","commandColumnDestroy","batchCnfrmDlgCancel","refreshVirtualLazyLoadCache","CheckBoxFilterBase","isExecuteLocal","existingPredicate","foreignKeyQuery","filterState","values","renderEmpty","isCheckboxFilterTemplate","id","element","locale","cBoxTrue","createElement","checked","label","cBoxFalse","insertBefore","className","firstChild","querySelector","classList","add","enableRtl","cssClass","split","destroy","closeDialog","wireEvents","dlg","clickHandler","keyupHandler","searchHandler","searchBoxKeyUp","elem","dialogObj","unWireEvents","remove","foreignKeyFilter","args","fColl","mPredicate","fPredicate","filterCollection","clone","executeQuery","where","then","e","columnData","notify","predicate","ejpredicate","predicates","fpred","matchCase","ignoreCase","ignoreAccent","operator","handler","foreignFilter","isRemote","initalPredicate","searchBoxClick","contains","sInput","event","refreshCheckboxes","updateSearchIcon","focus","loadingIndicator","indicatorType","showMaskRow","sIcon","document","body","setAttribute","localeObj","getConstant","getLocalizedLabel","updateDataSource","str","updateModel","actualPredicate","dataManager","filteredColumns","filterSettings","allowCaseSensitive","isFiltered","getAndSetChkElem","sBox","hideSearchbox","title","searchBox","appendChild","inputargs","floatLabelType","properties","placeholder","createInput","spinner","cBox","showDialog","requestType","columnName","columnType","cancel","filterModel","visible","content","close","bind","width","parentsUntil","animationSettings","effect","buttons","btnClick","buttonModel","isExcel","isPrimary","created","dialogCreated","open","dialogOpen","isStringTemplate","renderResponsiveFilter","isResponsiveFilter","responsiveCnt","appendTo","style","maxHeight","height","show","getAllData","position","X","Y","left","isDevice","getFilterMenuPostion","openDialog","isDestroyed","isBlanks","filterTemplateCol","registeredTemplate","filterItemTemplate","destroyTemplate","isVue","clearReactVueTemplates","clearFilter","instance","action","tagName","keyCode","fltrBtnHandler","textContent","searchInput","slice","call","querySelectorAll","check","optr","ddlValue","ej2_instances","isMenuNotEqual","val","fObj","caseSen","defaults","isNotEqual","itemsCnt","coll","getAttribute","concat","generateNullValuePredicates","arg1","arg2","arg3","arg4","arg5","arg6","existingPredicate_1","_loop_1","initiateFilter","isClearFilter","firstVal","or","foreignQuery","pred","queries","fn","parsed","parseFloat","predicte","moduleName","adaptor","getModuleName","parseDate","Date","getFullYear","padZero","getMonth","getDate","addDistinct","filterChoiceCount","trigger","filterargs","filterObj","getDatePredicate","emptyValPredicte","generatePredicate","and","colData","take","search","filterEvent","processSearch","getPredicateFromCols","getPredicate","predicateList","isGrid","getForeignKeyColumns","foreignColumn","_i","_a","prop","getColumnByField","getColumnByForeignKeyValue","getQuery","customQuery","requiresCount","distincts","queryGenerate","processDataOperation","filteredColumn","distinct","defObj","state","def","deffered","promise","dataSuccess","isInitial","allPromise","runArray","foreignKeyData","Promise","all","fullData","args1","executeLocal","filteredData","getDistinct","records","processDataSource","searchSettings","sSettings","map","f","cols","filterColumn","updateResult","btnObj","createFilterItems","result_1","res","selectAll","updateAllCBoxes","toogleCheckbox","parentElement","updateIndeterminatenBtn","setFocus","prevElem","cBoxes","cBoxes_1","removeAddCboxClasses","setChecked","previousSibling","createCheckbox","cloneNode","dummyData","extendObjWithFn","innerText","enableHtmlSanitizer","sanitize","innerHTML","isReactCompiler","isReactChild","parentDetails","parentInstObj","renderTemplates","appendChildren","btn","cnt","children","disabled","selected","input","indeterminate","dataBind","_b","nullCounter","selectAllValue","innerDiv","checkBox","createCboxWithWrap","isColFiltered","predicateCheckBox","predicateElement","isRndere","args_1","checkbox","getCheckedState","checkState","json","checkboxFilter","len","ejValue","lookup","isForeignKey","currentFilterValue","enableCaseSensitivity","foreignDataObj","group","sort","collection","operate","first","updateDateFilter","getCaseValue","Data","serviceLocator","dataState","isPending","resolver","foreignKeyDataState","initDataManager","on","addRows","reorderRows","removeRows","crudActions","getData","refreshFilteredCols","splice","toIndex","fromIndex","gObj","isAngular","isQueryInvokedFromData","skipPage","isAutoCompleteCall","columnQueryMode","select","getColumns","isPrimaryKey","selectQueryFields","filterQuery","searchQuery","aggregateQuery","sortQuery","isGroupAdaptive","virtualGroupPageQuery","pageQuery","groupQuery","rows","aggregates","row","types","k","aggregate","fName","allowPaging","enableVirtualization","enableInfiniteScrolling","pageSettings","currentPage","Math","max","pageCount","pageSize","infiniteScrollModule","page","pagerModule","pagerObj","isAllPage","isManualRefresh","offline","groupSettings","enableLazyLoading","lazyLoad","log","isGrpFmt","formatGroupColumn","sortSettings","sortGrp","sortByForeignKey","sortBy","fcolumn","getSearchColumnFieldNames","needForeignKeySearch","fGeneratePredicate","predList","skipFoerign","foreignColEmpty","actualFilter","colType","foreignCols","defaultFltrCols","columns_1","gridColumn","getColumnByUid","grabColumnByFieldFromAllCols","excelPredicate","_d","foreignCols_1","column_1","grabColumnByUidFromAllCols","_f","_g","getKey","getPrimaryKeyFieldNames","eventPromise","crud","fromTable","changes","addedRecords","deletedRecords","changedRecords","saveChanges","index","insert","isArray","ready","deferred_1","resolve","catch","reject","date","getDay","getHours","getMinutes","getSeconds","getMilliseconds","formatVal","pr","update","previousData","original","deff","endEdit","setState","url","off","getState","getForeignKeyDataState","setForeignKeyDataState","getStateEventArgument","adaptr","dm","processQuery","JSON","parse","pvtData","dataArgs","isDataChanged","editArgs_1","cancelEdit","colFieldNames","columns_2","refreshFilteredColsUid","Row","cells","cell","setRowValue","setRowData","setCellValue","isValDiff","pKeyField","makechanges","getDataModule","Cell","isSpanned","isRowSpanned","CellMergeRender","cellArgs","td","spannedCell","cellRendererFact","getService","cellRenderer","getCellRenderer","cellType","colSpan","cellSpan","rowSpan","rowsObject","isFrozenGrid","contentModule","tempFreezeRows","getRowsObject","isDataRow","targetCell_1","uid_1","colSpanLen","colSpanRange","rowSpanRange","spanText","Number","enableColumnVirtualization","containsKey","backupMergeCells","span","setMergeCells","generteKey","fname","splitKey","getMergeCells","mergeCells","updateVirtualCells","mCells","merge","columnIndex","getIndexFromAllColumns","vColumnIndices","getColumnIndexesInView","rows_1","iterateArrayOrObject","getVisibleColumns","item","frozenHeader","gridChkBox","addedRow","leftRight","frozenRight","frozenLeft","dataColIndex","ariaColIndex","dataRowIndex","ariaRowIndex","change","beforeOpen","RowRenderer","isSpan","attributes","rowTemplate","refreshRow","refresh","isChanged","refreshMergeCells","node","tr","tempCells","setTimeout","state_1","attr","cells_1","isEdit","rowArgs","chekBoxEnable","selIndex","getSelectedRowIndexes","isSelected","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","setStyleAndAttributes","_loop_2","isColumnSelected","isExpand","DetailExpand","this_1","isPrinting","Filter","CommandColumn","requireTemplateRef","isTemplate","thisRef_1","ariaAttr","requestTypeAction","prevRowCells","prevRowCell","cellMerge","rowHeight","eventArg_1","isSelectable","cellTemplate","thisRef_2","isDraggable","isRowDragable","selectionSettings","persistSelection","primaryKey_1","pKey_1","SelectedRecords","partialSelectedRecords","disableSelectedRecords","selectionModule","isPartialSelection","chkBox","isDrag","cellIdx","isDetail","firstElementChild","childGrid","detailTemplate","lazyLoadCssClass","rowRenderingMode","allowTextWrap","textWrapSettings","wrapMode","vFTable","frozenColumns","scrollHeight","property","footerTemplate","summarycell","getElementsByClassName","lastSummaryCell","firstSummaryCell","classes","isAltRow","isCaptionRow","isAggregateRow","parentUid","rowindex","dataUID","ariaSelected","class","RowModelGenerator","generateRows","startIndex","getInfiniteIndex","enableImmutableMode","generateRow","ensureColumns","generateCell","RowDragIcon","indent","pid","tIndex","parentGid","hierarchyPrintMode","expandedRows","enableAltRow","refreshForeignKeyRow","getFrozenMode","generateCells","foreignKeyColumns","dummies","tmp","rowId","oIndex","opt","isDataCell","refreshRows","SummaryModelGenerator","groupFooterTemplate","groupCaptionTemplate","columnSelector","start","end","getIndentCount","count","buildSummaryData","getGeneratedRow","level","summaryRow","raw","indents","getIndentByLevel","isDetailGridAlone","indentLength","allowRowDragAndDrop","getGeneratedCell","getCellType","DetailFooterIntent","Indent","sColumn","scolumn","headerText","dummy","summaryRows","single","setTemplate","helper","a","disp","calculateAggregate","Summary","GroupSummaryModelGenerator","v","indx","GroupSummary","CaptionSummaryModelGenerator","initVal","reduce","prev","cur","isEmpty","CaptionSummary","GroupModelGenerator","infiniteChildCount","renderInfiniteAgg","summaryModelGen","captionModelGen","isInfiniteScroll","getGroupedRecords","isCollapseStateEnabled","ensureRowVisibility","parentid","childId","items","GroupGuid","generateDataRows","preCaption","captionRow","generateCaptionRow","getPreCaption","isRenderAggregate","rowCnt","aggregatesCount","setInfiniteRowVisibility","preCap","rowObj","getCaptionRowCells","visibles","indexes","groupedLen","generateIndentCell","Expand","captionCells","cIndex_1","wFlag","tmpFlag","GroupCaption","GroupCaptionEmpty","parentID","childID","childGid","gSummary","fkValue","valueAccessor","unshift","cRow","caption","childRow","ContentRender","freezeRows","movableRows","freezeRowElements","currentInfo","prevCurrentView","isLoaded","viewColIndexes","drop","droppedElement","infiniteCache","isRemove","visibleRows","visibleFrozenRows","rightFreezeRows","isAddRows","isInfiniteFreeze","useGroupCache","rafCallback","arg","tableName","mHdr","getMovableVirtualHeader","fHdr","getFrozenVirtualHeader","ariaService","setBusy","getPanel","setRowsInLazyGroup","prevPage","infiniteScrollSettings","enableCache","maxBlock","maxBlocks","rowIdx","rowElements","startIdx","ceil","isFrozen","renderFrozenRightContent","getFrozenRightRowsObject","preventAdjustColumns","isInitialLoad","focusModule","setFirstFocusableTabIndex","case","getContentTable","getContent","clientHeight","scrollModule","setPadding","removePadding","hideSpinner","enableDeepCompare","generator","getModelGenerator","setVisible","enableAfterRender","refreshContentRows","droppableDestroy","byKey","keyArgs","pressedKey","renderPanel","div","setOptions","busy","setPanel","renderTable","contentDiv","virtualTable","virtualTrack","createContentTable","setTable","getTable","multiselectable","initializeContentDrop","frozenRows","getHeaderContent","table","cellspacing","role","setColGroup","getHeaderTable","getColGroup","currentViewData","currentMovableRows","frag","createDocumentFragment","initialPageRecords","refFrag","refHdrfrag","hdrfrag","hdrTbody","trElement","frzCols","getFrozenColumns","tbdy","modelData","fCont","mCont","cont","emptyVcRows","virtualInfo","sentinelInfo","axis","renderMovableContent","checkCache","idx","setTbody","getTbody","isFrozenLeft","templatetoclear","rootNodes","parentNode","templates","tbody","blockLoad","vcRows","top_1","scrollTop","offsets","top","offsets_1","vGroupOffsets","bSize","m","isEndBlock","blockIndexes","round","contentPanel","offsetHeight","rowObject","isVFFrozenOnly","bIndex","mhdrData","vgenerator","virtualFrozenHdrRefresh","lazyLoadRender","refRowsObj","setInfiniteVisibleRows","getBlockSize","rowTemplateID","elements","isHeader","copied","getRowTemplate","childNodes","colcount","lastElementChild","isTR","nodeName","isVFreorder","ensureFrozenHeaderRender","ensureVirtualFrozenHeaderRender","splitRows","removeMaskRow","getFrozenHeader","parentTable","setIsFrozen","getUpdateUsingRaf","isVFTable","frCont","appendContent","renderNextFrozentPart","vRows","headerCellHeight","defaultView","getComputedStyle","getPropertyValue","cellHeight","boxSizing","maintainRows","frozenCols","getGroupCache","initialGroupRows","getCurrentBlockInfiniteRecords","isFreeze","getRows","last","getReorderedVFRows","getReorderedFrozenRows","getReorderedRows","fhdrData","getInfiniteRows","getInfiniteMovableRows","infiniteCacheRows","infiniteRows","panel","contentTable","getMovableRows","getRowElements","getMovableRowElements","setRowElements","colgroup","colGroup","testRow","fRows","mRows","rowLen","cellLen","rightRows","rightLen","needFullRefresh","getDataRows","infiniteData","infiniteRowVisibility","contentrows","isDetailRow","clen","getNormalizedColumnIndex","colIdx","getColumnIndexByUid","displayVal","getFrozenLeftColumnsCount","movable","getMovableColumnsCount","colG","getFrozenRightDataRows","infiniteFreezeData","mTable","getMovableDataRows","infiniteMovableData","setDisplayNone","isModeChg","invokedFromMedia","hideAtMedia","updateMediaColumns","setDisplayValue","isXaxis","getHeaderColGroup","replaceChild","droppable","accept","canSkip","setSelection","set","clearAll","getRowByIndex","getInfiniteRowIndex","firstRowIndex","getVirtualRowIndex","getMovableRowByIndex","module","enable","setRowObjects","immutableModeRendering","oldKeys","newKeys","newRowObjs","oldIndexes","oldRowObjs","batchChangeKeys","getBatchEditedRecords","newIndexes","hasBatch","oldRowElements","trs","prevLen","currentLen","mode","oldIndex","refreshImmutableContent","isEqual","objectEqualityChecker","old","next","isDate","getTime","primaryKey","getBatchChanges","newRowPosition","isDirty","updateCellIndex","rowEle","HeaderRender","frzIdx","notfrzIdx","isFirstCol","isReplaceDragEle","draggable","currentStateTarget","parentEle","visualElement","headercelldiv","getStackedHeaderColumnByHeaderText","trim","lockColumn","colIndex","getColumnIndexByField","offsetWidth","lineHeight","dragStart","display","drag","closest","cloneElement","dragStop","widthService","getFrozenRightColumnsCount","colPosRefresh","renderCustomToolbar","updateCustomResponsiveToolbar","isRendered","toggleStackClass","headerDiv","createHeaderTable","initializeHeaderDrag","initializeHeaderDrop","headerPanel","headerTable","tHead","createTable","createHeader","tableEle","tblName","getFrozenLeftCount","findHeaderRow","createHeaderContent","thead","bodyCell","rowBody","len_1","movableContent","updateColGroup","frozenMode","colHeader","rowRenderer","Header","headerRow","colDepth","measureColumnDepth","getHeaderCells","colFreezeMode","getStackedLockColsCount","pop","shift","freeze","len_2","HeaderIndent","DetailHeader","RowDragHIcon","enablePersistence","lockcolPositionCount","lockColsRendered","appendCells","isFirstObj","isLastCol","isMovable","isStackLastCol","lastCol","isLockColumn","isFrozenLockColumn","scrollbar","scrollLeft","getCellCnt","stackedLockColsCount","isStackedLockColumn","isFrozenStack","ensureStackedFrozen","StackedHeader","getColSpan","isFirstCol_1","isLaststackedCol","inViewIndexes","isTrue","lockColsCount","getFrozenColSpan","rowIndex","normalizedfrzCols","mTblColGrp","refreshUI","freezeReorder","getVirtualFreezeHeader","removeChild","setWidthToColumns","updateDefaultCursor","gCells","stackedHdr","showDropArea","dragTarget","distance","abort","toolbarItems","toolbarLeft","toolbarItem","cls","button","onclick","showResponsiveCustomSort","showResponsiveCustomFilter","enableAdaptiveUI","resToolbar","CellRenderer","locator","localizer","formatter","tabindex","rowChkBox","getGui","isNaN","evaluate","fData","CSPTemplate","literals_1","templateID","invokeFormatter","doesImplementInterface","getValue","refreshCell","refreshTD","cellIndex","parentRow","newTD","cloneAttributes","elements_1","source","name","innerHtml","displayAsCheckBox","localeStr","fromFormatter","appendHtml","checkWrap","rowID","setAttributes","buildAttributeFromCell","customAttributes","clipMode","isCheckBoxType","colindex","AriaService","props","setStateAndProperties","setExpand","expand","setSort","isBusy","invalid","setGrabbed","isGrabbed","grabbed","setDropTarget","isTarget","dropeffect","attribute","removeAttribute","datarole","haspopup","rowcount","HeaderCellRenderer","hTxtEle","sortEle","gui","chkAllBox","fltrMenuEle","prepareHeader","clean","hValueAccer","elementDesc","innerDIV","headerValueAccessor","checkAllWrap","matchFlColumns","extendPrepareHeader","gridObj","headerTempID","isReactChild_1","headerTextAlign","alignment","matchFilteredColumns","StackedHeaderCellRenderer","toolTip","IndentCellRenderer","GroupCaptionCellRenderer","cellUid","fKeyValue","gTemplateValue","domSetter","includes","captionTemplate","tempID","GroupCaptionEmptyCellRenderer","ExpandCellRenderer","href","HeaderIndentCellRenderer","DetailHeaderIndentCellRenderer","DetailExpandCellRenderer","RowDragDropRenderer","nodeElement","RowDragDropHeaderRenderer","Render","emptyGrid","counter","l10n","renderer","addEventListener","headerRenderer","getRenderer","contentRenderer","Content","isLayoutRendered","emptyRow","setWidth","setHeight","refreshDataManager","allowSelection","searchString","pageSizes","checkAll","dataLength","totalRecordsCount","getCurrentViewRecords","prevPageMoving","resetTemplates","gridColumns","detailTemplateID","toolbarTemplate","guid","maskRow","enableVirtualMaskRow","isCaptionCollapse","showSpinner","isFActon","isNeedForeignAction","getFData","deffered_1","disablePageWiseAggregates","validateGroupRecords","dataManagerSuccess","dataManagerFailure","deferred","isComplex","foreignKey","fbool","sendBulkRequest","dmSuccess","dmFailure","renderEmptyRow","isTrigger","spanCount","colspan","dynamicColumnChange","updateColumnType","record","cFormat","equalTo","fmtr","validationRules","isColTypeDef","actionArgs","isInfiniteDelete","isInfiniteEnd","totalDataRecordsCount","updatesOnInitialRender","agg","alert","setRowCount","error","dataRowCount","buildColumns","prepareColumns","isAutoGen","iterateComplexColumns","childKeys","complexCols","instantiateRenderer","addRenderer","cellrender","addCellRenderer","group0","groupN","addWhere","groups","curDm","curFilter","newQuery","rPredicate","updateGroupInfo","current","untouched","uGroup","itemGroup","uGroupItem","l","context","data_1","temp","customAggregate","CellRendererFactory","cellRenderMap","ResponsiveDialogRenderer","sortedCols","sortPredicate","isCustomDialog","evtHandlers","closeCustomDialog","renderResponsiveContextMenu","renderCustomFilterDiv","customExFilterClose","addRemoveEventListener","onActionCompleteFn","editComplate","isCustomDlgRender","header","customResponsiveDlg","closeBtn","filterModule","saveBtn","backBtn","customExcelFilterParent","isFilter","isOpen","filterClearBtn","getHeaderTitle","renderResponsiveContent","filterParent","customColumnDiv","styles","sortBtnParent","filteredCols","isSort","cDiv","getSortedFieldsAndDirections","buttonInnerText","sortButtonClickHandler","divIcon","iconSpan","customFilterColumnClickHandler","columndiv","allowMultiSorting","isSortApplied","resetSortButtons","txt","directionTxt","setSortedCols","getCurrentSortedFields","isRowResponsive","showResponsiveDialog","colDiv","isDialogClose","clearCustomFilter","removeCustomDlgFilterEle","renderCustomFilterDialog","filteredCol","renderResponsiveDialog","setFilterModel","createOptions","setTopToChildDialog","dialogEle","child","getBoundingClientRect","outerDiv","customFilterDlg","getDialogOptions","isCustomFilter","isModal","showCloseIcon","closeOnEscape","adaptiveDlgTarget","beforeDialogClose","renderResponsiveHeader","addBiggerDialog","sortField","closeResponsiveDialog","closeCustomFilter","keyHandler","sortColumn","clearSorting","primaryKeyValue","isAdd","getDialogName","getButtonText","titleDiv","dialogHdrBtnClickHandler","id_1","clearBtn","clearFiltering","filterClear","applyCustomFilter","mainfilterdiv","destroyCustomFilterDialog","getElementById","customEle","removeEventListener","ServiceLocator","services","register","registerAdaptiveService","isAdaptiveUI","responsiveDialogRenderer","RendererFactory","rendererMap","rName","ColumnWidthService","totalColumnsWidth","setColumnWidth","getTableWidth","setMinwidthBycalculation","tWidth","difference","tmWidth","collection_1","minWidth","isWidthUndefined","setUndefinedColumnWidth","cWidth","getWidth","tgridWidth","setWidthToTable","clear","ispercentageWidth","elementWidth","toFixed","headerCol","fWidth","contentCol","freezeLeft","freezeRight","movableCount","isColFrozen","frHdr","getFrozenRightHeader","getColumnLevelFrozenColgroup","destElement","getColumnByIndex","editTableCol","refreshFrozenScrollbar","ele","frzMode","scrollWidth","getScrollBarWidth","frozenScrollbar","movableScrollbar","frozencontent","frozenWidth","movableWidth","frozenRightScrollbar","frozenRightWidth","placeHolder","getMovableVirtualContent","getSiblingsHeight","previous","getHeightFromDirection","sibling","isWidUndefCount","maxWidth","calcMovableOrFreezeColWidth","tableType","right","setWidthToFrozenRightTable","freezeWidth","isAutoResize","headerTbl","cntTbl","setWidthToFrozenLeftTable","setWidthToMovableTable","isColUndefined","isWidthAuto","movableHeader","resizeModule","resizeProcess","setWidthToFrozenEditTable","setWidthToMovableEditTable","resizeSettings","FocusStrategy","oneTime","swap","forget","skipFocus","focusByClick","firstHeaderCellClick","prevIndexes","refMatrix","refreshMatrix","actions","isVirtualScroll","rowModelGen","focusCheck","onFocus","setActive","enableHeaderFocus","editModule","matrix","generate","selector","get","validator","passiveFocus","firstHeaderCell","lastRowCell","relatedTarget","elementToFocus","skipAction","onBlur","isGantt","nextElementSibling","matches","activeElement","removeFocus","setLastContentCellTabIndex","tabIndex","groupModule","focusableGroupedItems","getFocusableGroupedItems","toolbarElement","toolbarModule","focusableToolbarItems","getFocusableToolbarItems","active","firstHeaderCellIndex","findCellIndex","lastCell","onClick","force","isContent","isFrozenRight","beforeArgs","byClick","clickArgs","returnVal","clearOutline","onKeyPress","pagerElement","focusablePagerElements","getFocusablePagerElements","allowToPaging","checkPagerHasFocus","lastHeaderCellIndex","isValidBatchEditCell","findBatchEditCell","preventDefault","getDropDownPage","changePagerFocus","parentCell","shiftKey","setPagerFocus","checkFirstPagerFocus","lastRow","lastColumn","skipOn","setLastContentCellActive","focusOutFromChildGrid","focusFirstHeaderCell","activeKey","bValue","prevActiveName","getActiveName","prevBatchValue","outline","swapInfo","jump","toHeader","toFrozen","toFrozenRight","getNextCurrent","setActiveByKey","lastIdxCell","setFrozenBatchEditCell","focusOutFromHeader","nextHeaderCellIndex","firstContentCellIndex","previousCellIndex","addBatchRow","clearIndicator","setPagerContainerFocus","cellColIndex","cellCol","currentCellIndex","limitRow","tempCellIndex","cellIndexObtain","prevTempCellIndex","currentActiveName","nextRow","nextCell","nextSection","prevNextCell","activeName","rowDec","rowInc","notPrev","notNext","returnCurrentActiveName","setActiveByName","frozenLeftRightPrev","frozenLeftRightNext","frozenLeftNotNext","frozenLeftNext","frozenRightPrev","frozenRightNotPrev","frozenContent","frozenRightContent","nextIndex","activeTable","lastContentCellIndex","parentGrid","parentRows","parentRowIndex","nextFocusCell","previousRow","rowCells","allowAdding","th","inputTarget","filterCell","lastIndexOf","focusVirtualElement","virtualData","isCancel","isKeyFocus","selectedRowIndex","empty","preventScroll","getFocusedElement","fContent","frContent","fHeader","frHeader","setFocusedElement","addFocus","getFocusInfo","getCellFromIndex","addOutline","info","focusHeader","resetFocus","focusContent","isFocused","isJump","container","getInfo","focusedColumnUid","cFocus","updateRow","isRowTemplate","getMovableRowsObject","newMovableRows","newFrozenRows","frRows","newfrRows","handlerInstance","index_1","bool","focusElement","cellPosition","gridPosition","min","innerWidth","documentElement","clientWidth","bottom","innerHeight","passiveHandler","filterfocus","restoreFocusWithAction","internalCellFocus","groupSortFocus","groupTextFocus","showGroupedColumn","groupCancelFocus","getPrevIndexes","forgetPrevious","focusEle","getFocusable","Matrix","allow","navigator","emptyTable","inValid","vector","moveTo","incrementNumber","columnsCount","rowColumns","currentColumnCount","ContentFocus","keyActions","indexesByKey","getCurrentFromAction","editNextRow","allowNextRowEdit","isLastCellPrimaryKey","visibleIndex","isPresent","shouldFocusChange","rN","cN","oRowIndex","oCellIndex","nextRowFocusValidate","lastIndex","previousRowFocusValidate","firstIndex","frozenSwap","frSwap","enterFrozen","headerSwap","isHeaderFocus","optionals","defaultLen","rIndex","cIndex","isData","isCellWidth","getGridSeletion","allowColumnSelection","HeaderFocus","isLastCell","fMatrix","current1","getHeaderType","checkFilterColumn","FixedContentFocus","fSwap","current2","FixedHeaderFocus","hMatrix","frSwap_1","current3","SearchBox","searchFocus","cursor","searchBlur","wireEvent","unWireEvent","FixedRightContentFocus","toFrozenSwap","FixedRightHeaderFocus","headerMat","PageSettings","ColumnChooserSettings","__assign","assign","t","s","n","Selection","selectedRowIndexes","selectedRowCellIndexes","selectedRecords","preventFocus","selectedColumnsIndexes","checkBoxState","isMultiShiftRequest","isMultiCtrlRequest","enableSelectMultiTouch","clearRowCheck","selectRowCheck","selectedRowState","unSelectedRowState","chkAllCollec","isCheckedOnAdd","persistSelectedData","deSelectedData","isHdrSelectAllClicked","needColumnSelection","isCancelDeSelect","isPreventCellSelect","disableUI","isPersisted","cmdKeyPressed","cellselected","isMultiSelection","isAddRowsToSelection","initialRowSelection","isPrevRowSelection","isKeyAction","isRowDragSelected","rmtHdrChkbxClicked","isCheckboxReset","autoFillRLselection","right_bottom","bottom_left","top_right","top_left","top_bottom","top_right_bottom","top_bottom_left","top_right_left","right_bottom_left","all_border","factory","initializeSelection","onActionBegin","fDataUpdate","getRowObj","currentIndex","onActionComplete","gridElement","hidePopUp","clearSelection","mouseDownHandler","isEditing","formObj","validate","isPersistSelection","getSelectedMovableRow","getSelectedFrozenRightRow","getFrozenRightContent","getFrozenRightRowByIndex","getCurrentBatchRecordChanges","currentRecords","iterateExtend","selectRow","isToggle","enableSimpleMultiRowSelection","addRowsToSelection","selectedRow","getRowObjectFromUID","selectData","selectedMovableRow","selectedFrozenRightRow","isRemoved","selectedIndex","isAvailable","frozenData","getRowObjectByIndex","prevSelectedData","getSelectedRecords","clearRowSelection","isRowType","isRowSelected","hasAttribute","activeTarget","can","rowSelectingCallBack","isCtrlPressed","isShiftPressed","prevRowIndex","previousRowIndex","actualTarget","isInteracted","isHeaderCheckboxClicked","addMovableArgs","toggle","removed","checkboxMode","clearSelectedRow","selectRowCallBack","clearRow","disableInteracted","updateRowSelection","selectMovableRow","selectRowIndex","isHeaderCheckBoxClicked","rowIndexes","updateRowProps","targetObj","mRow","frRow","mObj","previousMovRow","frozenRightRow","previousFrozenRightRow","selectRowsByRange","endIndex","selectRows","getCollectionFromIndexes","selectedDataUpdate","selectedData","selectedRows","selectableRowIndex","currentRow","isSingleSel","prevRow","selectRowFn","rightEle","selectableRowIndex_1","checkboxOnly","checkboxColumn","rowIndexes_1","isUnSelected","enableToggle","rowDeselect","addRemoveClassesForRow","reverse","clearRowCallBack","selectedEle","updatePersistCollection","updateCheckBoxes","getPkValue","pkField","isComplexField","chkState","ensureCheckboxFieldSelection","updatePersistDelete","pKey","checkedTarget","setCheckAllState","contextMenuModule","mouseButton","checkSelectAllClicked","clearCellSelection","clearColumnSelection","prevCIdxs","prevECIdxs","row_1","mRow_1","fRightRow_1","rowIndex_1","foreignKeyData_1","target_1","getFrozenRightRows","isRowClicked","getCheckAllStatus","updatePersistSelectedData","movableRow","rowDeselectCallBack","cancl_1","isSingleDeSel","rowDeselectObj","rowInString","target_2","rowidx","rowidxex","dataTxt","isHeaderCheckBxClick","getSelectedMovableCell","getMovableCellFromIndex","getColIndex","selectCell","isCellType","selectedCell","isCellSelected","successCallBack","previousRowCell","getCellIndex","currentCell","previousRowCellIndex","cellSelectingArgs","cncl","clearCell","updateCellSelection","selectedRowCellIndex","updateCellProps","rIdx","cIdx","selectCellsByRange","cellIndexes","stIndex","edIndex","cellSelectionMode","getLastColIndex","addAttribute","cellSelectedArgs","isDragged","selectCells","rowCellIndexes","cellSelectArgs","addRowCellIndex","prvRowCellIndex","addCellsToSelection","hideAutoFill","gridActionHandler","cellIndexes_1","selectedCellIdx","cellDeselect","getCellsByTableName","cancl","rowCellIndex","isRowAvail","selectedCells","getSelectedCellsElement","rowCell","cLen","getCellByColAndRowIndex","bdrElement","showHideBorders","addMovableRows","mouseMoveHandler","gBRect","x1","y1","getPosition","x2","y2","isCellDrag","elementFromPoint","offsetLeft","clientY","ctrlKey","startAFCell","startCell","endAFCell","selectLikeExcel","startDIndex","isAutoFillSel","showAFBorders","selectLikeAutoFill","startDCellIndex","drawBorders","createBorders","positionBorders","isLastRow","isFirstRow","isFirstCell","setBorders","border","bdrStr","stOff","endOff","parentOff","offsetParent","topOffSet","leftOffset","rightOffset","selectDirection","updateStartEndCells","getMovableContent","mcBdrElement","frcBdrElement","fhBdrElement","headerModule","getMovableHeader","mhBdrElement","frhBdrElement","applyBorders","applyBothFrozenBorders","rtl","borderWidth","drawAFBorders","bdrAFBottom","createAFBorders","positionAFBorders","bdrAFLeft","firstCellTop","firstCellLeft","parentRect","sTop","sLeft","offsetTop","totalHeight","totalWidth","floor","scrolloffSet","bdrAFRight","bdrAFTop","leftRemove","topRemove","hideAFBorders","updateValue","createBeforeAutoFill","updateCell","getAutoFillCells","startCellIdx","isApply","startrowIdx","endrowIdx","endCellIdx","colLen","endCell","startCellIndex","trIdx","mouseUpHandler","mUPTarget","closeRowCell","updateAutoFillPosition","updateStartCellsIndex","autofill","enableAutoFill","rindex","isFrozenCol","isFrozenRow","clientRect","colWidth","enableDrag","isUpdate","postion","clearSelAfterRefresh","pkValue","onPropertyChanged","onCellFocused","refreshHeader","actionBeginFunction","actionCompleteFunction","addEventListener_checkbox","removeEventListener_checkbox","isMacOS","userAgent","keyDownHandler","keyUpHandler","allowKeyboard","getCheckAllBox","initPerisistSelection","prevColIndex","checkBoxSelectionChanged","isLeftRightFrozen","gobj","chkField","proxy_1","refreshPersistSelection","setRowSelection","selectedStateKeys","unSelectedRowStateKeys","rowObj_1","selectedData_1","getAvailableSelectedData","filteredSearchedSelectedData","mtbody","getMovableContentTbody","frtbody","getFrozenRightContentTbody","editChkBox","onDataBound","getSelectedRows","totalRecords","checkSelectAllAction","cRenderer","editForm","checkSelectAll","stateStr","updateSelectedRowIndexes","triggerChkChangeEvent","status","checkSelect","rowCellSelectionHandler","moveIntoUncheckCollection","rowObj_2","updateSelectedRowIndex","selectedVal","isAllSelected","isSelectAllRowCount","someDataSelected","isInteraction","checkToSelectAll","checkedLen","spanEle","rowCount","dataLen","targetHeadCell","targetRowCell","isCheckBox","popUpClickHandler","chkSelect","isEqualNode","hoverFrozenRows","showPopup","headerSelectionHandler","setCssInGridPopUp","headerAction","thLen","childElementCount","selectedIndexes","getSelectedRowCellIndexes","getKeyColIndex","targetLabel","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","ctrlPlusA","applySpaceSelection","stackedHeader","innerColumn","getstackedColumns","applyUpDown","selectColumn","selectColumnsByRange","innerColumnIndexes","detailIndentCell","dragdropIndentCell","addRemoveActiveClasses","selectedCol","getColumnHeaderByUid","isColSelected","isMultiColumns","clearColDependency","headerCell","previousColumnIndex","updateColSelection","selectedArgs","updateColProps","selectColumns","columnIndexes","getselectedCols","selectingArgs","selectColumnWithExisting","newCol","clearIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","deselectedArgs","isCanceled","columnDeselect","selectedHeader","getSelectedColumnCells","seletedcells","selectionString","onDataBoundFunction","setCheckAllForEmptyGrid","actionCompleteFunc","actionCompleteHandler","resizeEndFn","checkAllBox","isInfinitecroll","isSelectedRowIndexUpdating","Search","isActionPrevent","refreshSearch","onSearchComplete","cancelBeginEvent","ShowHide","colName","isShowHide","batchChanges","resetColumnState","changedCol","showBy","getToggleFields","hide","hideBy","finalized","getKeyBy","columnModel","batchActionPrevent","changedStateColumns","showHideArgs","currentViewCols","colsInCurrentView","col1","col2","Scroll","previousValues","oneTimeReady","uiupdate","tlbrElement","tlbrLeftElement","tlbrCenterElement","tlbrRightElement","tlbrItems","tlbrLeftWidth","tlbrCenterWidth","tlbrRightWidth","tlbrItemsWidth","tlbrWidth","refreshOverflow","mHdrHeight","height_1","getRowHeight","ensureOverflow","getThreshold","cssProps","getCssProperties","padding","hDiv","footerDiv","getFooterContent","appName","setScrollLeft","unwireEvents","mScrollBar","setPageXY","onTouchScroll","onCustomScrollbarScroll","test","onFrozenContentScroll","contentScrollHandler","headerScrollHandler","onContentScroll","isPreventScrollEvent","scrollTarget","isLeft","isDown","scrollDown","isFooter","pointerType","pageXY","getPointXY","scrollBar","touches","pageX","pageY","getScrollbleParent","scrollingElement","overflowY","addStickyListener","eventElement","makeStickyHeader","enableStickyHeader","sHeight","setLastRowCell","frTable","css","contentRect","getClientRects","headerEle","toolbarEle","groupHeaderEle","parentTop","colMenuEle","elemTop","setSticky","ccDlg","topStyle","AggregateColumn","getTemplate","setPropertiesSilent","AggregateRow","Clipboard","copyContent","isSelect","pasteHandler","grid","isMacLike","platform","metaKey","copy","clipBoardTextArea","x_1","scrollX","y_1","scrollY","scrollTo","paste","isAvail","dataRows","fTr","mTr","frTr","setCopyData","withHeader","getSelection","headerTextArray","getCopyData","leftCols","rightCols","movableCols","checkBoxSelection","headers","colIndexes","getColumnHeaderByIndex","match","setSelectionRange","isCell","isElement","queryCommandSupported","execCommand","blur","removeAllRanges","rowCellIndxes","stringify","SortDescriptor","SortSettings","Predicate","InfiniteScrollSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","ResizeSettings","GroupSettings","EditSettings","LoadingIndicator","Grid","keyA","frozenRightCount","frozenLeftCount","tablesCount","visibleFrozenLeft","visibleFrozenRight","visibleMovable","frozenLeftColumns","frozenRightColumns","movableColumns","media","isFreezeRefresh","tableIndex","componentRefresh","isVirtualAdaptive","rowUid","isAutoFitColumns","islazyloadRequest","pageTemplateChange","mediaBindInstance","commandDelIndex","asyncTimeOut","isExportGrid","enableLogger","needsID","Grid_1","Inject","mergePersistGridData","getPersistData","keyEntity","ignoreOnPersist","scrollPosition","currentObject","settings","pagerTemplate","persistData","addOnPersist","requiredModules","setFrozenCount","enableInfiniteAggrgate","modules","member","allowExcelExport","allowPdfExport","sortedColumns","isCommandColumn","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","preRender","initProperties","initializeServices","mediaCol","allowServerDataBinding","ignoreCollectionWatch","filterOperators","endsWith","equal","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","startsWith","wildCard","isNull","notNull","like","defaultLocale","EmptyRecord","True","False","InvalidFilterMessage","GroupDropArea","UnGroup","UnGroupButton","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Cancel","Update","Delete","Print","Pdfexport","Excelexport","Wordexport","Csvexport","Columnchooser","Save","Item","Items","EditOperationAlert","DeleteOperationAlert","SaveButton","OKButton","CancelButton","EditFormTitle","AddFormTitle","BatchSaveConfirm","BatchSaveLostChanges","ConfirmDelete","CancelEdit","ChooseColumns","SearchColumns","Matchs","FilterButton","ClearButton","StartsWith","NotStartsWith","Like","EndsWith","NotEndsWith","Contains","NotContains","IsNull","NotNull","IsEmpty","IsNotEmpty","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","ChooseDate","EnterValue","Copy","Group","Ungroup","GroupButton","UnGroupAria","GroupSeperator","UnGroupIcon","GroupedSortIcon","GroupedDrag","CheckBoxLabel","autoFitAll","AutoFitAll","AutoFit","Export","FirstPage","LastPage","PreviousPage","NextPage","SortAscending","SortDescending","EditRecord","DeleteRecord","FilterMenu","SelectAll","AddCurrentSelection","Blanks","FilterTrue","FilterFalse","NoResult","ClearFilter","Clear","NumberFilter","TextFilter","DateFilter","DateTimeFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","FilterMenuDialogARIA","ExcelFilterDialogARIA","DialogEditARIA","ColumnChooserDialogARIA","ColumnMenuDialogARIA","CustomFilterDialogARIA","SortAtoZ","SortZtoA","SortByOldest","SortByNewest","SortSmallestToLargest","SortLargestToSmallest","Sort","FilterDescription","SortDescription","ColumnMenuDescription","GroupDescription","ColumnHeader","TemplateCell","CommandColumnAria","DialogEdit","ClipBoard","AscendingText","DescendingText","NoneText","Expanded","Collapsed","keyConfigs","downArrow","upArrow","rightArrow","leftArrow","shiftDown","shiftUp","shiftRight","shiftLeft","home","escape","ctrlHome","ctrlEnd","pageUp","pageDown","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","altDownArrow","altUpArrow","ctrlDownArrow","ctrlUpArrow","ctrlPlusP","delete","f2","enter","ctrlEnter","shiftEnter","tab","shiftTab","space","ctrlPlusC","ctrlShiftPlusH","ctrlSpace","ctrlLeftArrow","ctrlRightArrow","renderModule","searchModule","getMediaColumns","setColumnIndex","checkLockColumns","processModel","gridRender","addListener","updateStackedFilter","refreshMaskRow","refreshing","axisDirection","dialogElement","gridHeader","gridContent","gridFooter","dialogHolder","maskRowCount","maskTemplate","getShimmerTemplate","maskSpan","paddingRight","paddingLeft","contentHeight","maskTableHeight","contentRowCount","headerMaskTable","createEmptyMaskTable","contentMaskTable","maskRowContentScroll","createMaskTable","getContentMaskColumns","movableHeaderMaskTable","getMovableContentMaskColumns","rightHeaderMaskTable","getRightContentMaskColumns","movableContentMaskTable","rightContentMaskTable","gridFooterContent","footerContentMaskTable","footerContent","movableFooterContentMaskTable","rightFooterContentMaskTable","translateMaskRow","getFrozenLeftColumns","getFrozenRightColumns","getMovableColumns","maskElement","footer","gridContentScrollHeight","overflow","maskTable","zIndex","transform","maskColgroup","createMaskRow","maskTHead","maskTBody","rowCountElement","altRow","altNumber","rowsQuery","addEditRow","addEditRowIndex","applyMaskRow","addEditMaskRow","tfoot","maskTFoot","maskTableHolderHeight","maskTableHolder","minScrollTop","getTransformValues","maskCells","maskCell","displayAsCheckBoxCell","refColgroup","refColumns","localTD","addShimmerEffect","maskTables","parent_1","refreshMaskRowColgroupWidth","gcol","getShowHideService","pushMediaColumn","matchMedia","mediaQueryUpdate","mediaColumn","showHider","refreshMediaCol","enableHover","removeMediaListener","removeListener","eventInitializer","hasGridChild","destroyDependentModules","toolTipObj","isIE","keyboardModule","clipboardModule","printModule","enableBoxSelection","setCSSClass","oldCSSClass","newProp","oldProp","checkCursor","requireRefresh","requireGridRefresh","freezeRefresh","childGridParent","parentInstance","isEllipsisTooltip","updateColumnObject","properties_1","rowTemplateFn","detailTemplateFn","childGridObject","currentParent","currentParentInstance","currentChildObject","oldProperties","restoreAdjustColumns","extendedPropertyChange","maintainSelection","updateRTL","getToolbar","getContextMenu","columnMenuModule","getColumnMenu","showFilterBarOperator","updateResizeLines","updateGridLines","columnMenuItems","applyTextWrap","removeTextWrap","pending_1","getPrototypeOf","deepWatch","gResult","names","scrollRefresh","enableVerticalRendering","fn_1","muteOnChange","refreshFilter","setTablesCount","getTablesCount","headerCells","stdHdrCell","updateColumnModel","isRecursion","updateColumnLevelFrozen","updateFrozenColumns","updateLockableColumns","directFrozenCount","totalFrozenCount","frozenName","frozenCount","isRefresh","inview","vLen","ensureFrozenCols","individualColumn","stackedColumn","getLocaleConstants","setColumnIndexesInView","getCurrentVisibleColumns","setGridHeaderContent","setGridContentTable","setGridContent","setGridHeaderTable","footerElement","getFooterContentTable","getPager","gridPager","setGridPager","getFrozenRowByIndex","getFrozenDataRows","getRowInfo","rowData","getFrozenRightRowElements","getAllDataRows","includeAdd","getFrozenLeftContentTbody","mrows","includAdd","dRows","getAllMovableDataRows","getAllFrozenDataRows","getAllFrozenRightDataRows","rowuID","isRight","pkName","fieldIdx","rowObjects","frIdx","Idx","sRow","columnUid","clearTemplate","isChildGrid","refreshReactTemplateTD","childIndent","isChildRow","rowsObj","refreshGroupCaptionFooterTemplate","dataUid","headerCellRenderer","selectRowEle","currentTbl","currentTblName","setFrozenRowData","lTr","rTr","fRowTr","refreshForeignData","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getColumnHeaderByField","getStackedColumns","getUidByColumnField","rowDropSettings","targetID","getColumnFieldNames","columnNames","getDetailTemplate","getEditHeaderTemplate","editHeaderTemplateFn","getEditFooterTemplate","editFooterTemplateFn","getSelectedColumnsUid","showColumns","hideColumns","getFrozenCount","splitFrozenCount","getVisibleFrozenLeftCount","getVisibleFrozenRightCount","getVisibleMovableCount","getVisibleFrozenColumns","getVisibleFrozenColumnsCount","getVisibleFrozenCount","getFilterUIInfo","visibleFrozenColumns","goToPage","pageNo","updateExternalMessage","message","isMultiSort","sortModule","changeDataSource","removeSortColumn","clearGridActions","filterByColumn","fieldName","filterOperator","filterValue","actualFilterValue","actualOperator","removeFilteredColsByField","isClearFilterBar","print","deleteRecord","fieldname","startEdit","addRecord","deleteRow","editCell","saveCell","enableToolbarItems","isEnable","enableItems","recalcIndentWidth","indentWidth","perPixel","parentOffset","applyWidth","newWidth","resetIndentWidth","reorderColumns","fromFName","toFName","reorderModule","reorderColumnByIndex","reorderColumnByTargetIndex","fromIndexes","rowDragAndDropModule","refreshDataSource","disableRowDD","headerRows","disValue","autoFitColumns","fieldNames","tableWidth","percentageWidth","isPercentageWidthGrid","unit","widthUnit","defaultIndentWidth","indentWidthUnitFormat","headerIndentCol","contentIndentCol","setProperty","tableWidthUnitFormat","removeProperty","indentWidthUnitFormat_1","forEach","createColumnchooser","columnChooserModule","renderColumnChooser","valueFormatterService","flag","gCols","sCols","sLen","isFromGroup","parentKeyFieldValue","queryString","initForeignColumn","rendererFactory","createGridPopUpElement","createTooltip","popup","gridLines","opensOn","getTooltipStatus","headerDivTag","htable","ctable","prevElement","elemNames","innerElement","enableHtmlParse","scrollHandler","tag","myTableDiv","cssText","mySubDiv","myTable","myTr","mytd","onKeyPressed","mouseClickHandler","focusOutHandler","dblClickHandler","keyPressHandler","keyAction","keyActionHandler","eventName","tapEvent","dataBoundFunction","checkEdit","dataRow","ariaOwns","keyPress","editFormValidate","persistedData","getLocalData","dataObj","isProtectedOnChange","keys_1","mergeColumns","storedColumn","storedColumns","localCol","tCol","this_2","presskey","stopImmediatePropagation","altKey","collapse","setInjectedModules","injectedModules","refreshColumns","fCnt","frCnt","mTbl","frTbl","colGrp","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","groupColumn","groupExpandAll","expandAll","groupCollapseAll","collapseAll","clearGrouping","ungroupColumn","openColumnChooser","detailCollapseAll","detailRowModule","detailExpandAll","isContextMenuOpen","ensureModuleInjected","getInjectedModules","propertyNames","loggerModule","applyBiggerTheme","getPreviousRowData","previousRowData","hideScroll","mvblScrollBar","mvblChild","getRowIndexByPrimaryKey","pKvalue","performComplexDataOperation","getFilteredRecords","getUserAgent","Global","timer","clearTimeout","getRowUid","prefix","getFrozenVirtualContent","getRowElementByUID","frozenRigtRows","cntRows","rows_2","getHiddenColumns","calculatePageSizeByParentHeight","containerHeight","pagesize","nonContentHeight","getNoncontentHeight","getSummaryValues","summaryCol","summaryData","serverExcelExport","exportGrid","serverPdfExport","serverCsvExport","gridModel","include","sorted","setHeaderText","form","gridInput","method","submit","getFormat","currencyCode","isExpanded","updateRowValue","setForeignKeyData","colpending","resetFilterDlgPosition","filterDlg","gClient","fClient","callBack","portals","renderReactTemplates","batchUpdate","processRowChanges","batchAsyncUpdate","processBulkRowChanges","dataToBeUpdated","loopstring","keyField","compareChanges","setNewData","oldValues","bulkRefresh","deleteRowElement","mtr","out_i_1","_loop_3","this_3","_loop_4","isRowExist","this_4","renderRowElement","resetRowIndex","mTbody","model","addRowObject","moveTbody","renderMovable","updateVisibleExpandCollapseRows","getHeight","isInteger","getMovableHeaderTbody","getFrozenHeaderTbody","getFrozenRightHeaderTbody","isCustom","showCustomFilter","showCustomSort","showAdaptiveFilterDialog","showAdaptiveSortDialog","isColVirtualization","gridCols","gridCols_1","getCloneProperties","isAsyncPrint","defered","isContentReady","isPrintGrid","removeColGroup","printGridObj","renderPrintGrid","printGrid","getPrintGridModel","viewContainerRef","injectedModues","printgrid","isVue3","overflowX","waitingPop","printGridElement","printWind","outerHeight","outerWidth","resizeTo","screen","availWidth","availHeight","depth","groupCaption","colGroups","contentColGroups","hideColGroup","printGridProp","checkFor","updateFunction","requestAnimationFrame","array","getActualProperties","validSelector","copyAttr","literals","extend","second","exclude","moved","ind","autoWidth","popUp","popUpSpan","targetPosition","isBottomTail","changedTouches","getPopupLeftPosition","isID","inArray","getActualPropFromColl","clientX","divNode","rect","getComplexFieldID","replace","getParsedFieldID","setComplexFieldID","isEditable","isOldRow","isIdentity","inst","showConfirmDialog","clName","distinctStringValues","elementVisible","dlgWidth","newpos","leftPos","getZIndexCalcualtion","lValue","fField","fdata","String","filterObject","datePredicate","prevDate","nextDate","prevObj","nextObj","setSeconds","setHours","predicateSt","predicateEnd","dateOnlyString","mEle","object","splits","newCase","charAt","toUpperCase","getCustomDateFormat","formatvalue","getDatePattern","getExpandedState","printMode","printGridModel","deep","obj1","getPrototypesOfObj","i_1","cpy","cln","checkDepth","indices","getColumnModelByFieldName","transformV","replacedTv","translateX","translateY","rootElement","alignFrozenEditForm","mTD","fTD","mHeight","fHeight","ensureLastRow","cntOffset","ensureFirstRow","rowTop","getEditedDataIndex","dataIndex","currentValue","originalValue","percentageCol","undefinedWidthCol","rowElms","startRowIndex","newArray","o","frozenRightRowElements","splitFrozenRowObjectCells","rightIndex","mvblIndex","mvblEndIdx","getExactFrozenMovableColumn","visibleOnly","getGridRowObjects","getGridRowElements","sliceElements","setValidationRuels","rules","mRules","frRules","getMovableTbody","getFrozenRightTbody","numberFormat","getNumberPattern","currency","useGrouping","patternRegex","mtch_1","'","pattern","dialogs","mapObject","returnObj","duplicateMap","actualIndex","evt","isOn","evt_1","createEditElement","classNames","complexFieldName","getColumnModelByUid","registerEventHandlers","evts","handlers","eventHandlers","removeEventHandlers","component","checkActiveMatrix","checkCellIndex","activeMatrix","currentCellIndexPass","isScheduledTask","ganttProp","startDate","endDate","duration","isCountRequired","getSwapKey","isRemoteData","getTaskData","isNotExtend","eventArgs","taskData","timezone","updateDates","dateValidationModule","ganttProperties","baselineEndDate","baselineStartDate","regx","RegExp","getIndex","key1","key2","DateProcessor","isValidateNonWorkDays","isAutoSchedule","includeWeekend","totalHolidayDates","checkStartDate","validateAsMilestone","isLoad","tStartDate","cloneStartDate","hour","getSecondsInDecimal","isMilestone","defaultStartTime","setTime","defaultEndTime","setDate","workingTimeRanges","to","from","autoCalculateDateScheduling","holidayLength","startTime","tempDate","getNextWorkingDay","holidayFrom","getDateFromFormat","holidayTo","checkEndDate","tempCheckDate","cloneEndDate","getPreviousWorkingDay","tempHoliday","setMinutes","checkBaselineStartDate","cloneDate","checkBaselineEndDate","calculateStartDate","ganttData","tempStartDate","getStartDate","durationUnit","setRecordValue","dataOperation","updateMappingData","calculateEndDate","tempEndDate","compareDates","calculateDuration","segments","totalDuration","getEndDate","offsetDuration","tDuration","taskbarEditModule","sumOfDuration","milestone","getDuration","columnByField","columnMapping","cellEditModule","isCellEdit","read","dialog","dialogModule","textBox","getNonworkingTime","sDate","eDate","isCheckTimeZone","weekendCount","getWeekendCount","totalHours","getNumberOfSeconds","holidaysCount","getHolidaysCount","totWorkDays","nonWorkHours","getNonWorkingSecondsOnDate","totalNonWorkTime","secondsPerDay","durationValue","timeDiff","getTimeDifference","durationHours","getFormatedDate","getDurationAsSeconds","toLocaleLowerCase","tempStart","secondDuration","nonWork","workHours","fromValidation","tempEnd","getProjectStartDate","cloneProjectStartDate","projectStartDate","flatData","minStartDate","getValidStartDate","isAuto","autoStartDate","autoEndDate","autoDuration","getValidEndDate","getSecondsPerDay","dayWorkingTime","totalSeconds","nonWorkingHours","nonWorkingTimeRanges","currentRange","startHour","endHour","sdSeconds","edSeconds","isWorking","interval","getDurationValue","isFromDialog","durationUnitEditText","output","dayIndex","nonWorkingDayIndex","holidays","currentHoliday","getHolidayDates","holidayDates","isOnHolidayOrWeekEnd","checkWeekEnd","sHour","eHour","startRangeIndex","endRangeIndex","totNonWrkSecs","startOnHoliday","endOnHoliday","range","previousIndex","getNonWorkingDayIndex","weekDay","weekDayLength","workWeek","seconds","sec","updateDateWithTimeZone","uTZ","uDate","sTZ","getTimezoneOffset","eTZ","standardTZ","tzDiff","offset","localOffset","convertedDate","toLocaleString","timeZone","fromOffset","toOffset","fromLocalOffset","toLocalOffset","convert","toConvert","updatedDate","dateObject","globalize","date1","date2","getDurationString","plural","getWorkString","work","workUnit","calculateProjectDatesForValidatedTasks","editArgs","projectEndDate","maxEndDate","sortedStartDate","sortedEndDate","cloneProjectEndDate","calculateProjectDates","timelineModule","isZooming","taskRange","addDateToList","sortDates","dates","isZoomToFit","viewData","treeGrid","filteredResult","task","renderBaseline","indicators","eventMarkers","marker","day","holiday","prevProjectStartDate","splitTasksDuration","segment","bottomTier","TaskProcessor","recordIndex","taskIds","hierarchyData","checkDataBinding","isChange","updatedRecords","dataArray","ids","predecessorsCollection","parentData","processTimeline","renderGantt","initDataSource","ganttdata","cloneDataSource","enableValidation","validateTimelineProp","queryManager","constructDataSource","mappingData","rootData","groupData","dataReorder","taskIdMapping","parentIdMapping","hierarchicalData","tempData","segmentId","segmentCollection","segmentData","viewType","resources","unassignedTasks","constructResourceViewDataSource","resourceFields","prepareDataSource","resourceData","resourceInfo","resourceIdMapping","resource","prepareRecordCollection","initialLoadData","calculateSharedTaskUniqueIds","dependency","predecessorModule","ensurePredecessorCollection","getTaskIds","sharedRecords_1","ids_1","taskId","rowUniqueID","sharedTaskUniqueIds","parentItem","createRecord","updateTaskLeftWidth","setTaskIds","childData","parentProgress","parentProp","updateWorkWithDuration","parentWork","calculateAutoDuration","updateAutoWidthLeft","allowParentDependency","resetDependency","updateWidthLeft","updateTaskData","addCustomFieldValue","ganttRecord","ganttColumns","taskSettings","progress","notes","predecessors","autoSchedule","manual","addTaskData","setResourceInfo","updateResourceName","calculateScheduledValues","toLocaleDateString","getCloneParent","parentUniqId","uniqueID","hasChildRecords","collapseAllParentTasks","updateExpandStateMappingValue","calculateWidth","calculateLeft","getProgressWidth","calculateBaselineLeft","calculateBaselineWidth","childRecords","uniqueId","allowUnscheduledTasks","setSegmentsInfo","sortSegmentsData","onLoad","ganttSegments","remainingDuration","segmentIndex","setSegmentTaskData","segmenttaskData","resourcesLength","resourceUnit","resourceOneDayWork","actualOneDayWork","durationInDay","getDurationInDay","isOnEdit","childCompletedWorks","cloneParent","expanded","reUpdateResources","tempData_1","segmentDataCollection","updatableValue","expandStateMapping","expandState","mappingValue","setValidatedDates","updateDurationValue","isMileStone","durationMapping","validateDurationUnitMapping","validateWorkUnitMapping","taskTypeMapping","tType","validateTaskTypeMapping","calculateDateFromStartDate","calculateDateFromEndDate","taskType","updateUnitWithWork","updateDurationWithWork","totalResourceOneDayWork","updatedDuration","getWorkInHour","totalUnitInPercentage","individualUnit","isTreeGridRendered","parentWidth","percent","unscheduledTaskWidth","getTaskWidth","getTaskbarHeight","taskBarHeight","taskbarHeight","getTaskLeft","calculateAutoLeft","calculateAutoWidth","tierMode","topTier","isValid","modifiedsDate","dateDiff","perDayWidth","timelineStartDate","getSplitTaskWidth","tierViewMode","getSplitTaskLeft","segmentTaskStartDate","stDate","resourceSettings","resourcesId","resourcesName","resName","join","updateTaskDataResource","setRecordDate","setRecordDuration","segmentTaskData","preTaskResources","isAdded","mapping","isDynamicData","setDataSource","createData","setStartDate","dataMapping","taskName","parentId","resourceIdCollection","isAddNewResource","ganttResources","resourceIDMapping","resourceUnitMapping","resourceGroup","_loop_5","ganttDataResource","updateResourceUnit","length_1","resourceName","taskMapping","resourceLength","taskResources","flatCollection","rootCollection","tempDuration","reUpdateGanttData","updateGanttData","_isInStartDateRange","isInRange","_isInEndDateRange","updateOverlappingValues","resourceTask","currentTask","tasks","ranges","workTimelineRanges","setSortedChildTasks","updateOverlappingIndex","cStartDate","cEndDate","tEndDate","rangeObj_1","mergeRangeCollections","calculateRangeLeftWidth","eOverlapIndex","isSplit","finalRange","currentTopRange","cCompareRange","sortedRanges","splitRangeCollection","sortedRecords","rangeCollection","fromField","toField","splitArray","isSingleTier","getRangeWithWeek","getRangeWithDay","splitRangeForDayMode","fromString","rangeObject","nStart","nEndDate","nextAvailDuration","splitRangeForWeekMode","isInSplit","rangeObj","getParentTask","updateParentItems","reUpdateGanttDataPosition","fixedWidth","totalTaskWidth","timelineSettings","timelineUnitSize","totalProgressWidth","chartRowsModule","incrementSegments","showProgress","progressWidth","pStartDate","getParentProgress","childGanttRecord","progressValues","totalProgress","recordProp","isParent","deleteUpdate","previousStartDate","previousEndDate","childLength","milestoneCount","isOnDelete","isDelete","taskCount","taskbarEditedArgs","ganttChartPane","treeGridPane","ganttChart","chartBodyContainer","chartScrollElement","chartBodyContent","scrollContent","adaptive","taskTable","zeroSpacing","timelineHeaderContainer","timelineHeaderTableContainer","timelineHeaderTableBody","timelineTopHeaderCell","timelineHeaderCellLabel","weekendHeaderCell","timelineSingleHeaderCell","timelineSingleHeaderOuterDiv","leftLabelContainer","leftLabelTempContainer","leftLabelInnerDiv","rightLabelContainer","rightLabelTempContainer","rightLabelInnerDiv","parentTaskBarInnerDiv","parentProgressBarInnerDiv","childTaskBarInnerDiv","childProgressBarInnerDiv","criticalChildTaskBarInnerDiv","criticalChildProgressBarInnerDiv","criticalMilestone","baselineBar","baselineMilestoneContainer","chartRowCell","rowExpand","rowCollapse","taskBarLeftResizer","progressBarHandler","progressHandlerElement","progressBarHandlerAfter","traceMilestone","parentMilestone","manualParentMainContainer","manualParentTaskBar","manualParentMilestone","manualChildTaskBar","manualChildProgressBar","manualParentRightResizer","manualParentLeftResizer","traceManualUnscheduledTask","traceUnscheduledTask","taskIndicatorDiv","leftResizeGripper","rightResizeGripper","progressResizeGripper","unscheduledTaskbarLeft","unscheduledTaskbarRight","unscheduledTaskbar","dependencyViewContainer","connectorLineContainer","connectorLineSVG","criticalConnectorLineSVG","criticalConnectorArrowSVG","connectorLineArrow","connectorLineZIndex","connectorPointLeft","connectorPointRight","connectorPointLeftHover","connectorPointRightHover","falseLine","rightConnectorPointOuterDiv","leftConnectorPointOuterDiv","connectorPointAllowBlock","ganttTooltip","activeParentTask","activeChildTask","activeConnectedTask","touchMode","rangeChildContainer","ChartScroll","previousScroll","ganttChartModule","scrollElement","addEventListeners","gridScrollHandler","onScroll","updateShimmer","removeShimmer","removeEventListeners","isFromTreeGrid","updateTopPosition","contentScrollTop","virtualScrollModule","getTopPosition","dayMarkersModule","holidayContainer","weekendContainer","eventMarkersContainer","chartVerticalLineContainer","hideMaskRow","allowTaskbarOverlap","showOverAllocation","ganttChartTableBody","updateSpinner","isScrolling","scrollArgs","previousScrollTop","scrollDirection","chartTimelineContainer","previousScrollLeft","isToolBarClick","showIndicator","setScrollTop","leftSign","VirtualContentRenderer","renderWrapper","wrapper","appendChildElements","adjustTable","virtualRender","GanttChart","isExpandCollapseFromChart","isExpandAll","isGanttElement","rangeViewContainer","renderChartContainer","renderChartElements","renderInitialContents","renderChartContents","chartElement","chartPane","renderTimelineContainer","renderBodyContainers","createTimelineSeries","renderOverAllocationContainer","rangeContainer","renderRangeContainer","isFromOnPropertyChange","updateProjectDates","isTimelineRoundOff","renderChartRows","connectorLineIds","updatedConnectorLineCollection","createConnectorLinesCollection","connectorLineModule","renderConnectorLines","criticalModule","criticalPathModule","enableCriticalPath","criticalPathCollection","criticalConnectorLine","detailPredecessorCollection","predecessorCollectionTaskIds","updateWidthAndHeight","processZoomToFit","recordLength","renderRange","getTopValue","currentRecord","getExpandedRecords","getRangeHeight","topValue","enableMultiTaskbar","sameIDElement","parentDiv","leftDiv","rightDiv","borderLeftWidth","borderRightWidth","scrollObject","toolbarHeight","ganttHeight","emptydivHeight","emptyHeight","contentElement","totalTimelineWidth","setVirtualHeight","updateGridLineContainerHeight","updateLastRowBottomWidth","wrapper1","treegridVirtualHeight","expandedRecords","lastExpandedRow","lastExpandedRowIndex","ganttChartMouseDown","which","allowTaskbarEditing","ganttChartMouseClick","autoFocusTasks","scrollToTarget","ganttChartMouseUp","updateScrollLeft","mouseUp","removeFalseLine","resizeCheck","ganttDragElemet","documentMouseUp","Check","clonetbody","cloneTable","isTaskbarEdited","showActiveElement","focusedElement","isOnTaskbarElement","chartExpandCollapseRequest","onTaskbarClick","taskbarElement","chartRow","getRecordByTarget","ganttChartLeave","ganttChartMove","connectorLineEditModule","updateConnectorLineEditElement","contextClick","closeFilterOnContextClick","srcElement","onMouseMove","originalEvent","rowElement","columnElement","indicator","predecessor","tooltipModule","getPredecessorTooltipData","getMarkerTooltipData","dataset","doubleClickHandler","getRecordByID","getChartRows","gridRow","collapseGanttRow","expandGanttRow","reRenderConnectorLines","collapsedGanttRow","expandCollapseChartRows","collapseRow","renderMultiTaskbar","updateContentHeight","expandedGanttRow","expandRow","isExpandCollapseLevelMethod","refreshRecords","isChild","displayType","targetElement","chartRows","expandCollapseAll","expandAtLevel","collapseAtLevel","isIE11Pointer","isPointer","mouseDown","touchStartEvent","touchEndEvent","mouseMove","touchMoveEvent","isAdaptive","getRecordByTaskBar","getIndexByTaskBar","onTabAction","isInEditedState","$target","setActiveElement","focusedRowIndex","isTab","nextElement","getNextElement","tempNextElement","childrenIndex","nextElementIndex","isEditableElement","manageFocus","editedColumn","fmodule","previousElementSibling","validateNextElement","childElement","getNextRowElement","getChildElement","childElement_1","isChartRow","currentItem","expandedRecordIndex","nextRecord","nextRowIndex","elementByClass","hasChildNodes","isChartElement","getElementsByTagName","Timeline","ganttObj","isZoomIn","topTierCollection","bottomTierCollection","timelineEndDate","customTimelineSettings","currentZoomingLevel","roundOffDays","processTimelineProperty","timelineWidthCalculation","refreshTimeline","processTimelineUnit","refreshTimelineByTimeSpan","updateChartByNewTimeline","refreshChartByTimeline","processZooming","zoomingProjectStartDate","zoomingProjectEndDate","checkCurrentZoomingLevel","currentLevel","zoomingLevels","controlId","findIndex","tempLevel","newTimeline","timeline","changeTimelineSettings","skipProperty","assignValue","zoomingLevel","firstValue","secondValue","timeDifference","totalDays","chartWidth","zoomingCollections","sortedCollectons","roundOffDateToZoom","numberOfCells","calculateNumberOfTimelineCells","emptySpace","abs","bottomTierCellWidthCalc","zoomLevel","convertedMilliSeconds","daysInMonth","daysInYear","isStartDate","roundOffTime","numberOfDays","directProperty","innerProperty","tierUnits","extendFunction","timelineViewMode","previousIsSingleTier","validateCount","validateFormat","weekStartDay","calculateZoomingLevelsPerDayWidth","collections","getPerDayWidth","tier","getCurrentZoomingLevel","currentZoomCollection","checkSameCountLevels","getZoomingLevels","sameUnitLevels","closestUnit_1","getClosestUnit","sortedUnitLevels","checkCollectionsWidth","closetUnit","isCont","bottomTierUnits","checkSameLevels","zoomLevels","sortedZoomLevels","updateTimelineHeaderHeight","loopCount","createTimelineTemplate","timelineContainer","tierCount","timelineRoundOffEndDate","validateBottomTierCount","tierFormat","cloneObj","propertyCollection","tempObj","formatDateHeader","dayFormat","dateString","formatDate","customFormat","increment","newTime","parentTh","parentTr","scheduleDateCollection","timelineCell","getHeaterTemplateString","calculateQuarterEndDate","getIncrement","tierCollection","updateTimelineAfterZooming","resized","totWidth","contentWidth","widthDiff","getTimelineRoundOffEndDate","firstDay","lastDay","dayIntervel","checkDate","diffCount","isInDst","isWeekendHeaderCell","month","scheduleWeeks","isLast","thWidth","cellWidth","calculateWidthBetweenTwoDate","isWeekendCell","textClassName","weekendBackground","showTooltip","isWeekend","balanceDay","bottomTierCount","topTierCount","bottomTierCellWidth","topTierCellWidth","roundOffStartDate","updateScheduleDatesByToolBar","updateTimeLineOnEditing","tempArray","filteredStartDateRecord","pdc","filteredEndDateRecord","validStartDate","validEndDate","maxStartLeft","maxEndLeft","validStartLeft","validEndLeft","taskbarModule","taskBarEditAction","performTimeSpanAction","isFrom","timeSpanActionEvent","ProjectEndDate","currentScrollLeft","eventType","TreeGridColumn","BASE_DOC_URL","DOC_URL","WARNING","ERROR","INFO","Logger","patchadaptor","detailLists","cOp","success","console","logType","generateMessage","beforeSend","request","module_missing","injected","promise_enabled","primary_column_missing","selection_key_missing","actionfailure","formatError","formatErrorHandler","ajaxError","ajaxErrorHandler","locale_missing","lObj","limitation","check_datasource_columns","virtual_height","grid_remote_edit","grid_sort_comparer","resize_min_max","action_disabled_column","destColumn","exporting_begin","exporting_complete","foreign_key_failure","initial_action","frozen_rows_columns","column_type_missing","datasource_syntax_mismatch","jsonResult","responseText","responseURL","statusText","IsRowDDEnabled","gridurl","substring","treeGridObj","treeLog","treeGridDetails","mapping_fields_missing","idMapping","childMapping","checkboxChange","expanding","collapsing","remoteExpand","localPagedExpandCollapse","pagingActions","beginAdd","batchSave","virtualActionArgs","dataListener","indexModifier","rowdraging","rowDropped","TreeClipboard","treeCopyContent","copiedUniqueIdCollection","treeGridParent","uniqueid","copyHierarchyMode","parentContentData","childContentData","treeLevel","isCheckboxcolumn","showCheckbox","isFilterChildHierarchy","hierarchyMode","getExpandStatus","parents","childParent","parentRecord","getParentData","initialRender","findChildrenRecords","datas","isSummaryRow","isOffline","extendArray","objArr","getPlainData","requireFilter","idFilter","isHidden","el","visibility","ContextMenuItems","selectedItems","filteredList","searchingRecords","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","selectCheckboxes","autoCheckHierarchy","checkBoxvalue","headerSelection","getCheckedRecords","getCheckboxcolumnIndex","mappingUid","headerCelllength","headercell","headerElement","renderColumnCheckbox","checkboxState","containerELe","divEle","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","getFilteredChildRecords","filteredChildRecords","indeter","checkChildRecords","checkBoxRecord","hasFilteredChildRecords","multiFilterCheckState","filterResult","rec","checkedRecord","checkboxRecord","movableTr","checkedIndex","checkBoxclass","updatedData","getCheckedrecords","getCheckedRowIndexes","printTreeGrid","templateResult","columnTemplateResult","reactTemplateRender","RowModifier","pageSizeMode","collapsed","enableCollapseAll","parentrec","dragStartData","draggedRecord","lastRowBorder","lastVisualData","getVisibleRecords","cellRender","cellElement","ispadfilter","filterLevel","pad","totalIconsWidth","getVirtualColIndexByUid","treeColumnIndex","emptyExpandIcon","iconRequired","loadChildOnDemand","expandIcon","updateTreeCell","freezerightColumns","freezeLeftColumns","checkboxElement","treeColumn","treecell","DataManipulation","parentItems","storedIndex","sortedData","isSortAction","dataResults","isSelfReference","updateParentRemoteData","beginSorting","collectExpandingRecs","dataProcessor","convertToFlatData","filterKey","param","addParams","hasChildMapping","qry","req","httpRequest","zerothLevelData","convertJSONData","selfData","selfReferenceUpdate","createRecords","referenceData","expands","expandRecord","isExpandCollapse","childRecords_1","random","summaryQuery","q","summaryModule","calculateSummaryValue","rowDetails","childRecord","gridRows","targetEle","childRows","expandingTd","fetchRemoteChildData","clonequries","expandDetail","filterqry","remoteExpandedData","remoteCollapsedData","inx","haveChild","resultChildData","parentUniqueID","gridQuery","virtualArgs","remoteVirtualAction","notifyArgs","prevInfo","loadNext","nextInfo","parentRecords","treeGridData","currentData","isExport","expresults","exportType","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","results","fltrQuery","srchQuery","gridQuery_1","srtQry","srt","compFun","modifiedData","dragdIndex","dropdIndex","sortArgs","query_1","paging","actArgs","isPdfExport","isCollapsedStatePersist","actualResults","expandStatus","dataResult","editAction","details","control","addRowIndex","addRowRecord","treeData","originalData","isSkip","addAct","addAction","editedData","updateParentRow","currentData_1","removeChildRecords","currentViewRecords","primaryKeys","currentdata","internalProperty","isChildAll","editRowIndex","updateCurrentViewData","updatedParent","index_2","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","indentOutdentAction","modifiedRecords","excludeKeys","TreeGrid_1","mergePersistTreeGridData","logger","TreeGridLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","sortByColumn","gridLocale","treeGridLocale","localeObject","treeGridkeyActionHandler","parentTarget","summaryElement","expandCollapseRequest","findnextRowElement","cellIndex_1","findPreviousRowElement","summaryRowElement","infiniteScrollData","isCollapseAll","ctrlShiftUpArrow","ctrlShiftDownArrow","getGridColumns","freezePresent","IsRowDDInjected","isIndentEnabled","vueInstance","dataModule","autoGenerateColumns","convertTreeData","loadGrid","gridContainer","gridRequiredModules","root","refreshToolbarItems","renderComplete","destroyTemplateFn","indentID","outdentID","indentElement","outdentElement","afterGridRender","griddata","bindGridProperties","bindedDataSource","getGridToolbar","getGridEditSettings","templateInstance","isJsComponent","triggerEvents","IsExpandCollapseClicked","bindGridEvents","excelQueryCellInfo","pdfQueryCellInfo","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","columnMenuOpen","columnMenuClick","resizing","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","visiblerow","isAddBorder","isPixelHeight","updateRowTemplate","updateAltRow","totalRows","callBackPromise_1","beforeDataBoundArgs","callBackPromise","toolbarargs","cellselectingArgs","begineditArgs","isExpandRefresh","contextitems","contextMenu","cellsaveArgs","prom","treeColumnRowTemplate","isDataAvailable","datacount","defaultQuery","callBackPromise_2","updateTreeGridModel","ag","showChildSummary","selectedItem_1","dropIndex","dropPosition","currentPageItem","contextMenuClick","contextMenuOpen","rowDragStartHelper","rowDragStart","rowDrag","rowDrop","allowEditOnDblClick","showDeleteConfirmDialog","iconCss","tooltipText","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumnCollection","treeColumnTextAlign","treeColumnField","isDataSourceChanged","eventListener","updateTreeColumnTextAlign","treeGridElement","hasTreeGridChild","ignoreOnColumn","objVal","ignoreInArrays","ignoreInColumn","isEditCollapse","isAddedRowByMethod","visibleRecords","Columns","deepMerge","updateColumnsWidth","currentColumn","persist1","persist2","rowInfo","rowInfo_1","parentRec","getCollapseExpandRecords","pagerValuePresent","pagerdropdownModule","isExpandingEventTriggered","expandAllPrevent","expandRows","expandingArgs","expandCollapseAllChildren","expandCollapse","expandArgs","setHeightForFrozenContent","updateExpandStateMapping","isExpandedEventTriggered","refreshScrollOffset","isCollapsingEventTriggered","collapseAllPrevent","collapseRows","collapsingArgs","collapseArgs","isCollapsedEventTriggered","scrollBy","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","puniqueID_1","collapseAction","collapseByKey","primaryKeyField","isExpandCollapseall","updateChildOnDemand","displayAction","detailrows","localExpand","lastrowIdx","flatDataRecords","childDataBind","scrollHeightBeforeRefresh","collapseRemoteChild","freezeRightRows","gridRowsObject","visibleRowCount","rcell","movablerows","rightrows","collapsingTd","expandElement","eRows","updateRowAndCellElements","updateResultModel","returnResult","baseModule","treeModule","outdent","GanttTreeGrid","filPopOptions","filOptions","filterMenuElement","oldKey","currentKey","treeGridColumns","isLocaleChanged","previousGanttColumns","validateGanttColumns","createContainer","updateScrollTop","renderReactTemplate","tempHeader","renderTreeGrid","composeProperties","bindEvents","getContentDiv","getHeaderDiv","getScrollbarWidth","outer","msOverflowStyle","inner","scrollbarWidth","ensureScrollBar","isMobile","treeActionComplete","treeDataBound","createExpandCollapseArgs","collapsedArgs","expandedArgs","updateKeyConfigSettings","record_1","updatedArgs","focussedElement","getTaskByUniqueID","initiateCellEdit","currentEditRow","isCancelled","addDeleteRecord","indexvalue","currentSelection","addedRecord","updateDragDropRecords","treeGridClickHandler","customColumns","tasksMapping","bindTreeGridColumnProperties","createTreeGridColumn","composeUniqueIDColumn","isDefined","previousColumn","prevcolumn","composeIDColumn","renderWorkingDayCell","renderDayCell","durationValueAccessor","composeProgressColumn","composeResourceColumn","showInlineNotes","workValueAccessor","taskTypeValueAccessor","modeValueAccessor","resourceValueAccessor","getResourceIds","taskIDName","isProjectView","lengthDataSource","idValueAccessor","newGanttColumn","ganttColumn","resourceNames","newScrollTop","DayWorkingTime","Holiday","EventMarker","TaskFields","TimelineTierSettings","TimelineSettings","LabelSettings","TooltipSettings","SplitterSettings","ResourceFields","ChartRows","milestoneHeight","milesStoneRadius","baselineTop","baselineHeight","touchLeftConnectorpoint","touchRightConnectorpoint","dropSplit","refreshedTr","refreshedData","isUpdated","initPublicProp","createChartTable","initiateTemplates","refreshGanttRows","initChartHelperPrivateVariable","initializeChartTemplate","createTaskbarTemplate","isGanttChartRendered","getIndicatorNode","templateString","getIndicatorleft","iconClass","createDivElement","getChildTaskbarNode","childTaskbarNode","templateData","childTaskbarTemplateFunction","getTemplateID","labelString","taskLabel","taskbarInnerDiv","progressDiv","getBorderRadius","tempDiv","taskLabelTemplateFunction","taskLabelTemplateNode","labelSettings","getTaskLabel","splitTaskbar","templateElement","childLabel","marginLeft","marginRight","splitTasks","progressBarVisible","segmentPosition","generateSpiltTaskAriaLabel","getSplitTaskbarLeftResizerNode","getSplitTaskBorderRadius","getSplitTaskbarRightResizerNode","getSplitProgressResizerNode","lResizerLeft","rResizerLeft","getSegmentIndex","splitStartDate","mergeTask","segmentIndexes","mergeArrayLength","mergeData","firstSegmentIndex","arrayLength","firstSegment","secondSegment","secondSegmentIndex","insertIndex","refreshChartAfterSegment","updatedRecordsDateByPredecessor","removePreviousConnectorLines","refreshEditedRecordConnectorLine","isInPredecessorValidation","triggerQueryTaskbarInfoByIndex","splitTask","splitDates","splitDate","splitRecord","segmentDuration","splitSegmentedTaskbar","constructSegments","segmentsArray","checkClickState","segmentEndDate","endDateState","mode_1","timeIncrement","diff","getMilestoneNode","milestoneNode","milestoneTemplateFunction","getTaskBaselineNode","baselineLeft","baselineWidth","baselineColor","getMilestoneBaselineNode","baselineMilestoneHeight","milestoneMarginTop","getLeftLabelNode","leftLabelNode","generateTaskLabelAriaLabel","leftLabelTemplateNode","leftTaskLabelTemplateFunction","leftLabel","getLableText","labelDiv","leftLabelHeight","taskBarMarginTop","spanElem","getRightLabelNode","rightLabelNode","rightLabelTemplateNode","rightTaskLabelTemplateFunction","rightLabel","getManualTaskbar","autoLeft","milestoneTemplate","getParentTaskbarNode","parentTaskbarNode","parentTaskbarTemplateFunction","tHeight","getExpandClass","progressBarInnerDiv","parentTaskLabelNode","labelElement","parentLabel","getTableTrNode","activecls","getRowClassName","getExpandDisplayProp","parentTaskbarTemplate","taskbarTemplate","templateName","ganttID","taskNameWidth","taskbarContainer","manualParent","getUnscheduledTaskClass","getRightLabelLeft","childTaskbarLeftResizer","childTaskbarRightResizer","childTaskbarProgressResizer","getLeftPointNode","marginTop","pointerLeft","connectorPointWidth","mileStoneLeft","pointerTop","connectorPointMargin","getRightPointNode","pointerRight","resultString","getResourceName","getFieldValue","rowClass","endLeft","length_2","taskbarHeightValue","taskBarMarginTopValue","milestoneHeightValue","collapsedResourceRecord","treeGridModule","modifiedRecIndex","isFromRenderBaseline","tRow","getGanttChartRow","dupChartBody","tempTemplateData","isResourceTaskDeleted","maintainSelectedRecords","replaceChildren","initialChartRowElements","triggerQueryTaskbarInfo","updateOverlapped","connectorLineLeftNode","connectorLineRightNode","taskBaselineTemplateNode","parentTrNode","taskbarContainerNode","generateAriaLabel","connectorLineLeftNode_1","parentTaskbarTemplateNode","manualTaskbar","connectorLineRightNode_1","milestoneTemplateNode","scheduledTask","childTaskbarProgressResizeNode","childTaskbarRightResizeNode","childTaskbarLeftResizeNode","childTaskbarTemplateNode","length_3","connector","segmentConnector","taskIndicatorNode","taskIndicatorTextFunction","taskIndicatorTextNode","indicatorIndex","tooltip","setAriaRowIndex","visualData","queryTaskbarInfo","segmentLength","segmentedTasks","segmentElement","segmentRowElement","triggerTaskbarElement","taskbarType","classCollections","getClassName","milestoneColor","backgroundColor","childTask","progressTask","taskbarBgColor","taskbarBorderColor","borderColor","progressBarBgColor","taskLabelColor","color","rightLabelColor","leftLabelColor","taskbarArgs","updateQueryTaskbarInfoArgs","taskBarElement","borderTopColor","taskbar","mainTaskbar","outlineColor","classCollection","eOverlapped","treeGridContentHeight","rowIDs","rowCounts","verticalAlign","draggedRecordMarginTop","isValidateRange","selectedItem","getResourceParent","allowTaskbarDragAndDrop","replaceWith","dataId","nextEditableElement","updateResourceTaskbarElement","cloneChildElement","collapseParent","defaultValue","nameConstant","startDateConstant","endDateConstant","durationConstant","taskNameVal","startDateVal","endDateVal","durationVal","generateBaselineAriaLabel","Dependency","gantt","parentIds","parentPredecessors","dateValidateModule","predecessorTasks","ensurePredecessorCollectionHelper","predecessorVal","predecessorsName","preValues","predecessorItem","preValue","offsetUnits","offsetUnit","tempOffsetUnits","getOffsetDurationUnit","isOwnParent","checkIsParent","calculatePredecessor","getPredecessorStringValue","updateUnscheduledDependency","prdList","predId","predData","updateRecordByID","fromId","boolValue","predecessorValue","offsetValue","predecessorText","isExist1","isExist","tempOffset","isDrawn","fromData","toData","validateParentPredecessor","temp1","durationUnitTexts","multiple","durationUnitLabels","updatePredecessors","updatePredecessorHelper","successorGanttRecord","connectorsCollection","connectorCount","predecessorCollection","totLength","validatePredecessorDates","validateRecord","updateParentPredecessor","enablePredecessorValidation","parentPredecessorLength","parentGanttRecord","currentTaskId_1","validateManualTasksOnLinking","validateChildGanttRecord","editedTaskBarItem","childRecordProperty","currentTaskId_2","childPredecessor","getPredecessorDate","maxStartDate","validatedPredecessor","getValidatedStartDate","ganttProperty","parentRecordProperty","returnStartDate","updateDateByOffset","resultDate","ganttRecords","addPredecessorsCollection","predecessorsLength","predecessorCount","updateConnectorLineObject","connectorObj","createConnectorLineObject","isCritical","connectorLineId","validatePredecessor","previousValue","validationOn","taskBarModule","taskBarEditRecord","successor","currentTaskId_3","successors","isValidationEnabled","UpdateOffsetOnTaskbarEdit","isValidatedParentTaskID","validUpdate","predecessorNames","predecessorLength","getValidPredecessor","validPredecessor","recPredecessor","SvgRenderer","rootID","svgLink","rootId","getOptionValue","createSvg","svgObj","createElementNS","setElementAttributes","setSVGSize","size","drawPath","path","drawLine","line","drawRectangle","rectangle","drawCircle","circle","drawPolyline","polyline","drawEllipse","ellipse","drawPolygon","polygon","drawImage","img","setAttributeNS","preserveAspectRatio","createText","createTSpan","tSpan","createTitle","createDefs","defs","createClipPath","clipPath","createForeignObject","foreignObject","createGroup","createPattern","createRadialGradient","colors","colorName","colorStop","newOptions","cx","cy","fx","fy","drawGradient","createLinearGradient","gradientType","gradient","stop_1","opacity","drawClipPath","drawCircularClipPath","createCanvas","CanvasRenderer","canvasObj","ctx","getContext","setCanvasSize","lineWidth","dashArray","dashArrayString","setLineDash","strokeStyle","save","beginPath","stroke","lineTo","restore","canvasTranslate","canvasCtx","cornerRadius","rx","translate","globalAlpha","drawCornerRadius","fill","fillStyle","fillRect","arcTo","closePath","dataSplit","innerR","q1","q2","quadraticCurveTo","c1","c2","c3","c4","bezierCurveTo","arc","radius","counterClockWise","PI","transX","transY","dy","isTSpan","fontWeight","fontSize","fontFamily","fontStyle","font","anchor","baseline","textBaseline","txtlngth","rotate","labelRotation","fillText","points","point","circumference","ry","scaleX","scaleY","scale","imageObj","Image","src","myGradient","setGradientValues","newColorStop","stopColor","addColorStop","updateCanvasAttributes","dataUrl","img_1","onload","clearRect","canvasClip","clip","canvasRestore","getTooltipThemeColor","theme","tooltipFill","tooltipBoldLabel","tooltipLightLabel","tooltipHeaderLine","textStyle","measureText","themeFontStyle","breakText","htmlObject","textArray","whiteSpace","Size","withInAreaBounds","areaBounds","findDirection","rX","rY","arrowLocation","arrowPadding","tipX","tipY","controlName","startX","startY","Rect","Side","isBottom","CustomizeOption","TextOption","baseLine","getElement","drawSymbol","location","shape","calculateShapes","functionName","renderOption","locX","locY","eq","xValue","yValue","cos","sin","PathOption","themeStyle","renderOptions","TooltipLocation","TextStyle","TooltipBorder","AreaBounds","ToolLocation","Tooltip","initPrivateVariable","isCanvas","removeSVG","createTooltipElement","formattedText","highlightPadding","areaMargin","isFirst","markerPoint","svgObject","templateObject","blazorTemplate","fadeOuted","updateTemplateFn","createTemplate","renderText","argsData","markerSide","renderTooltipElement","drawMarker","markerSize","textElements","shared","enableRTL","groupElement","pathElement","shapes","shapeOption","markerGroup","elementSize","marginX","palette","tooltipDiv","tipLocation","isTop","marginY","sharedTooltipLocation","tooltipLocation","inverted","clipBounds","allowHighlight","wrapPadding","wrapHeader","isWrap","wrappedText","headerSize","xLength","pathElement_1","pointRect","enableAnimation","crosshair","updateDiv","animateTooltipDiv","tooltipPlacement","enableShadow","shadowId","shadow","defElement","changeText","revert","findFormattedText","isRender","lines","tspanElement","textCollection","tspanOption","subWidth","tspanStyle","isRtlEnabled","leftSpace","rightSpace","headerContent","isBoldTag","headerWidth","isLeftSpace","isRightSpace","headerSpace","isRow","isColumn","subStringLength","markerPadding","spaceWidth","labelColor","withoutHeader","pointsLength","isTextWrap","isRTLText","textFont","getTooltipTextContent","width_1","renderContentRTL","textElement","contentWidthIndex","characterCollection","isRtlText","isValidHTMLElement","tooltipContent","firstElement","sharedTemplateElement","controlInstance","outerHTML","tooltipRect","tooltipRendered","rect1","thisObject_1","tooltipRect1","bounds","getCurrentPosition","symbolLocation","clipX","clipY","markerHeight","boundsX","boundsY","outOfBounds","currenDiff","animate","timeStamp","animation","transition","fadeOut","tooltipElement","tooltipGroup_1","nodeType","Node","ELEMENT_NODE","opacity_1","progressAnimation","endAnimation","tooltipGroup","ConnectorLine","connectorLinePath","arrowPath","pointerEvents","getconnectorLineGap","milestoneChild","lineColor","connectorLineBackground","lineStroke","connectorLineWidth","createConnectorLineTooltipTable","getTaskbarMidpoint","parentGanttData","childGanttData","parentIndex","childIndex","parentIndexInCurrentView","childIndexInCurrentView","parentLeft","childLeft","childWidth","milestoneParent","parentEndPoint","childEndPoint","connectorLinesCollection","connectorLine","ariaConnector","getConnectorLineTemplate","innerChild","ariaString","lastChild","getParentPosition","getHeightValue","getInnerElementWidthSSType2","getInnerElementLeftSSType2","getInnerChildWidthSSType2","getBorderStyles","cssType","borderStyle","setInnerChildWidthSSType2","setInnerElementWidthSSType2","setInnerElementLeftSSType2","isMilestoneParent","isVirtual","rowPosition","rowPositionHeight","isMilestoneValue","heightValue","borderTopWidth","addTop","parentOverlapTopValue","childOverlapTopValue","fromRecordIsParent","toRecordIsParent","fromRecordIsManual","toRecordIsManual","connectorId","groupObject","connectorPath","arrowlinePath","taskLineValue","x3","x4","y3","y4","point1","point2","topPosition","midPointParent","midPoint","isParentIndex","isChildIndex","lastRowIndex","tooltipTable","tooltipBody","getConnectorLineTooltipInnerTd","fromTaskName","fromPredecessorText","toTaskName","toPredecessorText","innerTd","fromName","toName","finish","isObjectType","pre","lineId","removeConnectorLineById","ROOT","HORIZONTAL_PANE","VERTICAL_PANE","PANE","SPLIT_H_PANE","SPLIT_V_PANE","SPLIT_BAR","SPLIT_H_BAR","SPLIT_V_BAR","STATIC_PANE","SCROLL_PANE","RESIZE_BAR","RESIZABLE_BAR","SPLIT_BAR_HOVER","SPLIT_BAR_ACTIVE","HIDE_HANDLER","SPLIT_TOUCH","DISABLED","RTL","E_ICONS","COLLAPSIBLE","NAVIGATE_ARROW","ARROW_RIGHT","ARROW_LEFT","ARROW_UP","ARROW_DOWN","HIDE_ICON","EXPAND_PANE","COLLAPSE_PANE","PANE_HIDDEN","RESIZABLE_PANE","LAST_BAR","BAR_SIZE_DEFAULT","PaneProperties","Splitter","setSplitterSize","setCssClass","isEnabled","enabled","setReversePane","setSeparatorSize","separatorSize","changeOrientation","orientation","paneSettings","destroyPaneSettings","allBars","allPanes","createSplitPane","addSeparator","getPanesDimensions","setRTL","isCollapsed","paneCounts","isPaneContentChanged","cPaneCount","hasAllContent","changedPropsCount","newValue","newVal","resizableModel","collapsibleModelUpdate","collapsedOnchange","newValSize","updatePaneSize","flexBasis","staticPaneWidth","flexPaneIndexes","flexCount","flexPaneWidth","avgDiffWidth","initializeValues","paneOrder","separatorOrder","previousCoordinates","currentCoordinates","updatePrePaneInPercentage","updateNextPaneInPercentage","panesDimensions","validDataAttributes","validElementAttributes","iconsDelay","collapseFlag","expandFlag","onReportWindowSize","reportWindowSize","onMouseMoveHandler","onMouseUpHandler","onMouseUp","onTouchMoveHandler","onTouchEndHandler","wrapperParent","checkDataAttributes","setDimension","setPaneSettings","enableReversePanes","onDocumentClick","ownerDocument","onMove","currentSeparator","checkPaneSize","prePaneSize","previousPane","nextPaneSize","nextPane","splitBarSize","previousFlexBasis","updatePaneFlexBasis","nextFlexBasis","totalPercent","convertPercentageToPixel","getMinInPixel","nextPaneIndex","prevPaneIndex","addStaticPaneClass","getSeparatorIndex","isPrevpaneCollapsed","isPrevpaneExpanded","isNextpaneCollapsed","resizable","triggerResizing","collapsible","minValue","paneMinRange","convertPixelToNumber","sanitizeHelper","beforeSanitize","beforeEvent","serializeValue","api","removeDataPrefix","paneIndex","dataAttr","paneAPI","restoreElem","childCount","paneCollection","paneValue","checkArrow","targetArrow","hideResizer","showResizer","onMouseDown","isResizable","updateResizablePanes","arrow2","arrow1","paneCollapsible","updateCollapseIcons","collapseArrow","barIndex","arrow","updateIsCollapsed","lastBarArrow","lastBarIndex","targetArrows","event_1","beforeAction","beforeCollapseArgs","collapsedindex","collapseEventArgs","afterAction","splitterProperty","sizeValue","separator","splitBar","resizeBar","isVertical","checkSplitPane","currentBar","elementIndex","paneEle","collectPanes","getPrevPane","order","getOrderPane","getNextPane","pane","getOrderIndex","panes","updateSeparatorSize","resizeHanlder","addResizeHandler","updateIconClass","createSeparator","proxy","addMouseActions","getPaneDetails","clonedEle","wireClickEvents","allBar","sepSize","getPreviousPaneIndex","getNextPaneIndex","sTout","hoverTimeOut","getEventType","updateCurrentSeparator","isSeparator","isMouseEvent","isMouse","updateCursorPosition","changeCoordinates","coordinates","paneCount","staticPaneCount","updateSplitterSize","iswindowResize","marginBottom","updatePane","flexPane","sizeDiff","isPercent","updatePaneOffset","convertPixelToPercentage","flexPaneOffset","wireResizeEvents","unwireResizeEvents","hoverBars","splitterDetails","icon","beforeExpandArgs","expandPane","expandEventArgs","getIcon","targetClass","removeStaticPanes","collapseCount","flexStatus","collapseClass","isLeftOrUp","collapsePane","expandPaneIndex","cCount","updatePaneSettings","updateIconsOnExpand","updateFlexGrow","flexGrow","visiblePane","hideTargetBarIcon","targetBar","showTargetBarIcon","updateIconsOnCollapse","targetIcon","removeIcon","otherBar","currentBarIndex","prevBar","nextBar","otherBarIndex","splitInstance","prevPaneCollapsed","nextPaneCollapsed","otherPrevPaneIndex","otherNextPaneIndex","collapsecount","getCollapseCount","hideBarIcons","collapsePaneIndex","isFlexPane","isFlexPaneHidden","paneValues","nextPaneCollapsible","prevPaneCollapsible","prevPaneExpanded","nextPaneExpanded","nextPaneNextEle","prevPanePreEle","showCurrentBarIcons","bar","checkResizableProp","showIcon","getPrevBar","prevbar","getNextBar","updateBars","paneSize","prePaneDimenson","nextPaneDimension","resizeStartArgs","removePercentageUnit","convertedValue","percentage","calcDragPosition","rectValue","separatorPosition","getSeparatorPosition","rectBound","offSet","getMinMax","selection","defaultVal","separatorIndex","prevPane","getPaneHeight","isValidSize","getPaneDimensions","previousPaneHeightWidth","nextPaneHeightWidth","checkCoordinates","coordinatesChanged","isCursorMoved","cursorMoved","getBorder","separatorNewPosition","validateDraggedPosition","prevPaneCurrentWidth","nextPaneCurrentWidth","validateMinMaxValues","calculateCurrentDimensions","flexPaneCount","allFlexiblePanes","middlePaneIndex","isStaticPanes","validateMinRange","paneCurrentWidth","paneMinDimensions","validatedVal","validateMaxRange","paneMaxDimensions","paneMaxRange","equatePaneWidths","draggedPos","prevPaneHeightWidth","separatorTopLeft","prePaneRange","nextPaneRange","pane1MinSize","pane2MinSize","pane1MaxSize","pane2MaxSize","validatedSize","panesDimension","sizeFlag","toElement","templateCompile","tempEle","compileElement","childEle","templateFUN","eleVal","addPaneClass","removePaneOrders","paneClass","setPaneOrder","removeSeparator","updatePanes","addPane","paneProperties","newPane","paneDetails","removePane","elementClass","renderSplitter","splitterPosition","calculateSplitterPosition","splitterSettings","splitterElement","splitterObject","ganttWidth","getSpliterPositionInPercentage","minimum","leftPane","rightPane","splitterPreviousPositionGrid","splitterPreviousPositionChart","splitterResizedArgs","splitter","view","getTotalColumnWidthByIndex","intValue","updateSplitterPosition","triggerCustomResizedEvent","pane1","pane2","openDelay","delay","afterOpen","updateTooltipPosition","showTipPointer","beforeRender","tooltipBeforeRender","afterClose","tooltipCloseHandler","getTooltipContent","tooltipSettings","taskbarTemplateNode","tooltipTemplate","baseLineTemplateNode","baselineTemplate","dependencyLineTemplateNode","predecessorTooltipData","argData","currentTarget","tooltipMouseEvent","parentWithZoomStyle","getPointorPosition","containerPosition","getOffsetRect","topEnd","leftEnd","tooltipPositionX","tooltipPositionY","posX","posY","elementType","taskNameValue","milestoneStartDate","sDateValue","sDate_1","contentTemp_1","startDateValue","endDateValue","progressValue","startDate_1","endDate_1","duration_1","progress_1","contentTemp_2","baselineStartDateValue_1","baselineEndDateValue_1","contentTemp_3","markerTooltipElement","markerTooltipElementValue_1","markerLabel_1","contentTemp_4","fromNameValue_1","fromIdValue_1","toNameValue_1","toIdValue_1","toId","linkTextValue_1","linkText","offsetStringValue_1","offsetString","contentTemp_5","titleValue_1","contentTemp_6","timlineTitleValue_1","contentTemp","autoStartDateValue","autoEndDateValue","durationUnitValue","manualStartDateValue","manualEndDateValue","autoStartDate_1","autoEndDate_1","durationValue_1","manualStartDate_1","manualEndDate_1","contentTemp_7","autoStartValue","autoEndValue","dateValue","autoStart_1","autoEnd_1","date_1","contentTemp_8","markerTooltipId","predeceesorParent","fromTask","toTask","linkType","getPredecessorTextValue","propName","tooltipFunction","templateNode","FocusModule","previousActiveElement","getActiveElement","isPreviousActiveElement","currentSelectingRecord","searchElement","upDownKeyNavigate","expandCollapseKey","textValue","tempValue","editedRecords","stopPropagation","openAddDialog","focussedTreeElement","openToolbarEditDialog","touchEdit","startDeleteAction","selectedId","selectCellIndex","scrollToTask","keyEvent","selectingRowIndex","selectedCellItem","cellInfo","expandByIndex","collapseByIndex","Gantt","singleTier","previousRecords","isConnectorLineUpdate","staticSelectedRowIndex","mergePersistGanttData","getDefaultLocale","days","hours","minutes","minute","isMileStoneEdited","validationDialogElement","currentEditedArgs","dialogValidateMode","respectLink","removeLink","preserveLinkWithEditing","splitterModule","keyConfig","saveRequest","cancelRequest","addRow","addRowDialog","editRowDialog","focusTask","indentLevel","outdentLevel","focusSearch","resourceFieldsMapping","dateFormat","ganttDateFormat","getDefaultTZOffset","janMonth","julMonth","resourceNameMapping","validateDimentionValue","calculateDimensions","settingsHeight","settingsWidth","elementStyleHeight","elementStyleWidth","renderToolbar","isTablePresent","ganttHeader","scrollLeftValue","ganttContent","renderBackGround","renderHeaderBackground","timelineHeight","backgroundLines","containerWidth","shimmerContainerHeight","createEmptyTimeLineTable","duplicateRow","topBottomHeader","applyTimelineMaskRow","innerMaskCells","htmlInner","columnLoop","enableContextMenu","removeCriticalPathStyles","ganttChartElement","innerDivs","windowResize","updateRowHeightInConnectorLine","getRecordFromFlatdata","updatedRecord","_WeekStartDay","updateTimescaleView","displayHalfValue","displayQuarterValue","updateTreeColumns","createGanttPopUpElement","getCurrentRecords","showCriticalPath","renderChartGridLines","updateSearchTextBox","processDialogFields","reUpdateDimention","reUpdateEditModules","selectRowByIndex","closeGanttActions","updateOverAllocationCotainer","highlightWeekends","verticalLines","chartRowsTD","renderChartVerticalLines","getContentHeight","thElements","thLength","containerDiv","divElement","ganttLocale","emptyRecord","criticalPath","changeScheduleMode","subTasksStartDate","subTasksEndDate","scheduleStartDate","scheduleEndDate","auto","resourceID","generalTab","customTab","writeNotes","addDialogTitle","editDialogTitle","zoomIn","zoomOut","zoomToFit","nextTimeSpan","prevTimeSpan","saveButton","taskBeforePredecessorFS","taskAfterPredecessorFS","taskBeforePredecessorSS","taskAfterPredecessorSS","taskBeforePredecessorFF","taskAfterPredecessorFF","taskBeforePredecessorSF","taskAfterPredecessorSF","okText","confirmDelete","taskLink","lag","enterValue","taskInformation","deleteTask","deleteDependency","above","below","toMilestone","leftTaskLabel","rightTaskLabel","confirmPredecessorDelete","unassignedTask","actionBeginTask","scrollToDate","updateChartScrollOffset","getRootParent","export","nonWorkingDays","isDisabled","previousTimeSpan","initiateEditAction","isStart","isTaskData","makeCloneData","cloneData","prevValue","clonedValue","dialogClose","setSplitterPosition","tempSplitterSettings","contructExpandCollapseArgs","expandByID","collapseByID","addRowPosition","parentTask","dropChildRecord","updateTaskId","currentId","newId","getCriticalTasks","fitToProject","updateRecordByIndex","addPredecessor","predecessorString","removePredecessor","updatePredecessor","openEditDialog","getRowByID","isUnscheduledTask","keyVal","box","pageYOffset","pageXOffset","clientTop","clientLeft","getGanttColumns","showColumn","hideColumn","taskDetail","updateDataArgs","customData","convertToMilestone","taskfields","changeTaskMode","updateTaskScheduleModes","initiateUpdateAction","ColumnsDirective","inject","custom","default","h","slots","$slots","updated","methods","getTag","ColumnsPlugin","install","Vue","ColumnDirective","ColumnPlugin","AddDialogFieldsDirective","AddDialogFieldsPlugin","AddDialogFieldDirective","AddDialogFieldPlugin","EditDialogFieldsDirective","EditDialogFieldsPlugin","EditDialogFieldDirective","EditDialogFieldPlugin","DayWorkingTimeCollectionDirective","DayWorkingTimeCollectionPlugin","DayWorkingTimeDirective","DayWorkingTimePlugin","HolidaysDirective","HolidaysPlugin","HolidayDirective","HolidayPlugin","EventMarkersDirective","EventMarkersPlugin","EventMarkerDirective","EventMarkerPlugin","modelProps","testProp","watch","emitProbs","modelProps_1","props_1","GanttComponent","mixins","emits","provide","ej2Instance","propKeys","models","hasChildDirective","hasInjectedModules","tagMapper","tagNameMapper","templateCollection","ej2Instances","_trigger","bindProperties","_setProperties","templateNames","templateNames_1","tempName","elementCollection","elementCollection_1","__vue__","$destroy","referModels","$emit","eventProp","successHandler","propKey","$props","isLazyUpdate","GanttPlugin","InlineEditRender","addNew","frTbody","isVirtualFrozen","isScroll","frTbody_1","getEditElement","checkLastRow","renderMovableform","frEle","renderFrozenRightForm","frozenRightForm","renderRightFrozen","movableForm","updateFreezeEdit","getFreezeRow","getFreezeRightRow","isCustomFormValidation","tdElement","refreshFreezeEdit","fCls","mTd","frTd","refreshEditForm","updateFrozenCont","updateFrozenRightCont","gLen","td_1","editTemplateID","BatchEditRender","columnObject","newTd","DialogEditRender","setLocaleObj","createDialog","createDialogHeader","responsiveDlgRenderer","getDialogEditTemplateElement","allowDragging","dialogEditTemplates","dialogTemp","setRules","checkColumnIsGrouped","dataCell","EditRender","getEditElements","convertWidget","fForm","frForm","cols_1","write","mTdElement","fTdElement","frTdElement","isFocus","cellValue","tArgs","isInput","EditCellBase","removeEventHandler","BooleanEditCell","activeClasses","selectChkBox","editRow","cbChange","DropDownEditCell","isInline","popupHeight","sortOrder","dropDownClose","editCellDialogClose","ddCreated","dropdownCreated","ddOpen","dropDownOpen","ddBeforeOpen","dropdownBeforeOpen","ddComplete","ddActionComplete","dlgElement","dlgObj","NumericEditCell","keyEventHandler","createEvent","initEvent","dispatchEvent","instances","HIDE_CLEAR","TEXTBOX_FOCUS","containerAttr","TextBox","isHiddenInput","isForm","inputPreviousValue","textboxOptions","removeFloating","textboxWrapper","addFloating","respectiveElement","setEnabled","bindClearEvent","prevOnChange","isBlank","setValue","showClearButton","preventChange","raiseChangeEvent","updateHTMLAttrToElement","updateHTMLAttrToWrapper","checkAttributes","multiline","textarea","validateInputType","setReadonly","readonly","setClearButton","setEnableRtl","setPlaceholder","autocomplete","removeAttributes","updateCssClass","setLocale","formElement","ejInstance","inputElement","attributeName","nodeValue","localeText","apiAttributes","isDynamic","htmlAttributes","attrs_1","autoCompleteTxt","updatedCssClassValue","getInputValidClassList","initialValue","setInitialValue","updatedClassValues","setStyle","newClass","oldClass","inputClassName","focusHandler","keydownHandler","inputHandler","changeHandler","resetForm","animationHandler","resetValue","textboxObj","localChange","interaction","clearButton","resetInputHandler","keyupEvent","insertAdjacentElement","addIcon","icons","addAttributes","attributes_1","focusIn","focusOut","DefaultEditCell","Event","bubbles","cancelable","NormalEdit","currentVirtualData","editComplete","getEditArgs","primaryKeyValues","virtualRow","rObj","inlineEditHandler","prevData","argsCreator","begineditargs","editargs","applyFormValidation","edFail","validationArgs","editIdx","addIdx","addedRowIndex","isDlg","dlgWrapper","dlgForm","getCurrentEditedData","mhdrFrm","mCntFrm","mvblEle","frHdrFrm","frCntFrm","eleLength","endEditArgs","resetMovableContentValidation","destroyElements","destroyWidgets","editHandler","edSucc","editSuccess","editFailure","requestSuccess","stopEditStatus","dragRow","dragRowUid","dragRowObject_1","dropRowObject","aggregateModule","groupedRowReorder","getGroupAggregateTemplates","closeForm","cloneRow","originalRow","cloneFrozen","frozen","needRefresh","editedRow","closeEditArgs","isLazyLoad","inlineAddHandler","addArgs","tmpRecord","contained","addElements","editElements","InlineEdit","BatchEdit","cellDetails","originalCell","cloneCell","editNext","preventSaveCell","validationColObj","prevEditedBatchCell","onBeforeCellFocused","batchCancelFunction","setCellIdx","isAddRow","validateFormObj","frzRightCols","prevEditedBatchCellMatrix","crtRowIndex","editCellFromIndex","argument","allRows","isInsert","removeBatchElementChanges","refreshRowIdx","isInstertedRemoved","removeHideAndSelection","tdElements","bulkDelete","bulkAddRow","removeSelectedData","beforeBatchSaveArgs","removeRowObjectFromUID","newTableName","rowClone","deleteRowUid","beforeBatchDeleteArgs","out_j_1","dataObjects","getIndexFromData","visibleColumns","defaultData","getDefaultData","beforeBatchAddArgs","movableCnt","leftCnt","rightCnt","tbody$$1","totCount","tableTanName","selectedRowAdd","selectedRowAddCells","i_2","removeFrozenTbody","renderFrozenAddRow","btmIdx","getBottomIndex","findNextEditableCell","tableName$$1","isValOnly","validation","checkNPCell","dValues","editCellExtend","mRowData","getDataByIndex","getCellIdx","cellEditArgs","isColored","newReactTd_1","newReactTd","setChanges","currentRowObj","movableRowObject","frRowObject","rowcell","insertedRows","isSingleInsert","fLeftInsertedRow","fRightInsertedRow","mInsertedRow","fLeftCount","editRowIdx","fRightCount","mColumnCount","escapeCellEdit","generateCellArgs","cloneEditedData","isForceSave","cellSaveArgs","isEscapeCellEdit","editedBatchCellMatrix","editedBatchCell","addCancelWhilePaging","DatePickerEditCell","dateanddatetimerender","datePickerEditCell","datePickerClose","ToolbarType","DialogType","TemplateEditCell","isValidationApplied","updateEditObj","createAlertDlg","createConfirmDlg","updateColTypeObj","templteCell","editCellType","alertDObj","refreshToolbar","endEditing","form1","form2","mFormObj","form3","frFormObj","getCurrentEditCellData","getValueFromType","destroyToolTip","dlgWidget","dlgOk","dlgCancel","alertClick","btnOptions","executeAction","destroyEditComponents","eventDetails","inputElements","inputs","col_1","restrictedRequestTypes","isRestrict","isDestroyVirtualForm","formObjects","virtualFormObj","curretRowFocus","focusableEditCells","commandColCell","movableEditRow","rightFrEditRow","movableHeditedRow","rightHEditRow","preventObj","arg7","arg8","newRule","mForm","createFormObj","validationComplete","customPlacement","valErrorPlacement","getElemTable","isFHdr","resetElemPosition","tdRight","elemRight","inputName","customForm","gcontent","validationForBottomRowPos","isFHdrLastRow","isBatchModeLastRow","isSpace","viewPortRowCount","fHeraderRows","client","inputClient","getEditCell","pos","gHeight","rowsCount","rowsHeight","AddEditors","editors","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","batchPageAction","batchCancelAction","immutableBatchAction","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","colCount","added","currentDataIndex","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","batchIndex","primaryParent","childRecordCount","isTabLastRow","updateChildCount","updateRowIndex","newlyAddedRecords","childs","primarykey","totalCount","firstChildIndex","changeRecords","deleterecords","deleteUniqueID","positionIndex","primarykey_1","addRecords","indexValue","prevAriaRowIndex","isAddedRowByContextMenu","previousNewRowPosition","internalProperties","batchEditModule","lastCellTab","contentready","editActionEvents","gridDblClick","customCellSave","savePreviousRowPosition","resetIsOnBatch","getRowPosition","doubleClickTarget","treeObj","keyData","paramsLength","infiniteAddAction","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","isCache","updateIndex","newRowIndex","infiniteCurrentViewData","isOnBatch","updateGridEditMode","updateMethod","celleditArgs","toolbarID","treeCell","afterCellSave","primaryKeys_1","excelSearchOperator","saveArgs","data1","treeColIndex","data2","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","frows","newFreezeRowObject","rightFrozenRows","errors","newlyAddedRecord","seletedRow","beginAddEdit","primaryKeys_2","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","CellEdit","isResourceCellEdited","bindTreeGridProperties","ensureEditCell","readOnly","openNotesEditor","columnTypes","updatedEditFields","tabObj","isValueChange","editedValue","editedObj","editedArgs","endEditAction","taskNameEdited","startDateEdited","endDateEdited","durationEdited","resourceEdited","progressEdited","baselineEdited","dependencyEdited","notedEdited","workEdited","taskmodeEdited","initiateSaveAction","typeEdited","updateEditedRecord","ganttProb","validateEndDateWithSegments","compareDatesFromRecord","revertCellEdit","updateResourceRelatedFields","durationString","currentDuration","updateSegmentProgress","baseLineStartDate","baseLineEndDate","editedResourceId","tempResourceInfo","editedResouceLength","previousResource","editedResources","newIndex","previousResourceLength","isResourceUpdate","workValue","EditTooltip","taskbarEdit","mouseTrail","showHideTaskbarEditTooltip","updateTooltip","connectorSecondAction","connectorSecondElement","taskBarEditElement","taskWidth","getTooltipText","offsetY","offsetX","tooltipString","editRecord","editing","TaskbarEdit","isMouseDragged","dependencyCancel","editElement","elementOffsetLeft","elementOffsetTop","elementOffsetWidth","elementOffsetHeight","currentItemTop","currentItemPrevTop","editTooltip","mouseLeaveHandler","mouseMoveAction","connectorSecondRecord","highlightedSecondElement","finalPredecessor","drawPredecessor","roundOffDuration","dragMouseLeave","previousItemProperty","tapPointOnFocus","canDrag","getElementByPosition","updateTaskBarEditElement","validateConnectorPoint","taskBarEditingAction","showHideActivePredecessors","multipleSelectionEnabled","showHideTaskBarEditingElements","applyActiveColor","chartContent","$tr","$taskbar","$connectorElement","predecessorIndex","renderPredecessorDeleteConfirmDialog","realTaskbarElement","getTaskBarAction","ganttprop","parentleft","resizeElement","currentindex","resizeTable","resizetableBody","cloneTaskBar","tableBody","cloneTaskbarElement","taskbarResizer","updateMouseDownProperties","prevZIndex","secondElement","fadeConnectorLine","isShowProgressResizer","isShowConnectorPoints","progressElement","connectorElement","mouseDownElement","getCoordinate","zoom1","zoom","mouseDownX","mouseDownY","dragMoveY","isMouseDragCheck","mouseMoveX","mouseMoveY","previousItem","currentElement","isMouseClick","editingFields","updateMouseMoveProperties","performProgressResize","enableLeftResizing","enableRightResizing","enableDragging","updateConnectorLineSecondProperties","triggerDependencyEvent","drawFalseLine","setItemPosition","updateEditedItem","taskBarEditedAction","isConnectorLineEdit","mouseX","mouseY","timerCount","startScrollTimer","stopScrollTimer","scrollTimer","setInterval","sign","clearInterval","differenceWidth","previousMouseMove","previousSegment","nextSegment","diffrenceWidth","widthValue","progressBorderRadius","enableSplitTaskLeftResize","updateEditPosition","segment_1","segment_2","singleDayDifference","segment_3","updateIsMilestone","segmentWidth","getProgressPercent","getRoundOffStartLeft","getDateByLeft","updateSplitLeftResize","getRoundOffEndLeft","tempdate","updateSplitRightResizing","updateChildDrag","setSplitTaskDrag","segmentOffsetDuration","segmentOffset","isRoundOff","totalLeft","remainingContribution","remainingLeft","positionValue","inHour","inMinutes","remainDays","remainDaysInDecimal","milliSecondsPerPixel","rightResizer","taskBarMainContainer","segmentedTaskBarContainer","traceChildProgressBar","traceChildTaskBar","childProgressResizer","taskBarRightResizer","traceParentTaskBar","traceParentProgressBar","traceConnectorPointRight","manualParentTaskbar","manualParentRight","manualParentLeft","resizeLine","segment_4","borderBottomRightRadius","borderTopRightRadius","width_2","mouseDragged","cancelTaskbarEditActionInMouseLeave","resMouseY","taskbarEdited","reUpdatePreviousRecords","draggedRecIndex","flatRecordCol","childIndex_1","resHeight","droppedRecord","treeGridrows","draggedRecordtaskbar","droppedRecordIndex","updateParentProgress","segment_5","eDate_1","parentwidth","progresswidth","sqrt","angle","atan2","transformOrigin","isRemoveConnectorPointDisplay","zoomedPageY","fromItem","toItem","isValidLink","validatePredecessorRelation","predecessorArray","newPredecessorString","CLS_TAB","CLS_HEADER","CLS_BLA_TEM","CLS_CONTENT","CLS_NEST","CLS_ITEMS","CLS_ITEM","CLS_TEMPLATE","CLS_RTL","CLS_ACTIVE","CLS_DISABLE","CLS_HIDDEN","CLS_FOCUS","CLS_ICONS","CLS_ICON","CLS_ICON_TAB","CLS_ICON_CLOSE","CLS_CLOSE_SHOW","CLS_TEXT","CLS_INDICATOR","CLS_WRAP","CLS_TEXT_WRAP","CLS_TAB_ICON","CLS_TB_ITEMS","CLS_TB_ITEM","CLS_TB_POP","CLS_TB_POPUP","CLS_HOR_NAV","CLS_POPUP_OPEN","CLS_POPUP_CLOSE","CLS_PROGRESS","CLS_IGNORE","CLS_OVERLAY","CLS_HSCRCNT","CLS_VSCRCNT","CLS_VTAB","CLS_VERTICAL","CLS_VLEFT","CLS_VRIGHT","CLS_HBOTTOM","CLS_FILL","TABITEMPREFIX","CLS_REORDER_ACTIVE_ITEM","TabActionSettings","TabAnimationSettings","easing","TabItem","Tab","isIconAlone","draggableItems","resizeContext","refreshActiveTabBorder","moveLeft","moveRight","moveUp","moveDown","tbObj","expTemplateContent","cntEle","btnCls","hdrEle","tbItems","tbItem","tbPop","prevItem","popEle","bdrLine","dragItem","draggingItems","nested","prevIndex","isNested","isPopup","initRender","isSwiped","itemIndexArray","templateEle","allowDragAndDrop","dragArea","updatePopAnimationConfig","tabId","renderContainer","refreshActiveBorder","setOrientation","headerPlacement","renderHeader","renderContent","scrCnt","scrCntClass","setContentHeight","hdrPlace","tabItems","getTabHeader","addVerticalClass","hdrItems","tabItems_1","wrap","parseObject","overflowMode","clicked","scrollStep","setCloseButton","showCloseButton","toolbarHeader","hdrItem","contents","reRenderItems","touchModule","swipe","swipeHandler","maxId","isReplace","idList_1","getIndexFromEle","txtWrapEle","tItems","spliceArray","iconPosition","itemIndex","tbId","hidden","tEle","tHtml","txtEmpty","headerTextCompile","tCont","wrapAttrs","attrObj","tItem","spliceItemIndex","removeActiveClass","tabHeader","checkPopupOverflow","popIcon","tbrItems","isOverflow","popupHandler","ripEle","actEleId","prevEle","trg","prevCtnAnimation","timingFunction","triggerPrevAnimation","oldCnt","animateObj","begin","triggerAnimation","itemCollection","prevActiveEle","newCnt","getTrgContent","extIndex","idNo","isPrevent","openEff","clsEff","setActiveBorder","trgParent","trgIndex","getEleIndex","popObj","selectTab","eleStr","callType","no","findEle","tbPos","place","activeTab","changeToolbarOrientation","focusItem","curActItem","headerPos","contentPos","list","heightAdjustMode","cs","trgHdrEle","reorderActiveTab","scrollCnt","tbHeight","tbWidth","skipDataBind","serverDataBind","trg_1","eleTrg","refreshItemVisibility","eventArg","selectedContent","selectingID","selectEventArgs","setItems","config","tbPopObj","bindDraggable","initializeDrag","hoverHandler","spaceKeyDown","keyModule","tabKeyModule","openPopup","removeTab","velocity","nestedTab","swipeDirection","clstHead","actEle","nxtSib","nextSibling","scrBar","scrStart","scrEnd","eleStart","eleWidth","eleEnd","eleViewRange","closeButtonTitle","evalOnPropertyChangeItems","selectElement","changedProp","oldVal","hdr","cntItem","textVal","clearTabTemplate","arr","isHiddenEle","addTab","hideTab","strVal","enableTab","clearTemplates","registeredTemplates","registeredItem","closestItem","portalItem","containerInfo","dragObj","itemDragStart","dropItem","dragIndex","dragArgs","draggedItem","droppedItem","clonedElement","scrollRightNavEle","scrollLeftNavEle","hscrollBar","scrollContentWidth","isSameNode","dragAction","droppedIndex","itemDragStop","tabitemDragArgs","intDestroy","dragsIndex","popupContainer","lastEle","dragStopArgs","tabItemDropArgs","addedItems","addingTabContent","tabAddingArgs","lastEleIndex","itemsCount","tabItems_2","textValue_1","addItems","removeArgs","removedItem","removedIndex","tabRemovingArgs","removeItems","targetEleIndex","cntTrg","selectedID","selectingItem","selectingIndex","selectingContent","selectArgs","itemId","getItemIndex","tabItemId","disable","refreshActiveTab","detachContent","mainContents","txtString","conte","crElem","txtWrap","tConts","wrapAtt","wraper","activeEle","NumericContainer","renderNumericContainer","refreshNumericLinks","updateTotalPages","links","updateLinksHtml","refreshAriaAttrLabel","updateStyles","link","totalPages","numericContainer","renderFirstNPrev","renderPrevPagerSet","renderNextPagerSet","renderNextNLast","pagerContainer","prevPager","PP","nextPager","NP","previousPageNo","currentPageSet","isLastSet","numItems","isPagerResized","focusedItem","focusedorTarget","prevFocused","nextFocused","firstFocused","lastFocused","numItemFocused","npFocused","ppFocused","classList_1","isPageAvailable","customText","ppIndex","avgNumItems","NPIndex","updateFirstNPrevStyles","updatePrevPagerSetStyles","updateNextPagerSetStyles","updateNextNLastStyles","currentPageIndex","firstPage","firstPageDisabled","prevPageDisabled","lastPage","lastPageDisabled","nextPage","nextPageDisabled","PagerMessage","pageNoMsgElem","pageCountMsgElem","hideMessage","showMessage","Pager","hasParent","pageRefresh","firstPagerFocus","enableExternalMessage","checkpagesizes","defaultConstants","currentPageInfo","totalItemsInfo","totalItemInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","pagerAllDropDown","CurrentPageInfo","TotalItemsInfo","FirstPageTooltip","LastPageTooltip","NextPageTooltip","PreviousPageTooltip","NextPagerTooltip","PreviousPagerTooltip","PagerDropDown","PagerAllDropDown","All","Container","Information","ExternalMsg","Page","Of","Pages","containerModule","pagerMessageModule","initLocalization","isReactTemplate","renderFirstPrevDivForDevice","enablePagerMessage","renderNextLastDivForDevice","addAriaLabel","externalMessageModule","checkGoToPage","currentPageChanged","setDropDownValue","compile","resizePager","onFocusIn","onFocusOut","focusedTabIndexElement","getFocusedTabindexElement","dropDownPage","setTabIndexForFocusLastElement","setPagerFocusForActiveElement","currentActivePage","changeFocusByShiftTab","changeFocusByTab","navigateToPageByEnterOrSpace","navigateToPageByKey","tabindexElements","currentItemPagerFocus","decrementNumber","selectedClass","getClass","classElement","getElementByClass","checkFocusInAdaptiveMode","changeFocusInAdaptiveMode","actionClass","pagingItem","mPrev","removeTabindexLastElements","tabIndexElements","dropDownPageHolder","currentClass","previousElements","targetChildrens","pagerElements","element_1","tabindexElement","addFocusClass","removeFocusClass","setPageSize","newPageNo","oldPageNo","enableQueryString","updateQueryString","tempId","getPagerTemplate","updatedUrl","getUpdatedURL","history","pushState","uri","hash","calculateActualWidth","actualWidth","isStyleApplied","pagerWidth","hiddenNumItems","hideFrom","showFrom","bufferWidth","detailItems","totDetailWidth_1","averageDetailWidth","numericItemWidth","numToHide","hideIndex","pagerDetailItemsWidth","detailtoHide","hiddenDetailItems","numToShow","lesserIndexItems","greaterIndexItems","showItems","showItem","pagerDropDownDiv","dropDownDiv","defaultTextDiv","pagerCons","pageSizesModule","pageSizesArray","convertValue","dropDownListObject","onChange","isPageSizeAll","beforeValueChange","pageSizeValue","pageSizeNum","isbeforeAll","ExternalMessage","externalMessage","isInitialRender","pagerDestroy","dropDownChanged","onSelect","addAriaAttr","renderReactPagerTemplate","numericContainerNew","numericContainerDiv","isForceCancel","previousPage","appendToElement","complete","updateLayout","inboundChange","Toolbar","predefinedItems","isSearched","gridID","preItems","excludingItems","preItems_1","itemStr","localeName","align","ColumnChooser","suffixIcon","responsiveFilter","responsiveSort","responsiveBack","createToolbar","addReactToolbarPortals","bindSearchEvents","updateSearchBox","toolbarCreated","isNormal","getItems","toolbarClickHandler","viewStr","registerTemp","ID","renderResponsiveSearch","refreshResponsiveToolbarItems","isSearch","searchBoxObj","disableItems","hasData","getItemObject","toolbarItems_1","getItem","itemObject","itemName","items_1","gID","newArgs","tarElement","setFocusToolbarItem","getFocusToolbarElements","getFocusToolbarItems","keyPressedHandler","targetParent","reRenderToolbar","removeResponsiveSearch","rowSelectedFunction","rowDeSelectedFunction","ForeignKey","initForeignKeyColumns","generateQueryFormData","eventfPromise","setColumnData","foreignColumns","genarateColumnQuery","genarateQuery","responses","needQuery","filteredValue","queryColumn","fColumn","destroyEvent","tableclass","contentChanged","iframeMouseDown","refreshBegin","toolbarUpdated","bindOnEnd","renderColorPicker","htmlToolbarClick","markdownToolbarClick","destroyColorPicker","tableModulekeyUp","keyUp","keyDown","toolbarRenderComplete","enableFullScreen","disableFullScreen","dropDownSelect","beforeDropDownItemRender","imageToolbarAction","audioToolbarAction","videoToolbarAction","linkToolbarAction","insertLink","unLink","editLink","openLink","updatedToolbarStatus","updateToolbarItem","insertImage","insertAudio","insertVideo","insertCompleted","sourceCode","updateSource","beforeDropDownOpen","selectionSave","selectionRestore","expandPopupClick","sourceCodeMouseDown","editAreaClick","contentscroll","colorPickerChanged","tableColorPickerChanged","focusChange","selectRange","getSelectedHtml","renderInlineToolbar","rtlMode","docClick","tableToolbarAction","checkUndo","readOnlyMode","moduleDestroy","pasteClean","enterHandler","beforeDialogOpen","clearDialogObj","beforeQuickToolbarOpen","quickToolbarOpen","quickToolbarClose","xhtmlValidation","resizeInitialized","renderFileManager","dynamicModule","updateTbItemsStatus","showLinkDialog","closeLinkDialog","showImageDialog","showAudioDialog","showVideoDialog","closeImageDialog","closeAudioDialog","closeVideoDialog","showTableDialog","closeTableDialog","bindCssClass","formatPainterClick","formatPainterDoubleClick","emojiPicker","maximizeMinimizeClick","blockEmptyNodes","inlineEmptyNodes","CLS_RTE","CLS_DISABLED","CLS_SCRIPT_SHEET","CLS_STYLE_SHEET","CLS_TOOLBAR","CLS_TB_FIXED","CLS_TB_FLOAT","CLS_TB_ABS_FLOAT","CLS_INLINE","CLS_RTE_EXPAND_TB","CLS_FULL_SCREEN","CLS_QUICK_TB","CLS_POP","CLS_TB_STATIC","CLS_QUICK_POP","CLS_QUICK_DROPDOWN","CLS_IMAGE_POP","CLS_INLINE_POP","CLS_INLINE_DROPDOWN","CLS_DROPDOWN_POPUP","CLS_DROPDOWN_ICONS","CLS_DROPDOWN_ITEMS","CLS_DROPDOWN_BTN","CLS_RTE_CONTENT","CLS_TB_WRAP","CLS_SHOW","CLS_HIDE","CLS_VISIBLE","CLS_RM_WHITE_SPACE","CLS_IMGBREAK","CLS_CLICKELEM","CLS_VID_CLICK_ELEM","CLS_AUDIOWRAP","CLS_VIDEOWRAP","CLS_IMGINLINE","CLS_AUDIOINLINE","CLS_VIDEOINLINE","CLS_COUNT","CLS_WARNING","CLS_ERROR","CLS_EXPAND_OPEN","CLS_RTE_ELEMENTS","CLS_TB_BTN","CLS_HR_SEPARATOR","CLS_TB_IOS_FIX","CLS_LIST_PRIMARY_CONTENT","CLS_NUMBERFORMATLIST_TB_BTN","CLS_BULLETFORMATLIST_TB_BTN","CLS_FORMATS_TB_BTN","CLS_FONT_NAME_TB_BTN","CLS_FONT_SIZE_TB_BTN","CLS_ALIGN_TB_BTN","CLS_FONT_COLOR_TARGET","CLS_BACKGROUND_COLOR_TARGET","CLS_COLOR_CONTENT","CLS_FONT_COLOR_DROPDOWN","CLS_BACKGROUND_COLOR_DROPDOWN","CLS_COLOR_PALETTE","CLS_FONT_COLOR_PICKER","CLS_BACKGROUND_COLOR_PICKER","CLS_RTE_READONLY","CLS_RTE_HIDDEN","CLS_RTE_RES_HANDLE","CLS_RTE_IMAGE","CLS_CUSTOM_TILE","CLS_NOCOLOR_ITEM","CLS_RTE_FIXED_TB_EXPAND","CLS_RTE_TB_ENABLED","editorMode","getEditPanel","enterKey","editorManager","nodeSelection","setCursorPoint","getDocument","KEY_DOWN","ACTION","FORMAT_TYPE","KEY_DOWN_HANDLER","LIST_TYPE","KEY_UP_HANDLER","KEY_UP","MODEL_CHANGED_PLUGIN","MODEL_CHANGED","MS_WORD_CLEANUP_PLUGIN","MS_WORD_CLEANUP","ON_BEGIN","SPACE_ACTION","FORMAT_PAINTER_ACTIONS","EMOJI_PICKER_ACTIONS","KeyboardEvents","isAltKey","isCtrlKey","isShiftKey","isMetaKey","curkeyCode","configCollection","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","configCache","getKeyCode","charCodeAt","ViewSource","onInitialEnd","updateSourceCode","observer","onKeyDown","getSourceCode","previewKeyDown","previewElement","wireBaseKeyDown","unWireBaseKeyDown","toolbarSettings","baseToolbar","toolbarObj","isBlur","targetItem","updateItem","getBaseToolbarObject","updateValueData","iframeSettings","rteContent","getTextAreaValue","disableToolbarItem","enableToolbarItem","placeHolderWrapper","invokeChangeEvent","editHTML","enableUndo","addAudioVideoWrapper","getViewPanel","executeGroup","command","subCommand","ExecCommandCallBack","commandCallBack","formatPainterCopy","saveData","AjaxSettings","fileItems","folderItems","layoutItems","ContextMenuSettings","columnArray","DetailsViewSettings","NavigationPaneSettings","ToolbarSettings","UploadSettings","templateItems","tools","alignmentLocale","alignmentItems","imageAlignItems","videoAlignItems","displayLocale","audioLayoutOptionLocale","videoLayoutOptionLocale","imageDisplayItems","audioLayoutOptionItems","videoLayoutOptionItems","tableCellItems","tableRowLocale","tableRowsItems","tableColumnLocale","tableColumnsItems","tableVerticalLocale","TableCellVerticalAlignItems","tableStyleLocale","TableStyleItems","fontColor","numberFormatList","bulletFormatList","getLocale","self","localeItems","updateDropDownLocale","windowKeys","defaultEmojiIcons","code","ImageSettings","AudioSettings","VideoSettings","FileManagerSettings","getImageUrl","uploadUrl","file","folder","layout","autoUpload","minFileSize","maxFileSize","allowedExtensions","autoClose","TableSettings","QuickToolbarSettings","FormatPainterSettings","EmojiSettings","PasteCleanupSettings","FontFamily","FontSize","Format","FontColor","BackgroundColor","NumberFormatList","BulletFormatList","Resources","IFrameSettings","InlineMode","toolsLocale","fontNameLocale","formatsLocale","numberFormatListLocale","bulletFormatListLocale","rte","isFrame","initial","iFrame","htmlAttr","setEnable","setReadOnly","setPlaceHolder","validateAttr","valueContainer","FullScreen","showFullScreen","quickToolbarModule","hideQuickToolbars","scrollableParent","evenArgs","beginEventArgs","enableFloating","inlineMode","getToolbarElement","toggleParentOverflow","removeFixedTBarClass","hideFullScreen","addFixedTBarClass","EnterKeyAction","getRangeNode","getRange","startNode","startContainer","endNode","endContainer","isTableEnter","formatTags","curElement","blockElement","domNode","isBlockNode","shiftKey_1","actionBeginArgs","startOffset","endOffset","deleteContents","focusElem","currentFocusElem","currentLastElem","shiftEnterKey","newElem","createInsertElement","nearBlockNode","blockParentNode","isMediaNode","isFocusedFirst","startNodeText","splitFirstText","removeBRElement","fireFoxEnterAtMiddle","isNearBlockLengthZero","nodeCutter","SplitNode","insertElem","finalFocusElem","audioVideoElem","isBRInserted","lastNode","brElm","audioModule","hideAudioQuickToolbar","videoModule","hideVideoQuickToolbar","startParentElem","isHeadingTag","insertElm","insertAfter","currentNode","previousNode","currentParentLastChild","isLastNodeLength","isImageElement","focusBRElem","imageElement","lineBreakBRElem","insertBRElement","outerBRElem","insertFocusContent","isEmptyBrInserted","isFocusTextNode","insertNode","brElm2","undoRedoItems","inlineNode","hasClass","getDropDownValue","returnType","isIDevice","isIos","getFormattedFontSize","isIFrame","i10n","itemLocale","setToolbarStatus","isPopToolbar","updateDropDownFontFormatLocale","dropDown","dropDownModule","tbElements","formatDropDown","formatItems","formatContent","alignDropDown","alignItems","fontNameDropDown","fontNameItems","fontNameContent","name_1","fontSizeDropDown","fontSizeItems","fontSizeContent","getCollection","getTBarItemsIndex","itemsIndex","updateUndoRedoStatus","undoRedoStatus","trgItems","keys_2","parseHtml","tempNode","DocumentFragment","createRange","createContextualFragment","getTextNodesUnder","docElement","nodes","toObjectLowerCase","getEditValue","rteObj","enableHtmlEncode","updateTextNode","decode","resultElm","isPreviousInlineElem","previousParent","emptyBlockElem","emptyInlineElem","imageElm","getDefaultValue","currentVal","isEditableValueEmpty","selectors","tags","getLocaleFontFormat","DialogRenderer","beforeClose","formEle","handleEnterKeyDown","beforeOpenCallback","closeArgs","RichTextEditor","quickToolbarSettings","showCharCount","fileManagerSettings","enableResize","updateEnable","initializeValue","isFocusOut","isRTE","defaultResetValue","isResizeInitialized","onBlurHandler","blurHandler","onFocusHandler","onResizeHandler","resizeHandler","clickPoints","setContainer","originalElement","localStorage","valueTemplate","invalidAttr","rteOuterWrapper","getID","currentClassList","showEmojiPicker","executeCommand","commandName","option","internalValue","htmlPurifier","toFocus","tool","undo","getUndoRedoStack","maxLength","currentInsertContentLength","tempElem","currentLength","getText","selectionLength","totalLength","formatPainterSettings","formatPainterAction","htmlEditorModule","tableSettings","imageValue","insertImageSettings","minHeight","wrapTemp","controls","audioValue","insertVideoSettings","linkValue","encode","sourceCodeModule","RTERender","enableXhtml","getXhtml","audioElm","audioWrapElem","contentEditable","audioInnerWrapElem","videoElm","videoWrapElem","cleanList","currentStartContainer","currentEndContainer","currentStartOffset","isSameContainer","closestLI","isDetached","currentLast","setSelectionText","restrict","regEx","fromCharCode","pointer","removeNodeArray","notFormatPainterCopy","FormatPainterEscapeAction","formatPainterModule","previousAction","process","autoResize","range_1","allowedKeys","formatPainterPaste","onKeyHandler","selfEncloseValidation","sanitizeHtml","inputVal","triggerEditArea","touch","notifyMouseUp","touchData","prevClientX","prevClientY","showOnRightClick","closestTable","detail","setStart","setEnd","onCopy","onCut","onPaste","pasteArgs","pastedContentLength","clipboardData","onSuccess","pasteCleanupModule","args_2","htmlValue","getAsFile","isWordPaste","clipboardAction","timeInterval","allClassName","removeHtmlAttributes","removeItem","undoRedoManager","wrapperElm","rangeCount","getRangeAt","selectedHtml","cloneContents","showInlineToolbar","targetElm","showInlineQTBar","hideInlineToolbar","hideInlineQTBar","nVal","updatePanelValue","countModule","refreshToolbarOverflow","oldCssClass","frameSetting","iframe","files","scripts","removeSheets","setIframeSettings","renderCount","wireContextEvent","unWireContextEvent","srcList","getTextArea","updateReadOnly","editPanel","unbindEvents","printArgs","printingArgs","fullScreenModule","muteToolbarUpdate","enableTBarItems","removeToolbarItem","removeTBarItems","enterKeyModule","styleSrc","scriptSrc","InjectSheet","scriptSheet","scriptEle","createScriptElement","styleEle","createStyleElement","rel","isPropertyChange","compiledTemplate","displayTempElem","appendElem","updateResizeFlag","getInsertImgMaxWidth","imgPadding","imgResizeBorder","imageModule","editEle","eleStyle","editEleMaxWidth","getInsertVidMaxWidth","vidPadding","vidResizeBorder","rteHeightPercent","heightPercent","rteHeight","getToolbarHeight","rzHandle","rzHeight","expandPopHeight","getExpandTBarPopHeight","codeElement","tbWrapHeight","getHtml","showSourceCode","getCharCount","htmlLength","htmlText","InsertLink","InsertImage","InsertAudio","InsertVideo","InsertTable","getBaseToolbar","getInlineBaseToolbar","preventDefaultResize","preventImgResize","defaultResize","cloneValue","saveInterval","autoSaveOnIdle","updateValueOnIdle","getUpdatedValue","tableModule","removeResizeElement","isValueChangeBlurhandler","updateIntervalValue","idleInterval","updateStatus","html","markdown","status_1","getUndoStatus","redo","rteElement","documentNode","wireScrollElementsEvents","scrollParentElements","contextHandler","tapHold","touchHandler","tapHoldThreshold","unWireScrollElementsEvents","closestElem","onSelection","resetHandler","setAutoHeight","iframeElement_1","arrayKey","editorKeyDown","onIframeMouseDown","getModel","upDownKeyHandler","ul","li","defaultIdx","liIdx","selectedLi","isValidLI","setBlankIconStyle","blankIcon","blankIconList","menuItem","iconLi","cssProp","margin","FOCUS","ICON","ITEM","POPUP","SEPARATOR","VERTICAL","DropDownButton","isPopupCreated","canOpen","openPopUp","createPopupOnClick","createPopup","closePopup","initialize","newItem","createItems","isUniqueId","getULElement","relateTo","collision","targetType","getTargetElement","refreshPosition","appendItems","hasIcon","tempItem","createAnchor","getPopUpElement","appendArrowSpan","setActiveElem","isColorPicker","activeElem","attrList","popupUnWireEvents","destroyPopup","popupEle","keyBoardHandler","dropDownBtn","delegateMousedownHandler","mousedownHandler","popupWireEvents","popupElement","closeActionEvents","focusoutHandler","rippleFn","getLI","trgt","liTarget","popupElem","splitButton","appendReactElement","beforeOpenArgs","observedArgs","ul_1","wrapperWidth","popupRect","popupLeft","openArgs","beforeCloseArgs","ul_2","btnModel","arrowSpan","TAGNAME","SplitButton","initWrapper","createPrimaryButton","renderControl","createSecondaryButton","secondaryBtnObj","setAria","primaryBtnObj","btnElem","dropDownBtnModel","Deferred","primaryBtnClickHandler","btnKeyBoardHandler","altdownarrow","TicksData","ColorRangeData","LimitData","TooltipData","bootstrapTooltipOffset","bootstrap4TooltipOffset","sliderHiddenInput","controlWrapper","sliderHandle","rangeBar","sliderButton","firstButton","secondButton","tick","large","tickValue","sliderTooltip","sliderHover","sliderFirstHandle","sliderSecondHandle","sliderDisabled","sliderContainer","horizontalTooltipBefore","horizontalTooltipAfter","verticalTooltipBefore","verticalTooltipAfter","materialTooltip","materialTooltipOpen","materialTooltipActive","materialSlider","sliderTrack","sliderHorizantalColor","sliderVerticalColor","sliderHandleFocused","verticalSlider","horizontalSlider","sliderHandleStart","sliderTooltipStart","sliderTabHandle","sliderButtonIcon","sliderSmallSize","sliderTickPosition","sliderFirstTick","sliderLastTick","sliderButtonClass","sliderTooltipWrapper","sliderTabTrack","sliderTabRange","sliderActiveHandle","sliderMaterialHandle","sliderMaterialRange","sliderMaterialDefault","materialTooltipShow","materialTooltipHide","limits","limitBarDefault","limitBarFirst","limitBarSecond","dragHorizontal","dragVertical","Slider","horDir","verDir","handle","transitionOnMaterialTooltip","scaleTransform","customAriaText","isDragComplete","initialTooltip","incrementTitle","decrementTitle","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","initCultureInfo","initCultureFunc","formChecker","formResetValue","internationalization","ticks","formatString","formatInfo","formatValue","formatNumber","numberOfDecimals","makeRoundNumber","elementVal","maximumFractionDigits","minimumFractionDigits","decimalPart","precision","decimals","fractionalToInteger","noOfDecimals","tens","setZindex","getTheme","setElementWidth","isVisible","showOn","getThemeInitialization","setHandler","createRangeBar","createLimitBar","setOrientClass","hiddenInput","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isMaterial3","isBootstrap","isBootstrap4","isTailwind","isBootstrap5","isFluent","isMaterialTooltip","firstElementClassName","firstHandle","secondHandle","setAriaAttributes","customValues","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","propertyName","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","currDir","setBarColor","tooltipValue","setTooltipContent","tooltipObj","addTooltipClass","setAriaAttrValue","setPreviousVal","ariaContent","handle1","handleVal1","handle2","handleVal2","oldCss","newCss","getTooltipTransformProperties","previousTooltipClass","tooltipBeforeOpen","setTooltipTransform","tooltipCollision","tooltipOffsetValue","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","openMaterialTooltip","refreshTooltip","tooltipContentElement","closeMaterialTooltip","tooltipTarget","checkTooltipPosition","tooltipClass","collidedPosition","tooltipCollidedPosition","beforeCollision","tooltipBeforeClose","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","hVal","handleValueUpdate","step","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","focusHandle","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","isAndroid","smallStep","showSmallTicks","largeStep","steps","customStep","islargeTick","tickWidth","Infinity","largestep","startValue","repeat","createTick","formatTicksValue","decimalPoints","ticksAlignment","triggerEvent","ticksWrapper","tickElements","scaleAlignment","spanElement","tickText","tickElement","tickValuePosition","otherChild","other","ariaValueText","isTickFormatted","valuenow","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","maxValue","limitBar","preHandlePos1","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","updateRangeValue","changeEventArgs","preHandlePos2","values_1","tempStartEnd","reposition","removeElement","startHandleFixed","endHandleFixed","xyToPosition","num","stepValueCalculation","percentStep","remain","addition","pow","positionToValue","total","handlepos","handleVal","behindElement","eventX","eventY","checkRepeatedValue","handleValueAdjust","handleValue","handleNumber","minDiff","dragRangeBarMove","xPostion","yPostion","rangeBarDragged","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","hover","formResetHandler","curTarget","changeSliderType","updateConfig","changeRtl","limitsPropertyChange","setMinMaxValue","setTooltip","trackPosition","trackClassName","colorRange","startingPosition","endPosition","trackContainer","APPLY","CANCEL","CURRENT","CONTAINER","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HANDLER","HEX","HIDEHEX","HIDEOPACITY","HIDERGBA","HIDEVALUE","HIDEVALUESWITCH","HSVAREA","HSVCONTAINER","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SHOWVALUE","SELECT","SPLITPREVIEW","TILE","presets","ColorPicker","Apply","ModeSwitcher","inline","createWidget","createSplitBtn","enableOpacity","getWrapper","roundValue","noColor","slicedValue","initialInputValue","tileRipple","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitBtn","onOpen","hex","rgba","convertToRgbString","hexToRgb","preview","getPopupEle","popupInst","getPopupInst","bindCallBackEvent","observeOpenArgs","modal","observedCloseArgs","onPopupClose","destroyOtherComp","presetColors","paletteGroup","appendElement","appendPalette","modeSwitcher","setNoColor","borderBottomWidth","rgb","hsv","rgbToHsv","refEle","tile","roundedColor","presetName","addTileSelection","noColorEle","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","hueChange","createOpacitySlider","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","opacityEle","background","convertToOtherFormat","pValue","rgbToHex","cValue","updateOpacityInput","updatePreview","opacityTextBoxInst","previewContainer","colorValue","isPicker","createNumericInput","numericInput","showSpinButton","inputWrap","appendValueSwitchBtn","hexInput","clsName","appendOpacityValue","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","tooltipEle","getTooltipInst","setTooltipOffset","convertToHsvString","updateHsv","isKey","updateInput","substr","removeTileSelection","convertRgbToNumberArray","pickerKeyDown","ctrlBtn","ctrlBtnKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","ctrlSwitchBtn","btnClickHandler","applyBtn","triggerChangeEvent","handlerDragPosition","observedcloseArgs","prob","setHsv","handlerMove","handlerEnd","switchToPalette","ctrlBtnClick","noColorTile","switchToPicker","grpEle","tiles","prevSelectedEle","tilePosition","keySelectionChanges","newEle","emptyCount","inputValueChange","isPopupOpen","numericElemColl","tooltipInst","bigInt","g","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","changeOpacityProps","otherCompModel","count_1","ToolbarRenderer","destroyTooltip","popupOverlay","onPopupOverlay","removePopupContainer","toolbarBeforeCreate","enableCollision","toolbarClicked","dropDownSelected","listEle","popupModal","rteToolbarObj","beforeCreate","windowCollision","renderDropDownButton","beforeItemRender","renderListDropDown","inlineEle","currentDropdown","setIsModel","paletteSelection","dropDownArgs","colorbox","borderBottomColor","renderColorPickerDropDown","colorPicker","defaultColor","initialBackgroundColor","colorpickerValue","closestElement","setColorPickerContentWidth","pickerRefresh","dropElement","onmousedown","onkeydown","colorPickerContent","beforeTileRender","colorPickerArgs","beforeModeSwitch","colorCode","toolbarPanel","BaseToolbar","renderFactory","itemConfigs","setRtl","getTemplateObject","callback_1","currentContentElem","tbItems_1","shortCutKey","getToolbarOptions","toolbarRenderer","DropDownButtons","initializeInstance","dropdownContent","renderDropDowns","containerType","tbElement","formatOLItem","defineProperties","enumerable","numberFormatListDropDown","formatULItem","bulletFormatListDropDown","formatItem","fontItem","getEditNode","fontsize","renderAlignmentDropDown","renderDisplayDropDown","rowDropDown","columnDropDown","cellDropDown","verticalAlignDropDown","tableStylesDropDown","getUpdateItems","dropDownItems","fontItems","tableRowsDropDown","tableColumnsDropDown","tableCellVerticalAlignDropDown","displayDropDown","imageAlignDropDown","removeDropDownClasses","destroyDropDowns","updateCss","dropDownObj","ToolbarAction","renderSelection","controlParent","tableQTBar","listItem","listStyle","listImage","isToolbar","isTransformChild","editableElement","toolbarBindEvent","keyBoardModule","toolBarKeyDown","createToolbarElement","tbWrapper","getToolbarMode","tbMode","Scrollable","checkToolbarResponsive","tBarMode","MultiRow","checkIsTransformChild","transformElements","toggleFloatClass","scrollParent","isBody","isFloat","floatOffset","floatingToolbarOffset","scrollParentRelativeTop","trgHeight","bodyStyle","paddingTop","targetTop","scrollParentYOffset","isMSPointer","scrollParentRect","scrollParentTop","outOfRange","iframeEle","showFixedTBar","hideFixedTBar","trgItem","addTBarItem","prefixId","updateToolbarStatus","fullScreen","hideScreen","popHeight","expandPopup","isToolbarDestroyed","destroyToolbar","toolbarActionModule","getDOMVisibility","focusChangeHandler","dropDownBeforeOpenHandler","tbFocusHandler","activeElm","isToolbaractive","tbKeydownHandler","extendedTbar","onRefresh","setEditFrameFocus","contentWindow","enterAction","paraElm","tableElm","tdElm","borderLeft","borderRight","borderBottom","borderTop","getLastTextNode","startChildNodes","finalNode","getDefaultHtmlTbStatus","bold","italic","subscript","superscript","strikethrough","orderedlist","unorderedlist","underline","alignments","backgroundcolor","fontcolor","fontname","formats","createlink","insertcode","Link","rteID","dialogRenderObj","linkDialog","showLinkQuickToolbar","onToolbarAction","editAreaClickHandler","returnValue","currentObj","checkBoxObj","linkQTBar","quickToolObj","isNotify","linkTop","linkLeft","linkPos","hideLinkQuickToolbar","hidePopup","getAnchorNode","isInternal","selectNodeEle","getNodeCollection","selectParentEle","getParentNodeCollection","selectNode","selectParent","textArea","markdownSelection","selectionStart","selectionEnd","getSelectedText","inputDetails","linkWebAddress","linkDisplayText","linkTooltip","urlPlace","textPlace","linkDialogEle","linkContent","htmlTextbox","contentElem","linkTarget","linkUrl","linkTitle","linkOpenLabel","selectText","linkInsert","linkCancel","selectObj","selfLink","dialogModel","insertlink","cancelDialog","btnText","checkUrl","inlineQTBar","linkEle","isUrl","enableAutoUrl","argsValue","argsVal","regexp","selectedNode","linkUpdate","Formatter","saveSelection","isKeyboardVideoInsert","getAncestorNode","commonAncestorContainer","action_1","isTableModule","ensureInsideTableList","selectType","events","callbackArgs","undoRedoStack","quickTBarObj","IMAGE","AUDIO","VIDEO","TABLE","LINK","INSERT_ROW","INSERT_COLUMN","DELETEROW","DELETECOLUMN","REMOVETABLE","TABLEHEADER","TABLE_VERTICAL_ALIGN","TABLE_MERGE","TABLE_VERTICAL_SPLIT","TABLE_HORIZONTAL_SPLIT","TABLE_MOVE","ALIGNMENT_TYPE","INDENT_TYPE","DEFAULT_TAG","BLOCK_TAGS","IGNORE_BLOCK_TAGS","TABLE_BLOCK_TAGS","SELECTION_TYPE","INSERTHTML_TYPE","INSERT_TEXT_TYPE","CLEAR_TYPE","SELF_CLOSING_TAGS","NodeSelection","startNodeName","endNodeName","saveInstance","cloneRange","rootNode","documentFromRange","getNodeArray","isChildNode","nodeCollection","getNode","getParentNodes","getSelectionNodeCollection","getSelectionNodes","getSelectionNodeCollectionBr","getSelectionNodesBr","getInsertNodeCollection","getInsertNodes","setRangePoint","isvalid","constant","setRange","addRange","setSelectionContents","setSelectionNode","selectNodeContents","getSelectedNodes","insertParentNode","newNode","surroundContents","htmlKeyConfig","selfClosingTags","markerClassName","startSelection","endSelection","DOMNode","currentDocument","isLink","rawAttributes","rawAttr","orderRawAttr","attrKey","attrValue","clearAttributes","openTagString","closeTagString","createTagString","relativeElement","isList","parseHTMLFragment","referenceNode","wrapInner","unWrap","unWrapNode","getSelectedNode","TEXT_NODE","nodeFinds","existNodes","isEditorArea","getRangePoint","getPreviousNode","saveMarker","startTextNode","endTextNode","setMarker","isTableStart","existNode","textNodes","markerStart","markerEnd","ensureSelfClosingTag","isTable","parNode","tdNode","createTempNode","ignoreBr","getImageTagInSelection","focusNode","blockNodes","collectionNodes","ignoreTableTag","listNodes","Lists","applyListsHandler","onKeyUp","spaceKeyAction","testList","olListRegex","elementStart","testCurrentList","olListStartRegex","currentContent","spaceList","preElement","preElemULStart","nextElemULStart","startElementOLTest","preElementOLTest","nextElementOLTest","enterList","hasMediaElem","videoElemList","embedVideoElem","startNodeParent","GetSpliceNode","insertTag","backspaceList","parentList","removeList","firstListBackSpace","commonLIParent","currentLIElem","currentElem","commonAncestor","startEle","endEle","ignoreDefault","currentAction","getAction","revertList","revertClean","nestedList","cleanNode","prevSibling","noPreviousElement","firstNode","firstNodeOL","siblingListOL","siblingListLI","siblingListLIFirst","nestedElement","nestedElementLI","firstNodeLI","lastSelectionNode","listsNodes","setSelectionBRConfig","allSelectedNode","selectedNodes","currentFormatNodes","previousCurrentNode","preNode","postNode","applyLists","startElem","endElem","isRevert","removeEmptyListElements","checkLists","elemAtt","openTag","closeTag","newTag","replaceHTML","collectionString","listElem","listStyleType","nodesTemp","liParents","contentNodes","append","findUnSelected","rightIndent","indentElements","lastElement","childElements","childLI","viewNode","siblingList","wrapperclass","childNode","nodeInnerHtml","emptyUl","emptyLi","InsertMethods","WrapBefore","textNode","isAfter","AppendBefore","Wrap","unwrap","NodeCutter","setStartBefore","setEndAfter","fragment","extractContents","spliceEmptyNode","isRteElm","GetCursorStart","GetCursorRange","cursorRange","TrimLineBreak","GetCursorNode","Formats","applyFormats","getParentNode","endCon","pTag","brNode","startCon","preElem","endPreElem","liParent","deleteContent","removeCodeContent","lastEmpty","lastBeforeBr","startParent","paraFocus","isNotEndCursor","referNode","isEnd","insertMarker","brTag","previousSib","insertAdjacentHTML","setCursorPosition","markerElem","mrkParentElem","focusSelectionParent","tempSpanPElem","tempSpan","isSelectAll","formatsNodes","exeValue","cleanFormats","replaceNode","replaceTag","preFormatMerge","preNodes","ignoreAttr","InsertHtml","Insert","editNode","isExternal","findFirstTextNode","isCursor","closestParentNode","closestEle","pasteInsertHTML","sibNode","lasNode","removeEmptyElements","parentNode1","imageFocus","paraElem","isSingleNode","currentBlockNode","getImmediateBlockNode","containsBlockNode","removingComments","allChildNodes","parentElem","insertTempNode","isFirstTextNode","contentsDeleted","firstParaElm","nearestAnchor","immediateBlockNode","rangeElement","placeCursorEnd","cursorPos","blockNode","liNode","splitedElm","createTextNode","elm","findDetachEmptyElem","removableElement","emptyElements","lineWithDiv","detachableElement","LinkCommand","linkCommand","createLink","closestAnchor","domSelection","localeCompare","createAchorNode","removeText","createLinkNode","anchorEle","txtArray","inlineNodes","removeNodes","anchorNodes","finalinlineNodes","j_1","j_2","linkNode","containsNode","Alignments","applyAlignment","getTableNode","cellNode","isTableAlign","alignmentNodes","imageTags","elementNode","imgObj","imageCommand","Indents","indentValue","applyIndents","isRtl","indentsNodes","parentNodes","marginLeftOrRight","indentsValue","CLASS_IMAGE_RIGHT","CLASS_IMAGE_LEFT","CLASS_IMAGE_CENTER","CLASS_VIDEO_RIGHT","CLASS_VIDEO_LEFT","CLASS_VIDEO_CENTER","CLASS_IMAGE_BREAK","CLASS_AUDIO_BREAK","CLASS_VIDEO_BREAK","CLASS_CAPTION","CLASS_CAPTION_INLINE","CLASS_IMAGE_INLINE","CLASS_AUDIO_INLINE","CLASS_CLICK_ELEM","CLASS_VIDEO_CLICK_ELEM","CLASS_AUDIO","CLASS_VIDEO","CLASS_AUDIO_WRAP","CLASS_VIDEO_WRAP","CLASS_EMBED_VIDEO_WRAP","CLASS_AUDIO_FOCUS","CLASS_VIDEO_FOCUS","CLASS_VIDEO_INLINE","ImageCommand","createImage","insertImageLink","openImageLink","editImageLink","removeImageLink","removeImage","insertAltTextImage","imageDimension","imageCaption","imageJustifyLeft","imageJustifyCenter","imageJustifyRight","imageInline","imageBreak","isReplaced","imgElement","imgEle","imgElm_1","altText","calculateStyleValue","styleValue","capImgWrap","textEle","newTextEle","insertElement","AudioCommand","audioCommand","createAudio","wrapElement","audioEle","fileName","audElement","sourceElement","clickElement","audioElm_1","VideoCommand","videoCommand","videoWrapNode","videoClickElem","createVideo","videoDimension","cssFloat","vidElement","isEmbedUrl","videoEle","videoElm_1","editAreaVideoClick","TableCommand","insertRow","insertColumn","deleteColumn","removeTable","tableHeader","tableVerticalAlign","HorizontalSplit","VerticalSplit","tableMove","tblBody","tdWid","removeEmptyNode","emptyLiChild","getSelectedCellMinMaxIndex","curTable","minI","maxI","minJ","maxJ","selectedCellIndex","getCorrespondingIndex","minMaxIndex","FindIndex","startRow","endRow","startColumn","endColumn","isBelow","allCells","getCorrespondingColumns","minVal","newRow","isHeaderSelect","curCell","curRow","previousWidth","currentWidth","currentTabElm","thTdElm","oldWidth","colTemplate","tBodyHeadEle","deleteIndex","selectedMinMaxIndex","minCol","maxCol","colSpanVal","rowHeadEle","sContainer","startChildLength","rowSpanVal","getMergedRow","prepend","focusTrEle","mergedRow","selectedTable","headerExit","cellCount","colSpanCount","createTHead","deleteTHead","tableCell","mergeCellContent","minMaxIndexes","getSelectedMinMaxIndexes","firstCell","rowSelectedCells","updateRowSpanStyle","updateColSpanStyle","colValue","colMin","eleArray","updateCellAttribute","rowValue","rowMin","correspondingCells","minRow","maxRow","currentRowCol","targetRowCol","activeCell","newCell","activeCellIndex","activeCellRowSpan","avgCount","avgRowIndex","newTrEle","avgWidth","correspondingColumns","activeCellcolSpan","elementArray","colEle","ele_1","colspan_1","nextCol","highlightCells","minRowIndex","maxRowIndex","minColIndex","maxColIndex","minMaxValues","MinMax","activeCellTag","targetCellTag","activeRowIndex","activeColumnIndex","targetRowIndex","targetColumnIndex","activeCellList","activeIndexes","targetIndexes","IsFormatted","getFormattedNode","getFormatParent","isFormattedNode","isBold","isItalic","isUnderline","isStrikethrough","isSuperscript","isSubscript","isFontColor","isFontName","isFontSize","isBackgroundColor","validTags","inlineTags","textDecoration","textDecorationLine","backColor","SelectionCommands","applyFormat","painterValues","validFormats","isFormatted","isFormat","preventRestore","isFontStyle","currentFormatNode","currentSelector","cursorNode","insertCursorNode","isSubSup","formatNode","insertFormat","removeFormat","applySelection","cursorNodes","cursorFormat","getCursorFormat","emptySpaceNode","brElem","getInsertNode","bgStyle","splitNode","startText","nodeText","nodeIndex","isFullNodeSelected","wholeText","nodeTraverse","styleElement","GetFormatNode","nodeArray","priorityNode","getPriorityFormatNode","applyStyles","bg","formatNodeStyles","formatNodeTagName","nodeTraverseCondition","currentNodeElem","curParentElem","liElement","liChildContent","isNestedList","nestedListCount","isNestedListItem","num_1","num_2","num_3","toLocaleUpperCase","insertFormatPainterElem","isSameTextContent","nodeList","getChildNode","fontColorNode","backgroundColorNode","fontNameNode","fontSizeNode","formatPainterCleanup","elemList","INVALID_TAGS","childELemList","blockChildNodes","currentChild","SelectionBasedExec","InsertHtmlExec","applyHtml","pastedElements","allPastedElements","imgElements","allImgElm","imgElem","ClearFormat","defaultTag","lastText","exactNodes","cloneSelectNodes","clearInlines","reSelection","cloneParentNodes","clearBlocks","selectionNodes","endIndexNode","spliceParent","removeParent","index1","index2","index3","NONVALID_TAGS","NONVALID_PARENT_TAGS","IGNORE_PARENT_TAGS","currentInlineNode","removeInlineParent","ClearFormatExec","applyClear","UndoRedoManager","undoRedoSteps","undoRedoTimer","debounceListener","onAction","getTextContentFromFragment","currentContainer","changEle","removedContent","addedContent","MsWordPaste","olData","ulData","ignorableNodes","upperRomanNumber","lowerRomanNumber","lowerGreekNumber","removableElements","listContents","wordCleanup","wordPasteStyleConfig","allowedStylePropertiesArray","tempHTMLContent","rtfData","patern","patern2","patern3","pattern4","imageConversion","addListClass","cleanUp","listConverter","styleCorrection","removeUnwantedElements","removeEmptyAnchorTag","breakLineAddition","removeClassName","addTableBorderClass","liChildren","listTag","replacableElem","closestListElem","findClosestListElem","allNodes","allTableElm","hasTableBorder","checkVShape","imgSrc","base64Src","imgName","linkRegex","hexValue","hexConversion","convertToBase64","byteArr","conHexStringToBytes","base64String","conBytesToBase64","base64","base64Str","base64Char","byteArrLen","array3","array3length","array4","imgType","picHead","pic","fullImg","elmWithClass","allElements","findDetachElem","brElement","regExpStartElem","regExpEndElem","hasParentWithClass","currentParentElem","styleClassObject_1","findStyleObject","removeUnwantedStyle","filterStyles","resultElem","fromClass","styleProperty","valueSplit","changedValue","listClass","olULElems","classStyle","inlineStyle","elmWithStyles","elemStyleProperty","styleValues","styleClassObject","tempStyle","classNameCollection","stylesCollection","prevflagState","tempCleaner","stNode","currentListStyle","getListContent","startAttr","styleMarginLeft","getlistStyleType","startString","listTypes","currentClassName","listType","nestedLevel","listStyleTypeName","makeConversion","elemColl","listContent","currentListClass","charCode","prevList","pLevel","listCount","isNormalList","pElement","initialNode","getNamedItem","currentStyle","pushContent","listIgnoreTag","listOrder","InsertTextExec","insertText","FormatPainterActions","setDeniedFormats","actionHandler","allowedFormats","deniedFormats","copyCollection","deniedFormatsCollection","newElemLastChild","allowedContext","copyAction","pasteAction","escapeAction","generateElement","lastAppendChild","elemCollection","priority","elemChild","removeDeniedFormats","paintPlainTextFormat","insertFormatNode","deniedPropArray","elementsList","classLength","styleLength","attributeLength","currentContext","findCurrentContext","allowedRulesArray","getRangeParentElem","rangeParentElem","allAttributes","allStyles","styleProp","getPropertyPriority","rangeParent","rangeParentELem","nearBlockParentName","getNearestBlockParentElement","isBlockElement","blockTags","isInValid","validateELementTag","clonedElem","newBlockElem","inlineElement","childElem","formatValues","insertBlockNode","listElement","cloneListParentNode","sameListType","cloneElementNode","cloneParentNode","isSameListType","insertSameList","insertNewList","after","cleanEmptyLists","parent_2","detachEmptyBlockNodes","nearestListNode","makeDeniedFormatsCollection","openParenIndex","closeParenIndex","openBracketIndex","closeBracketIndex","openBraceIndex","closeBraceIndex","attributesList","stylesList","openIndexArray","EmojiPickerAction","emojiInsert","prevChar_1","isPrevSpace_1","beforeApplyFormat","colon","prevChar","isPrevSpace","focusOffset","isBlockFormat","range1","blockNewLine","startPoint","range2","node2","EditorManager","listObj","formatObj","alignmentObj","indentsObj","linkObj","audioObj","videoObj","selectionObj","inserthtmlObj","insertTextObj","clearObj","tableObj","msWordPaste","formatPainterEditor","emojiPickerObj","editorKeyUp","onWordPaste","onBegin","HTMLFormatter","updateFormatter","doc","statusCollection","ToolbarStatus","targetNode","fontName","formatCollection","nodesLength","isNodeChanged","isOrderedList","isUnorderedList","isAlignment","isFormats","isNumberFormatList","isBulletFormatList","HtmlToolbarStatus","toolbarStatus","prevToolbarStatus","onRefreshHandler","tbStatusString","textString","IFRAMEHEADER","IframeContentRender","iFrameBodyContent","iFrameContent","contentDocument","setThemeColor","ColorPickerInput","renderColorPickerInput","suffixID","fontNode","fontColorPicker","fontColorDropDown","backNode","backgroundColorPicker","backgroundColorDropDown","defaultColorPicker","innerEle","colorPickerObj","fontBorder","backgroundBorder","XhtmlValidation","enableXhtmlValidation","ImageTags","removeTags","RemoveUnsupported","valueLength","arrayValue","valueTemp","valueDupe","valueOriginal","imgRegexp","exec","imgNodes","RemoveElementNode","rmvNode","parentArray","rmvArray","underlineEle","strongEle","boldEle","attrArray","RemoveAttributeByName","attrName","HtmlEditor","isImageDelete","nodeSelectionObj","colorPickerModule","onToolbarClick","onSelectionSave","onSelectionRestore","isTableClassAdded","contenteditable","tableElement","restrictKeys","isRootParent","previousLength_1","previousRange","previousLength","currentChildNode","backSpaceCleanup","deleteCleanup","enableTabKey","textCont","spaceLink","currentRange_1","editorValue","orderedList_1","unOrderedList","isUnOrderedList","eventArgs_1","oldRangeElement","deleteRangeElement","deleteOldRangeElement","ulListStartRegex","isLiElement","isPreviousNotContentEditable","checkNode","getRootBlockNode","getRangeLiNode","normalize","getRangeElement","getCaretIndex","preCaretRange","rangeBlockNode","rangeLiNode","regex","httpRegex","wwwRegex","enterSplitText","contentInnerElem","contentWithSpace","spaceBetweenContent","spaceSplit","splitTextContent","resultSplitContent","splitText","urlText","urlTextRange","imageDialog","clickTimeout","formatterClass","toolbarUpdate","BaseQuickToolbar","isDOMElement","popupRenderer","Popup","dropDownButtons","appendPopupContent","popupType","popupId","stringItems","renderPopup","setPosition","imgWrapper","isAligned","targetOffsetTop","parentOffsetTop","editTop","tBarElementHeight","editHeight","popWidth","popupObj","checkCollision","viewPort","contentTop","windowY","windowHeight","windowWidth","bodyRightSpace","positionX","positionY","beforeQuickToolbarArgs","editPanelTop","editPanelHeight","bodyRight","toolbarAvail","expTBHeight","tBarHeight","showPopupData","viewSourcePanel","tooltipTargetEle","dataContent","removeEleFromDOM","addQTBarItem","removeQTBarItem","PopupRenderer","popupPanel","QuickToolbar","formattedItems","getQTBarOptions","popType","renderType","createQTBar","qTBar","initializeQuickToolbars","selectionChangeHandler","keyUpQT","renderQuickToolbars","imageQTBar","audioQTBar","videoQTBar","textQTBar","LinkToolbar","TextToolbar","image","ImageToolbar","audio","AudioToolbar","video","VideoToolbar","TableToolbar","renderInlineQuickToolbar","InlineToolbar","deBounce","deBouncer","inlineQTBarMouseDownHandler","onSelectionChange","wireInlineQTBarEvents","unWireInlineQTBarEvents","actionOnScroll","baseQTObj","baseQuickToolbarObj","Count","appendCount","charCountBackground","string","INPUTGROUP","FLOATINPUT","TOPLABEL","BOTTOMLABEL","regularExpressions","createMask","mask","splitMask","splitInnerMask","pushIntoRegExpCollec","chkSpace","customRegExpCollec","hiddenMask","promptChar","escapeMaskValue","promptMask","customCharacters","escapeNumber","applyMask","setElementValue","setMaskValue","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","maskInputMouseDownHandler","maskInputMouseUpHandler","resetFormHandler","inputObj","redoCollec","triggerMaskChangeEvent","initInputValue","unstrippedValue","strippedValue","maskValues","checkMask","maskValue","_callPasteHandler","regExpCollec","isClicked","modelValue","toAllowForward","toAllowBackward","maskedValue","triggerFocus","backSelectionStart","escapeRegExp","blurEventArgs","sIndex_1","eIndex_1","oldValue_1","maskKeyPress","validateValue","preValue_1","sIndex_2","eIndex","undoCollec","value_1","removeMaskInputValues","addedValues","preEleVal","collec","mobileRemoveFunction","sIndex","autoFillMaskInputValues","oldEventVal","isDeleted","initStartIndex","initEndIndex","curMask","deleteEndIndex","multipleDel","oldValue","prompt_1","elementValue","isIosInvalid","removeMaskError","val_1","startIndex_1","preventUnsupportedValues","temp_1","mobileSwipeCheck","mobileValidation","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValStr","customValArr","applySupportedValues","addMaskErrorClass","changeToLowerUpperCase","sIdx","ctrl","chkSupport","curVal","caseCount","MaskUndo","INPUT","COMPONENT","CONTROL","MASKINPUT_FOCUS","wrapperAttr","MaskedTextBox","maskOptions","focusEventArgs","angularTagName","checkHtmlAttributes","createWrapper","resetMaskedTextBox","setMaskPlaceholder","version","getValidClassList","maskClassName","maskStyle","setVal","dynamicPlaceholder","isReadonly","updatedCssClassValues","strippedValue_1","strippedVal","getMaskedValue","SPINNER_CLASS","inputObject","ComboBox","getLocaleName","inputWrapper","preventBlur","dropDownClick","targetFocus","onInput","onFilterUp","onFilterDown","bindCommonEvent","inputValue","listData","customValue","setOldText","removeSelection","setOldValue","allowCustom","valueMuteChange","setHiddenValue","activeIndex","dataItem","itemData","detachChangeEvent","updateValues","getElementByText","liCollections","getElementByValue","updateIconState","clearIconHide","getAriaAttributes","ariaAttributes","hiddenElement","searchLists","isTyped","isFiltering","ulElement","filterInput","setHoverList","preventAutoFill","incrementalSearch","getNgDirective","setSearchBox","searchBoxContainer","isSelectCustom","inlineSearch","getFocusElement","getItemData","isDropDownClick","typeOfData","typeof","activeItem","filterType","getIndexByValue","fixedHead","groupBy","removeFillSelection","checkCustomValue","getDataByValue","spinnerElement","appendSpan","disableIcon","setAutoFill","isHover","getTextByValue","currentFillValue","getFormattedValue","updateSelectedItem","isAndroidAutoFill","setAutoFillSelection","currentPoints","getSelectionPoints","prevEnd","prevSelectPoints","curEnd","prevStart","curStart","isSelectFocusItem","isKeyNavigate","getValueByText","unBindCommonEvent","selectCurrentItem","onChangeEvent","previousValue_1","updateCustomValueCallback","changeData","checkData","setUpdateInitial","renderList","comboProps","getPropObject","newProperty","oldProperty","addItem","isEscape","isEscapeKey","typedString","searchItem","selectedLI","renderHightSearch","FilterCellRenderer","fltrData","filterBarTemplate","Element","clearIconElem","operatorIconRender","templateWrite","operators","fbicon","dropOptr","popupWidth","internalEvent","customOperators","spanElmt","FlMenuOptrUI","customFltrOperators","customFilterOperators","destroyDropDownList","renderOperatorUI","dlgConetntEle","optrData","customOptr","dropDatasource","selectedValue","dropSelectedVal","optrDiv","optrInput","valInput","renderResponsiveDropDownList","selValue","selectedField","optrLen","getFlOperator","highlightSearch","ignoreRegex","replaceQuery","findTextNode","revertHighlightSearch","AutoComplete","_this_1","searchList","dataType","suggestionCount","queryElements","isDataFetched","beforePopupOpen","resetList","preventDefaultAction","filterAction","minLength","fixedHeaderElement","postBackAction","setScrollPosition","listOption","fieldsSettings","itemCreated","highlight","itemCreated_1","isEditTextBox","isPopupButton","showPopupButton","setInputValue","checkFields_1_1","listLength_1","_this_2","refreshPopup","atcProps","isHighlight","StringFilterUI","serLocator","getAutoCompleteOptions","foreignColumnQuery","autoComplete","localizeText","acFocus","acComplete","acOpen","actObj","afterRenderFilterUI","struiObj","filterOptr","actuiObj","getOptrInstance","mapObj","NumberFilterUI","numericTxtObj","numberuiObj","BooleanFilterUI","dropInstance","drpuiObj","DateFilterUI","dpOpen","fltrSettings","inputElem","datePickerObj","dateuiObj","FilterMenuRenderer","fltrObj","isDialogOpen","isMenuCheck","colTypes","flMuiObj","menuFilterBase","clearBtnClick","filterBtnClick","renderDlgContent","mainDiv","dlgDiv","currentDialogCreatedColumn","renderFilterUI","ui","writeMethod","renderFlValueUI","menuOperator","valueDiv","instanceofFilterUI","valueInString","compElement","dlgContentEle","flValue","targ","flOptrValue","fltrValue","eControl","flIcon","renderCheckBoxMenu","CheckBoxFilter","isresetFocus","checkBoxBase","actionPrevent","addScrolling","scrollType","containerOffset","contentOffset","createScrollbar","scrollObj","scrollEle","destroyScroll","skipEle","menu","ENTER","ESCAPE","FOCUSED","HEADER","SELECTED","UPARROW","DOWNARROW","LEFTARROW","RIGHTARROW","HOME","END","TAB","CARET","HIDE","ICONS","TEMPLATE_PROPERTY","FieldSettings","MenuItem","MenuAnimationSettings","MenuBase","navIdx","isTapHold","showSubMenuOn","isMenu","ejInst","renderItems","enableScrolling","hamburgerMode","createHeaderContainer","defaultOption","showItemOnClick","createJsonFromElement","removeChildElement","targetElems","menuHeaderClickHandler","cmenuHandler","delegateMoverHandler","moverHandler","delegateMouseDownHandler","delegateClickHandler","wireKeyboardEvent","downarrow","uparrow","leftarrow","rightarrow","closeMenu","actionName","actionNeeded","removeLIStateByClass","rightEnterKeyHandler","leftEscKeyHandler","cul","getUlByNavIdx","fliIdx","fli","getLIByClass","getIdx","cli","navIdxLen","popups_1","allPopup","keyType","openMenu","isCMenu","ulIndex","isIterated","isMenuVisible","item_1","sli","wrapper_1","popups","getPopups","isClose","liElem_1","trgtliId","closedLi","trgtLi","unWireKeyboardEvent","toggleAnimation","updateReactTemplate","trgtpopUp","submenus","afterCloseMenu","isMenusClosed","sli_1","cliIdx","item_2","removeStateWrapper","getMenuItemModel","getFields","valueOf","lItem","elemId","uList","getField","hdata","hli","isNestedOrVertical","generatePopup","calculateIndentSize","hoverDelay","triggerBeforeOpen","ev","targetEvent","copyObject","destination","liStyle","liIndent","textIndent","blankIconElem","menuIconElem","menuIconElemStyle","blankIconIndent","triggerOpen","tempTitle","spanTitle","spanIcon","openHamburgerMenu","closeHamburgerMenu","observedHamburgerCloseArgs","callFit","menuType","observedOpenArgs","checkScrollOffset","animationOptions","collide","offWidth","iconCssProps","iconSize","offsetEle","offsetRight","px","toggleVisiblity","newTop","xCollision","hasField","listBaseOptions","itemNavigable","itemCreating","curData","createList","liTrgt","ulId","hdrWrapper","isDifferentElem","isClosed","cliWrapper","isInstLI","cliWrapperId","setLISelected","showSubMenu","culIdx","classname","isText","setItem","newItems","skipHdr","updateItemsByNavIdx","ul_3","getChangedItemIndex","ul1","lis","popStr","uls","targetSelctor","isMenuOpen","pUlHeight","nIndex","isCallBack","skipItem","showHideItems","hideItems","ishide","validUl","iitems","insertItems","menuitem","ContextMenu","ExcelFilterBase","childRefs","getCMenuDS","number","datetime","dateonly","unwireExEvents","menuObj","destroyCMenu","removeDialog","createMenu","isCheckIcon","eleOptions","hdrele","colIsSort","isAsc","isDesc","ascName","descName","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","clickExHandler","isCMenuOpen","cmenu","focused","submenu","selectedMenu","menuOptions","selectHandler","onClose","preventClose","contextRect","getContextBounds","getCMenuYPosition","isFilterBack","MouseEvent","contextWidth","targetBorder","filterLength","renderDialogue","overlayClick","templateField_1","createdDialog","rowResponsiveDlg","removeObjects","renderCustomFilter","dlgFields","fieldSet","displayName","checkBoxValue","fValue","fOperator","sValue","sOperator","andRadio","firstOperator","secondOperator","elementID","fieldElement","xlfloptr","menuText","dropDownValueChange","getSelectedValue","removeHandlersFromComponent","renderRadioButton","radioDiv","frstpredicate","secndpredicate","renderMatchCase","orRadio","elementId","isFilteredCol","fltrPredicates","columnObj","getExcelFilterData","valueInput","renderAutoComplete","renderNumericTextBox","renderDate","renderDateTime","predIndex","matchCaseDiv","matchCaseInput","datePicker","dateTimePicker","completeAction","numericTextBox","colObj","acActionComplete","columnvalue","ExcelFilter","excelFilterBase","contentRefresh","filterByMethod","cellText","nextFlMenuOpen","fltrDlgDetails","skipNumberInput","skipStringInput","getLocalizedCustomOperators","fltrElem","rowdrag","updateFilterMsg","dropdownlist","filterBarElement","filterObjIndex","getFilteredColsIndexByField","prevFilterObject","arrayVal","currentFilterObject","currentFilteringColumn","keyUpHandlerImmediate","refreshFilterValue","refreshFilterValueFn","docClickHandler","refreshClearIcon","columnMenuFilter","filterIconClickHandler","targetText","getOperatorName","checkForSkipInput","filterStatusMsg","applyColumnFormat","predObj","checkAlreadyColFiltered","getFlvalue","setFormatForFlColumn","skipUid","updateFilterIcon","refreshFilterSettings","updateFilter","filterElement","getFilterBarElement","fltrIconElement","colUid","filteredcols","fltrElement","filterDialogOpen","filterHandler","localizedStrings","fCell","filteredColsUid","currentPred","currentFilterColumn","closeHeaderEle","dropDownListInput","processFilter","openMenuByField","updateCrossIcon","getFormatFlValue","showFilterBarStatus","formater","operatorSymbols","stopTimer","startTimer","onTimerTick","immediateModeDelay","templateRead","validateFilterValue","skipInput","getOperator","singleOp","multipleOp","numOptr","stringOperator","numberOperator","dateOperator","datetimeOperator","dateonlyOperator","booleanOperator","filterOperatorElement","inputId","datepickerEle","hasDialog","hasDialogClosed","filterIconElement","refreshFilterIcon","addFilteredClass","renderCheckboxOnFilterMenu","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","hierarchyMode_1","childRec","isPrst","parent_3","fLevel","InterSectionObserver","movableEle","fromWheel","touchMove","containerRect","entered","pageHeight","movableContainerRect","observe","callback","onEnterCallback","virtualScrollHandler","movableContainer","debounced100","debounced50","prevTop","prevLeft","axes","sentinel","setPageHeight","VirtualRowModelGenerator","cOffsets","cache","movableCache","frozenRightCache","rowCache","rowModelGenerator","xAxis","loadSelf","getBlockIndexes","loadedBlocks","includePrevPage","checkAndResetCache","isBlockAvailable","isMovableBlockAvailable","isFrozenRightBlockAvailable","getStartIndex","median","getGroupVirtualRecordsByIndex","setBlockForManualRefresh","updateGroupRow","grouping","blocks","getPage","block","blk","full","even","getColumnIndexes","calWidth","iOffset","offsetVal","addFrozenIndex","refreshColOffsets","currentFirst","iterateGroup","oRow","getGroupedTotalBlocks","blockSize","prevHeight","preStartIndex","preventEvent","tmpOffsets","virtualEle","offsetKeys","isSelection","rndrCount","heightChange","requestTypes","isNormaledit","emptyRowData","vfColIndex","isSelectionScroll","validationCheck","renderPlaceHolder","debounceEvent","getBlockHeight","blockIndex","colsIndex","recordslength","firstRecords","virtualRows","scrollListener","scrollAfterEdit","viewInfo","getInfoFromView","restoreEdit","isBlockAdded","tempBlocks","infoType","preEndIndex","getPageFromTop","ensureBlocks","newBlock","every","firstBlock","setKeyboardNavIndex","blazorDataLoad","blzRowIndex","mIdx","getTotalBlocks","newChild","colVFtable","checkFirstBlockColIndexes","cBlock","cOffset","getColumnOffset","refreshOffsets","vHeight","getTranslateY","adjustMovableTable","setMovableWrapperWidth","setWrapperWidth","getOffset","focusCell","restoreAdd","ensureSelectedRowPosition","validationScrollLeft","initialRowTop","gridTop","validationCol","isRowInView","editedRowIndex","getVirtualEditedData","editForms","isFormDestroyed","startAdd","maxPage","onDataReady","resetScrollPosition","virtualHeightTemp","scrollableElementHeight","virtualHeight","placeHolderBottom","wrapperBottom","setMovableVirtualHeight","cHeight","isOnenter","endTranslate","blockHeight","totalBlocks","onEntered","isWheel","firstOffSetKey","lastOffSetKey","maxLeft","isLastBlockRow","remainHeight","lastRowTop","refreshMaxPage","selectVirtualRow","virtualCellFocus","editActionBegin","addActionBegin","refreshCache","resetIsedit","editCancel","refreshCells","scrollValues","down","allowScroll","HTMLInputElement","getEditedRowObject","editedrow","editRequestTypes","dataActionRequestTypes","virtualRenderer","refreshVirtualElement","addForm","createEmptyRowdata","getRowCollection","getMovableVirtualRowByIndex","getFrozenRightVirtualRowByIndex","isRowObject","rowCollection","rem","fcntColGrp","mcntColGrp","VirtualHeaderRenderer","gen","movableWrapper","setFrozenTable","fhdrColGrp","mhdrColGrp","tablewidth","VirtualElementHandler","renderFrozenWrapper","renderFrozenPlaceHolder","renderMovableWrapper","renderMovablePlaceHolder","movablePlaceholder","setFreezeWrapperWidth","VirtualScroll","ensurePageSize","virtualEditFormValidation","errorDomRect","forms","contentLeft","existingErrors","setEditedDataToValidationForm","isRenderer","TreeVirtualRowModelGenerator","getDatas","getDataInfo","VirtualTreeContentRenderer","maxiPage","preTranslate","isRemoteExpand","virtualOtherAction","setTop","nextSetResIndex","observers","observes","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","virtualEditSuccess","resetIseditValue","toSelectRowOnContextOpen","cellFocus","dataBoundEve","withInRange","restoreEditState","resetIsEdit","restoreNewRow","directVirtualRender","upScroll","outBuffer","downScroll","lastInx","remains","rowPt","firsttdinx","isLastBlock","previousInfo","TreeInterSectionObserver","isWheeling","newPos","lastPos","virtualScrollHandlers","delta","prevstartIndex","prevendIndex","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","ret","pageingDetails","counts","virtualWrapperElement","resourceCount","tempdata","TreeVirtual","instantiateRenderers","updatedAddFields","dialogEditValidationFlag","isValidData","getPredecessorType","editedRecord","booleanedit","dropdownedit","datepickeredit","datetimepickeredit","maskededit","numericedit","stringedit","defaultedit","editDialogFields","getDefaultDialogFields","validateDialogFields","addDialogFields","dialogFields","newDialogFields","emptyCustomColumn","fieldItem","getGeneralColumnFields","getCustomColumnFields","composeAddRecord","getMinimumStartDate","minDate","getNewTaskId","selectedRowId","numericOrString","dialogMaxWidth","closedBy","generalTabElement","createTab","initiateDialogSave","resetValues","destroyDialogInnerElements","tabModel","destroyCustomField","controlObj","getEditFields","tabElement","dialogSettings","dialogField","tabItem","getFieldsModel","getSegmentsModel","getPredecessorModel","getResourcesModel","getNotesModel","renderTabItems","tabSelectedEvent","actionCompleteArgs","actionCompleteArg","responsiveTabContent","resourceSelection","notesTabElement","dialogContent","dialogContentHeight","toolbar_1","fieldsModel","createInputModel","common","checkboxModel","validateScheduleFields","numeric","strictMode","firstDayOfWeek","dateTimePickerObj","dataKey","fieldsKey","dropDownListObj","targetId","strViewType","customFn","required","validateSegmentFields","validateScheduleValuesByCurrentField","updateScheduleFields","ganttField","ganttId","taskField","picker","validateDuration","validateStartDate","validateEndDate","segmentInputModel","generalTabString","datePickerModel","columnFields","inputTextModel","inputModel","getGridColumnByField","updateSegmentField","selectedSegment","createInputElement","HTMLElement","renderGeneralTab","renderPredecessorTab","renderResourceTab","renderCustomTab","renderNotesTab","renderSegmentsTab","segmentGridActionBegin","gridData","preData","itemModel","renderInputElements","isCheckIsDisabled","stringOrNumber","isParentValid","dependencyColumn","taskNameCollection","predecessorEditCollection","updatePredecessorDropDownData","gridActionBegin","autoObj","idCollection","idInput","isEdit_1","preTableCollection","gridData_1","updateResourceCollection","resourceTreeGridId","treeGridId","resourceTreeGrid","tempRecords","rowResource","rowResourceLength","resourceDataLength","resourceColumn","notesColumn","preTaskIds","currentFlatData","tempObject","preDataCollection","taskID","validSuccessorTasks","fromId_1","idIndex","typeText","updateGeneralTab","updatePredecessorTab","updateNotesTab","updateResourceTab","updateCustomTab","updateSegmentsData","newRecords","parentRecordIndex","updateSegmentTaskData","userData","segmentForm","generalForm","tasksData","valueString","updateScheduleProperties","validateUpdateValues","fromRecord","toRecord","predecessorName","newValues","resourceElement","idArray","notesElement","customElement","CHECKBOXFRAME","CHECK","CHECKBOXWRAP","INDETERMINATE","checkAllParent","searchBackIcon","filterBarClearIcon","mobileFilter","clearIcon","popupFullScreen","device","CheckBoxSelection","activeLi","listSelection","setSelectAll","setDeviceSearchBox","getFocus","setReorder","getActiveList","checboxCreate","setPopupFullScreen","listCurrentOptions","filterBarPlaceholder","enableGroupCheckBox","checkboxEle","showSelectAll","selectAllSpan","isDynamicDataChange","selectAllHeight","clearIconElement","filterInputObj","checkWrapper","checkboxWrapper","checkElement","validateCheckNode","isCheck","changeState","frameSpan","selectAllItems","backIcon","mobFilter","clearText","searchBoxHeight","clickOnBackIcon","targetInputElement","refreshListItems","setSearchBoxPosition","backIconElement","clearElement","scrollFocusStatus","inputFocus","updateValueState","tempValues","overAllWrapper","unSelect","selectAllText","unSelectAllText","compiledString","l10nLocale","enableSelectionOrder","activeLiCount","remLi","ulEle_1","activeListItems","focusAtFirstListItem","ConnectorLineEdit","validationPredecessor","confirmPredecessorDialog","initPredecessorValidationDialog","getConnectorLineHoverElement","highlightConnectorLineElements","isOnLine","isArrow","isCriticalLine","isCriticalArrow","connectorLineElement","removeHighlight","addHighlight","criticalElement","getEditedConnectorLineString","lineArray","editedConnectorLineString","lineIndex","lineString","idFromPredecessor","preArray","preIdArray","strArray","predecessorValidation","recordId","visitedIdArray","currentIdArray","fromRootParent","toRootParent","predecessorIdArray","checkParent","checkParentRelation","tempIdArray","checkArray","countFlag","currentIdIndex","state_3","state_2","tempPredecessorString","stringValue","editingData","state_4","renderValidationDialog","validationDialog","validationDialogClose","validationDialogOkButton","validationDialogCancelButton","currentArgs","validateMode","applyPredecessorOption","updateEditedTask","editEventArgs","calculateOffset","removePredecessors","prevPredecessor","isNegativeOffset","preIndex","parentPreIndex","preLength","parentPredecessor","openValidationDialog","contentTemplate","validationDialogTemplate","topContentText","contentdiv","parenttaskData","violationType","recordName","recordNewStartDate","parentName","recordArgs","topContent","innerTable","validateTypes","violatedParent","ganttTaskData","violateType","validateArgs","addRemovePredecessor","newPredecessor","removePredecessorByIndex","confirmOkDeleteButton","confirmCloseDialog","confirmDialog","isFromDeleteMethod","targetedRecords","isNewRecordAdded","isValidatedEditedRecord","updateParentRecords","isaddtoBottom","taskbarMoved","predecessorUpdated","isBreakLoop","deletedTaskDetails","validatedChildItems","renderDeleteConfirmDialog","updateDefaultColumnEditors","customEditorColumns","updateIDColumnEditParams","updateProgessColumnEditParams","updateResourceColumnEditor","updateTaskTypeColumnEditor","editParam","validateDecimalOnType","updateEditParams","getResourceEditor","editor","editObject","showDropDownIcon","delimiterChar","getTaskTypeEditor","ganttPropByMapping","scheduleFieldNames","isScheduleValueUpdated","ganttPropKey","totDuration","sdate","edate","validateScheduleValues","isEffectDriven","validateScheduleByTwoValues","isTaskbarMoved","isMoved","prevDuration","prevDurationUnit","isPredecessorUpdated","isCheckPredecessor","isValidatePredecessor","updateGanttProperties","childRecordIndex","validateObject","validateTaskEvent","editedEventArgs","resetValidateArgs","updateParentChildRecord","updateChildItems","updateParentItemOnEditing","calculateDateByRoundOffDuration","newStartDate","milesStoneCount","resetEditProperties","isRefreshChart","isRefreshGrid","prevTask","copyTaskData","existing","updateScheduleDatesOnEditing","calcEndDate","isRightMove","durationDiff","currentStartDate","getUpdatableChildRecords","initialData","childLists","modifiedTaskData","dataAdaptor","batchUrl","saveSuccess","eLength","_aLength","deleteRecords","updateSharedTask","updateResoures","isTreeGridRefresh","prevResource","currentResource","updateRecord","flatRecords","prevResourceID","addNewRecord","record1","prevLength","removeChildRecord","checkWithUnassignedTask","unassignTaskObj","beforeEditStatus","cAddedRecord","addRecordAsBottom","recordIndex1","updateTreeGridUniqueID","addRecordAsChild","deletedRow","flatParentData","deleteChildRecords","uniqueIDIndex","deleteRecordIDs","removeFromDataSource","flatRecordIndex","deletedRecordCount","getChildCount","childRecordsLength","saveFailed","confirmDeleteOkButton","closeConfirmDialog","deleteSelectedItems","focusingElement","deleteResourceRecords","resourceParent","getCellSelectedRecords","variableType","updateTargetedRecords","taskDetailArray","rowItems","filteredRecord","canDeletePredecessor","removePredecessorOnDelete","delereArgs","deletedRecordCollection","updatedRecordCollection","initiateDeleteAction","toRecordPredcessor","updatePredecessorValues","fromRecordPredcessor","predcessorArray","cId","nId","thisRecord","currentGanttRecord","updatePredecessorOnUpdateId","removeData","dataCollection","updatedData_1","deleteCrud","updateCrud","deleteSuccess","flatIndex","treeGridParentIndex","refreshRecordInImmutableMode","updateUnAssignedResources_1","isDuplicate","newTaskId","prepareNewlyAddedData","newTaskIDmd","taskModel","updateNewlyAddedDataBeforeAjax","pIndex","backUpAndPushNewlyAddedRecord","getVisibleChildRecordCount","updatePredecessorOnIndentOutdent","parentRecordTaskData","updatedPredecessor","predecessorCollections","prdcList","temppredecessorCollection","predecessorToString","tem","currentItemIndex","updatedCollectionIndex","addRowSelectedItem","recordCollectionUpdate","dataChildCount","newlyAddedRecordBackup","taskString","constructTaskAddedEventArgs","newTaskData","addSuccess","dragged","treeIndex","uniqueTaskID","originalIndex","updateRealDataSource","addDataInRealDataSource","updateClientDataFromServer","serverReturnedValue","tempTaskID","cAddedRecord_1","validateTaskPosition","removeAddedRecord","_resetProperties","data_2","updatedData_2","prevID_1","idsIndex","updateNewRecord","insertCrud","data_3","refreshNewlyAddedRecord","createNewRecord","tempRecord","taskSettingsFields","AddRecord","flatRecordsIndex","currentViewDataIndex","getPrevRecordIndex","prevRecord","selectedRecord","indentOutdentRow","thisParent","isByMethod_1","actionArg","reArrangeRows","isByMethod","draggedRec","dragRecords","droppedRec","dLength","deleteDragRow","updateChildRecordLevel","updateChildRecord","dropMiddle","newParentIndex","refreshRecord","queryValue","indentSuccess","indentFailure","indentOutdentSuccess","rowPos","dragRecord","delRow","removeRecords","updateIndentedChildRecords","indentedRecord","createParentItem","recordLevel","levl","currentRec","flatParent","removeChildItem","gridIndx","recordIdx","childItem","isSelectionFromChart","multipleIndexes","addRemoveClass","isContains","isPreventFocus","ganttRow","condition","cellSelectedRecords","highlightSelectedRows","fromChart","getselectedrowsIndex","addClass","removeClass","$popUpElemet","propertyChanged","searchLocalText","cancelItem","getSearchBarElement","textObj","textbox","searchIndex","searchButtonId","adaptiveSearchbar","previousGanttRecord","toolbarDefaultItems","isResouceParent","isDeleteSelected","hideItem","resizeClassList","suppress","Resize","tapped","isDblClk","findColumn","newarray","resizeColumn","footerTable","headerTextClone","contentTextClone","footerTextClone","contentDivTag","footerDivTag","columnIndexByField","indentWidthClone","detailsElement","contentText","footerText","wHeader","wFooter","wContent","columnbyindex","colMaxWidth","frozenMovableColumns","calcTableWidth","contentwidth","offsetWidthValue","refreshHeight","setHandlerHeight","getResizeHandlers","touchResizeStart","callAutoFit","getTargetColumn","refreshColumnWidth","refreshStackedColumnWidth","ftbody","ftr","parentElementWidth","appendHelper","getPointX","minMove","removeHelper","cancelResizeAction","resizeEnd","updateCursor","removeEvents","updateResizeEleHeight","getColData","mousemove","setHelperHeight","finalColumns","getSubColumns","calulateColumnsWidth","finalColumns_1","updateHelper","subColumns","cTable","isFrozenColResized","doubleTapEvent","getStackedWidth","headerRows_1","calcPos","fLeft","timeoutHandler","use","registerLicense","LICIENSE","mounted","token","DecodeJWT","exp","$router","getJobSelecteds","loadData","computed","mapGetters","jobNum","Calculated_IsPreventJob","JobHead_JobNum","checkExist","el1","idx1","TaskName","subtasks","year","JobOper_StartDate","day1","month1","year1","JobOper_DueDate","subduration","absDateTime","JobOper_StartHour","JobOper_DueHour","TaskID","JobOper_OprSeq","JobOper_OpDesc","StartDate","Duration","JobHead_StartDate","JobHead_StartHour","JobHead_DueDate","JobHead_DueHour","JobOper_LoadHour","JobHead_SchedCode","EndDate","day2","month2","year2","day3","month3","year3","RealStartDate","bgColor"],"mappings":"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","file":"js/chunk-4d99f314.2008b9f6.js","sourcesContent":["export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OperationTimeline.vue?vue&type=style&index=0&id=091938f2&prod&lang=scss\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.isLoaded1)?_c('ejs-gantt',{ref:\"gantt\",attrs:{\"id\":\"GanttContainer\",\"dataSource\":_vm.data,\"taskFields\":_vm.taskFields,\"columns\":_vm.columns,\"height\":'100vh',\"treeColumnIndex\":1,\"editSettings\":_vm.editSettings,\"loadChildOnDemand\":false,\"toolbar\":_vm.toolbar,\"taskMode\":_vm.taskMode,\"allowResizing\":true}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Defines types of Cell\n *\n * @hidden\n */\nexport var CellType;\n(function (CellType) {\n /** Defines CellType as Data */\n CellType[CellType[\"Data\"] = 0] = \"Data\";\n /** Defines CellType as Header */\n CellType[CellType[\"Header\"] = 1] = \"Header\";\n /** Defines CellType as Summary */\n CellType[CellType[\"Summary\"] = 2] = \"Summary\";\n /** Defines CellType as GroupSummary */\n CellType[CellType[\"GroupSummary\"] = 3] = \"GroupSummary\";\n /** Defines CellType as CaptionSummary */\n CellType[CellType[\"CaptionSummary\"] = 4] = \"CaptionSummary\";\n /** Defines CellType as Filter */\n CellType[CellType[\"Filter\"] = 5] = \"Filter\";\n /** Defines CellType as Indent */\n CellType[CellType[\"Indent\"] = 6] = \"Indent\";\n /** Defines CellType as GroupCaption */\n CellType[CellType[\"GroupCaption\"] = 7] = \"GroupCaption\";\n /** Defines CellType as GroupCaptionEmpty */\n CellType[CellType[\"GroupCaptionEmpty\"] = 8] = \"GroupCaptionEmpty\";\n /** Defines CellType as Expand */\n CellType[CellType[\"Expand\"] = 9] = \"Expand\";\n /** Defines CellType as HeaderIndent */\n CellType[CellType[\"HeaderIndent\"] = 10] = \"HeaderIndent\";\n /** Defines CellType as StackedHeader */\n CellType[CellType[\"StackedHeader\"] = 11] = \"StackedHeader\";\n /** Defines CellType as DetailHeader */\n CellType[CellType[\"DetailHeader\"] = 12] = \"DetailHeader\";\n /** Defines CellType as DetailExpand */\n CellType[CellType[\"DetailExpand\"] = 13] = \"DetailExpand\";\n /** Defines CellType as CommandColumn */\n CellType[CellType[\"CommandColumn\"] = 14] = \"CommandColumn\";\n /** Defines CellType as DetailFooterIntent */\n CellType[CellType[\"DetailFooterIntent\"] = 15] = \"DetailFooterIntent\";\n /** Defines CellType as RowDrag */\n CellType[CellType[\"RowDragIcon\"] = 16] = \"RowDragIcon\";\n /** Defines CellType as RowDragHeader */\n CellType[CellType[\"RowDragHIcon\"] = 17] = \"RowDragHIcon\";\n})(CellType || (CellType = {}));\n/**\n * Defines types of Render\n *\n * @hidden\n */\nexport var RenderType;\n(function (RenderType) {\n /** Defines RenderType as Header */\n RenderType[RenderType[\"Header\"] = 0] = \"Header\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Summary */\n RenderType[RenderType[\"Summary\"] = 2] = \"Summary\";\n})(RenderType || (RenderType = {}));\n/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Print\"] = 5] = \"Print\";\n ToolbarItem[ToolbarItem[\"Search\"] = 6] = \"Search\";\n ToolbarItem[ToolbarItem[\"ColumnChooser\"] = 7] = \"ColumnChooser\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 8] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"WordExport\"] = 11] = \"WordExport\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines types of responsive dialogs\n *\n * @hidden\n */\nexport var ResponsiveDialogAction;\n(function (ResponsiveDialogAction) {\n /** Defines dialog type as Edit */\n ResponsiveDialogAction[ResponsiveDialogAction[\"isEdit\"] = 0] = \"isEdit\";\n /** Defines dialog type as Add */\n ResponsiveDialogAction[ResponsiveDialogAction[\"isAdd\"] = 1] = \"isAdd\";\n /** Defines dialog type as Sort */\n ResponsiveDialogAction[ResponsiveDialogAction[\"isSort\"] = 2] = \"isSort\";\n /** Defines dialog type as Filter */\n ResponsiveDialogAction[ResponsiveDialogAction[\"isFilter\"] = 3] = \"isFilter\";\n})(ResponsiveDialogAction || (ResponsiveDialogAction = {}));\n/**\n * Defines responsive toolbar actions\n *\n * @hidden\n */\nexport var ResponsiveToolbarAction;\n(function (ResponsiveToolbarAction) {\n /** Defines initial responsive toolbar buttons */\n ResponsiveToolbarAction[ResponsiveToolbarAction[\"isInitial\"] = 0] = \"isInitial\";\n /** Defines responsive toolbar search */\n ResponsiveToolbarAction[ResponsiveToolbarAction[\"isSearch\"] = 1] = \"isSearch\";\n})(ResponsiveToolbarAction || (ResponsiveToolbarAction = {}));\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization, setCulture } from '@syncfusion/ej2-base';\n/**\n * ValueFormatter class to globalize the value.\n *\n * @hidden\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n if (!isNullOrUndefined(cultureName)) {\n this.intl.culture = cultureName;\n }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n ValueFormatter.prototype.getParserFunction = function (format) {\n if (format.type) {\n return this.intl.getDateParser(format);\n }\n else {\n return this.intl.getNumberParser(format);\n }\n };\n ValueFormatter.prototype.fromView = function (value, format, type) {\n if ((type === 'date' || type === 'datetime' || type === 'number') && (!isNullOrUndefined(format))) {\n return format(value);\n }\n else {\n return value;\n }\n };\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n ValueFormatter.prototype.setCulture = function (cultureName) {\n if (!isNullOrUndefined(cultureName)) {\n setCulture(cultureName);\n }\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, isNullOrUndefined, extend, Property } from '@syncfusion/ej2-base';\nimport { Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getUid, templateCompiler, getForeignData, getObject } from '../base/util';\n/**\n * Represents Grid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options, parent) {\n var _this = this;\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowGrouping` set to false, then it disables grouping of a particular column.\n * By default all columns are groupable.\n *\n * @default true\n */\n this.allowGrouping = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `enableGroupByFormat` set to true, then it groups the particular column by formatted values.\n *\n * @default true\n */\n this.enableGroupByFormat = false;\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu or checkbox.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n * {% codeBlock src=\"grid/filter-menu-api/index.ts\" %}{% endcodeBlock %}\n *\n * > Check the [`Filter UI`](../../grid/filtering/filter-menu/#custom-component-in-filter-menu) for its customization.\n *\n * @default {}\n */\n this.filter = {};\n /**\n * If `showInColumnChooser` set to false, then hide the particular column in column chooser.\n * By default all columns are displayed in column Chooser.\n *\n * @default true\n */\n this.showInColumnChooser = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `allowSearching` set to false, then it disables Searching of a particular column.\n * By default all columns allow Searching.\n *\n * @default true\n */\n this.allowSearching = true;\n /**\n * If `autoFit` set to true, then the particular column content width will be\n * adjusted based on its content in the initial rendering itself.\n * Setting this property as true is equivalent to calling `autoFitColumns` method in the `dataBound` event.\n *\n * @default false\n */\n this.autoFit = false;\n this.sortDirection = 'Descending';\n /**\n * @returns {Function} returns the edit template\n * @hidden */\n this.getEditTemplate = function () { return _this.editTemplateFn; };\n /**\n * @returns {Function} returns the filter template\n * @hidden */\n this.getFilterTemplate = function () { return _this.filterTemplateFn; };\n merge(this, options);\n this.parent = parent;\n if (this.type === 'none') {\n this.type = null;\n }\n else if (this.type) {\n this.type = typeof (this.type) === 'string' ? this.type.toLowerCase() : undefined;\n }\n if (this.editType) {\n this.editType = this.editType.toLowerCase();\n }\n if (isNullOrUndefined(this.uid)) {\n this.uid = getUid('grid-column');\n }\n var valueFormatter = new ValueFormatter();\n if (options.format && (options.format.skeleton || (options.format.format &&\n typeof options.format.format === 'string'))) {\n this.setFormatter(valueFormatter.getFormatFunction(extend({}, options.format)));\n this.setParser(valueFormatter.getParserFunction(options.format));\n }\n this.toJSON = function () {\n var col = {};\n var skip = ['filter', 'dataSource', 'headerText', 'template', 'headerTemplate', 'edit',\n 'editTemplate', 'filterTemplate', 'commandsTemplate', 'parent'];\n var keys = Object.keys(_this);\n for (var i = 0; i < keys.length; i++) {\n if (keys[parseInt(i.toString(), 10)] === 'columns') {\n col[keys[parseInt(i.toString(), 10)]] = [];\n for (var j = 0; j < _this[keys[parseInt(i.toString(), 10)]].length; j++) {\n col[keys[parseInt(i.toString(), 10)]].push(_this[keys[parseInt(i.toString(), 10)]][parseInt(j.toString(), 10)].toJSON());\n }\n }\n else if (skip.indexOf(keys[parseInt(i.toString(), 10)]) < 0) {\n col[keys[parseInt(i.toString(), 10)]] = _this[keys[parseInt(i.toString(), 10)]];\n }\n }\n return col;\n };\n if (!this.field) {\n this.allowFiltering = false;\n this.allowGrouping = false;\n this.allowSorting = false;\n if (this.columns) {\n this.allowResizing = this.columns.some(function (col) {\n return col.allowResizing;\n });\n }\n }\n if (this.commands && !this.textAlign) {\n this.textAlign = 'Right';\n }\n if (this.template || this.commandsTemplate) {\n this.templateFn = templateCompiler(this.template || this.commandsTemplate);\n }\n if (this.headerTemplate) {\n this.headerTemplateFn = templateCompiler(this.headerTemplate);\n }\n if (!isNullOrUndefined(this.filter) && this.filter.itemTemplate) {\n this.fltrTemplateFn = templateCompiler(this.filter.itemTemplate);\n }\n if (this.editTemplate) {\n this.editTemplateFn = templateCompiler(this.editTemplate);\n }\n if (this.filterTemplate) {\n this.filterTemplateFn = templateCompiler(this.filterTemplate);\n }\n if (this.isForeignColumn() &&\n (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit' || this.editType === 'defaultedit')) {\n this.editType = 'dropdownedit';\n if (this.edit.params && this.edit.params.dataSource) {\n this.edit.params.ddEditedData = true;\n }\n this.edit.params = extend({\n dataSource: this.dataSource,\n query: new Query(), fields: { value: this.foreignKeyField || this.field, text: this.foreignKeyValue }\n }, this.edit.params);\n }\n if (this.sortComparer) {\n var a_1 = this.sortComparer;\n this.sortComparer = function (x, y, xObj, yObj) {\n if (typeof a_1 === 'string') {\n a_1 = getObject(a_1, window);\n }\n if (_this.sortDirection === 'Descending') {\n var z = x;\n x = y;\n y = z;\n var obj = xObj;\n xObj = yObj;\n yObj = obj;\n }\n return a_1(x, y, xObj, yObj);\n };\n }\n if (!this.sortComparer && this.isForeignColumn()) {\n this.sortComparer = function (x, y) {\n x = getObject(_this.foreignKeyValue, getForeignData(_this, {}, x)[0]);\n y = getObject(_this.foreignKeyValue, getForeignData(_this, {}, y)[0]);\n return _this.sortDirection === 'Descending' ? DataUtil.fnDescending(x, y) : DataUtil.fnAscending(x, y);\n };\n }\n }\n /**\n * @returns {string} returns the sort direction\n * @hidden */\n Column.prototype.getSortDirection = function () {\n return this.sortDirection;\n };\n /**\n * @param {string} direction - specifies the direction\n * @returns {void}\n * @hidden\n */\n Column.prototype.setSortDirection = function (direction) {\n this.sortDirection = direction;\n };\n /**\n * @returns {freezeTable} returns the FreezeTable\n * @hidden */\n Column.prototype.getFreezeTableName = function () {\n return this.freezeTable;\n };\n /**\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[parseInt(i.toString(), 10)]] = column[keys[parseInt(i.toString(), 10)]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent.isReact) {\n if (keys[parseInt(i.toString(), 10)] === 'template') {\n this.templateFn = templateCompiler(column[keys[parseInt(i.toString(), 10)]]);\n this.parent.refreshReactColumnTemplateByUid(this.uid, true);\n }\n else if (keys[parseInt(i.toString(), 10)] === 'headerTemplate') {\n this.headerTemplateFn = templateCompiler(column[keys[parseInt(i.toString(), 10)]]);\n this.parent.refreshReactHeaderTemplateByUid(this.uid);\n }\n else if (keys[parseInt(i.toString(), 10)] === 'editTemplate') {\n this.editTemplateFn = templateCompiler(column[keys[parseInt(i.toString(), 10)]]);\n }\n }\n }\n };\n /**\n * @returns {boolean} returns true for foreign column\n * @hidden\n * It defines the column is foreign key column or not.\n */\n Column.prototype.isForeignColumn = function () {\n return !!(this.dataSource && this.foreignKeyValue);\n };\n /**\n * @returns {Function} returns the function\n * @hidden\n */\n Column.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Function} value - specifies the value\n * @returns {void}\n * @hidden\n */\n Column.prototype.setFormatter = function (value) {\n this.formatFn = value;\n };\n /**\n * @returns {Function} returns the function\n * @hidden */\n Column.prototype.getParser = function () {\n return this.parserFn;\n };\n /**\n * @param {Function} value - specifies the value\n * @returns {void}\n * @hidden\n */\n Column.prototype.setParser = function (value) {\n this.parserFn = value;\n };\n /**\n * @returns {Function} returns the function\n * @hidden */\n Column.prototype.getColumnTemplate = function () {\n return this.templateFn;\n };\n /**\n * @returns {Function} returns the function\n * @hidden */\n Column.prototype.getHeaderTemplate = function () {\n return this.headerTemplateFn;\n };\n /**\n * @returns {Function} returns the function\n * @hidden */\n Column.prototype.getFilterItemTemplate = function () {\n return this.fltrTemplateFn;\n };\n /**\n * @returns {string} returns the string\n * @hidden */\n Column.prototype.getDomSetter = function () {\n return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n };\n return Column;\n}());\nexport { Column };\n/**\n * Define options for custom command buttons.\n */\nvar CommandColumnModel = /** @class */ (function () {\n function CommandColumnModel() {\n }\n __decorate([\n Property()\n ], CommandColumnModel.prototype, \"title\", void 0);\n __decorate([\n Property()\n ], CommandColumnModel.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], CommandColumnModel.prototype, \"buttonOption\", void 0);\n return CommandColumnModel;\n}());\nexport { CommandColumnModel };\n/**\n * Defines Grid column\n */\nvar GridColumn = /** @class */ (function (_super) {\n __extends(GridColumn, _super);\n function GridColumn() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], GridColumn.prototype, \"columns\", void 0);\n return GridColumn;\n}(Column));\nexport { GridColumn };\n/**\n * Defines stacked grid column\n */\nvar StackedColumn = /** @class */ (function (_super) {\n __extends(StackedColumn, _super);\n function StackedColumn() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return StackedColumn;\n}(GridColumn));\nexport { StackedColumn };\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var headerCellInfo = 'headerCellInfo';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var cellSelecting = 'cellSelecting';\n/** @hidden */\nexport var cellSelected = 'cellSelected';\n/** @hidden */\nexport var cellDeselecting = 'cellDeselecting';\n/** @hidden */\nexport var cellDeselected = 'cellDeselected';\n/** @hidden */\nexport var columnSelecting = 'columnSelecting';\n/** @hidden */\nexport var columnSelected = 'columnSelected';\n/** @hidden */\nexport var columnDeselecting = 'columnDeselecting';\n/** @hidden */\nexport var columnDeselected = 'columnDeselected';\n/** @hidden */\nexport var columnDragStart = 'columnDragStart';\n/** @hidden */\nexport var columnDrag = 'columnDrag';\n/** @hidden */\nexport var columnDrop = 'columnDrop';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var beforePrint = 'beforePrint';\n/** @hidden */\nexport var printComplete = 'printComplete';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var endAdd = 'endAdd';\n/** @hidden */\nexport var endDelete = 'endDelete';\n/** @hidden */\nexport var endEdit = 'endEdit';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var recordClick = 'recordClick';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var beforeOpenColumnChooser = 'beforeOpenColumnChooser';\n/** @hidden */\nexport var beforeOpenAdaptiveDialog = 'beforeOpenAdaptiveDialog';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var onResize = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var checkBoxChange = 'checkBoxChange';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var beforeAutoFill = 'beforeAutoFill';\n/** @hidden */\nexport var filterChoiceRequest = 'filterchoicerequest';\n/** @hidden */\nexport var filterAfterOpen = 'filterafteropen';\n/** @hidden */\nexport var filterBeforeOpen = 'filterbeforeopen';\n/** @hidden */\nexport var filterSearchBegin = 'filtersearchbegin';\n/** @hidden */\nexport var commandClick = 'commandClick';\n/** @hidden */\nexport var exportGroupCaption = 'exportGroupCaption';\n/** @hidden */\nexport var lazyLoadGroupExpand = 'lazyLoadGroupExpand';\n/** @hidden */\nexport var lazyLoadGroupCollapse = 'lazyLoadGroupCollapse';\n/**\n * Specifies grid internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var onEmpty = 'on-empty';\n/** @hidden */\nexport var inBoundModelChanged = 'inbound-model-changed';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var colGroupRefresh = 'colgroup-refresh';\n/** @hidden */\nexport var headerRefreshed = 'header-refreshed';\n/** @hidden */\nexport var pageBegin = 'paging-begin';\n/** @hidden */\nexport var pageComplete = 'paging-complete';\n/** @hidden */\nexport var sortBegin = 'sorting-begin';\n/** @hidden */\nexport var sortComplete = 'sorting-complete';\n/** @hidden */\nexport var filterBegin = 'filtering-begin';\n/** @hidden */\nexport var filterComplete = 'filtering-complete';\n/** @hidden */\nexport var searchBegin = 'searching-begin';\n/** @hidden */\nexport var searchComplete = 'searching-complete';\n/** @hidden */\nexport var reorderBegin = 'reorder-begin';\n/** @hidden */\nexport var reorderComplete = 'reorder-complete';\n/** @hidden */\nexport var rowDragAndDropBegin = 'rowdraganddrop-begin';\n/** @hidden */\nexport var rowDragAndDropComplete = 'rowdraganddrop-complete';\n/** @hidden */\nexport var groupBegin = 'grouping-begin';\n/** @hidden */\nexport var groupComplete = 'grouping-complete';\n/** @hidden */\nexport var ungroupBegin = 'ungrouping-begin';\n/** @hidden */\nexport var ungroupComplete = 'ungrouping-complete';\n/** @hidden */\nexport var groupAggregates = 'group-aggregates';\n/** @hidden */\nexport var refreshFooterRenderer = 'refresh-footer-rendered';\n/** @hidden */\nexport var refreshAggregateCell = 'refresh-aggregate-cell';\n/** @hidden */\nexport var refreshAggregates = 'refresh-aggregates';\n/** @hidden */\nexport var rowSelectionBegin = 'rowselecting';\n/** @hidden */\nexport var rowSelectionComplete = 'rowselected';\n/** @hidden */\nexport var columnSelectionBegin = 'columnselecting';\n/** @hidden */\nexport var columnSelectionComplete = 'columnselected';\n/** @hidden */\nexport var cellSelectionBegin = 'cellselecting';\n/** @hidden */\nexport var cellSelectionComplete = 'cellselected';\n/** @hidden */\nexport var beforeCellFocused = 'beforecellfocused';\n/** @hidden */\nexport var cellFocused = 'cellfocused';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var click = 'click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var columnVisibilityChanged = 'column-visible-changed';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var columnWidthChanged = 'column-width-changed';\n/** @hidden */\nexport var columnPositionChanged = 'column-position-changed';\n/** @hidden */\nexport var rowDragAndDrop = 'row-drag-and-drop';\n/** @hidden */\nexport var rowsAdded = 'rows-added';\n/** @hidden */\nexport var rowsRemoved = 'rows-removed';\n/** @hidden */\nexport var columnDragStop = 'column-drag-stop';\n/** @hidden */\nexport var headerDrop = 'header-drop';\n/** @hidden */\nexport var dataSourceModified = 'datasource-modified';\n/** @hidden */\nexport var refreshComplete = 'refresh-complete';\n/** @hidden */\nexport var refreshVirtualBlock = 'refresh-virtual-block';\n/** @hidden */\nexport var dblclick = 'dblclick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var bulkSave = 'bulk-save';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var tooltipDestroy = 'tooltip-destroy';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var editBegin = 'edit-begin';\n/** @hidden */\nexport var editComplete = 'edit-complete';\n/** @hidden */\nexport var addBegin = 'add-begin';\n/** @hidden */\nexport var addComplete = 'add-complete';\n/** @hidden */\nexport var saveComplete = 'save-complete';\n/** @hidden */\nexport var deleteBegin = 'delete-begin';\n/** @hidden */\nexport var deleteComplete = 'delete-complete';\n/** @hidden */\nexport var preventBatch = 'prevent-batch';\n/** @hidden */\nexport var dialogDestroy = 'dialog-destroy';\n/** @hidden */\nexport var crudAction = 'crud-Action';\n/** @hidden */\nexport var addDeleteAction = 'add-delete-Action';\n/** @hidden */\nexport var destroyForm = 'destroy-form';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var excelExportComplete = 'excelExportComplete';\n/** @hidden */\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\nexport var excelHeaderQueryCellInfo = 'excelHeaderQueryCellInfo';\n/** @hidden */\nexport var exportDetailDataBound = 'exportDetailDataBound';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var pdfExportComplete = 'pdfExportComplete';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\nexport var pdfHeaderQueryCellInfo = 'pdfHeaderQueryCellInfo';\n/** @hidden */\nexport var accessPredicate = 'access-predicate';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var freezeRender = 'freezerender';\n/** @hidden */\nexport var freezeRefresh = 'freezerefresh';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var columnMenuClick = 'columnMenuClick';\n/** @hidden */\nexport var columnMenuOpen = 'columnMenuOpen';\n/** @hidden */\nexport var filterOpen = 'filterOpen';\n/** @hidden */\nexport var filterDialogCreated = 'filterDialogCreated';\n/** @hidden */\nexport var filterMenuClose = 'filter-menu-close';\n/** @hidden */\nexport var initForeignKeyColumn = 'initForeignKeyColumn';\n/** @hidden */\nexport var getForeignKeyData = 'getForeignKeyData';\n/** @hidden */\nexport var generateQuery = 'generateQuery';\n/** @hidden */\nexport var showEmptyGrid = 'showEmptyGrid';\n/** @hidden */\nexport var foreignKeyData = 'foreignKeyData';\n/** @hidden */\nexport var columnDataStateChange = 'columnDataStateChange';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var dataSourceChanged = 'dataSourceChanged';\n/** @hidden */\nexport var rtlUpdated = 'rtl-updated';\n/** @hidden */\nexport var beforeFragAppend = 'beforeFragAppend';\n/** @hidden */\nexport var frozenHeight = 'frozenHeight';\n/** @hidden */\nexport var textWrapRefresh = 'textWrapRefresh';\n/** @hidden */\nexport var recordAdded = 'recordAdded';\n/** @hidden */\nexport var cancelBegin = 'cancel-Begin';\n/** @hidden */\nexport var editNextValCell = 'editNextValCell';\n/** @hidden */\nexport var hierarchyPrint = 'hierarchyprint';\n/** @hidden */\nexport var expandChildGrid = 'expandchildgrid';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var exportRowDataBound = 'export-RowDataBound';\n/** @hidden */\nexport var exportDataBound = 'export-DataBound';\n/** @hidden */\nexport var rowPositionChanged = 'row-position-changed';\n/** @hidden */\nexport var columnChooserOpened = 'columnChooserOpened';\n/** @hidden */\nexport var batchForm = 'batchedit-form';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var partialRefresh = 'partial-refresh';\n/** @hidden */\nexport var beforeCustomFilterOpen = 'beforeCustomFilterOpen';\n/** @hidden */\nexport var selectVirtualRow = 'select-virtual-Row';\n/** @hidden */\nexport var columnsPrepared = 'columns-prepared';\n/** @hidden */\nexport var cBoxFltrBegin = 'cbox-filter-begin';\n/** @hidden */\nexport var cBoxFltrComplete = 'cbox-filter-complete';\n/** @hidden */\nexport var fltrPrevent = 'filter-Prevent';\n/** @hidden */\nexport var beforeFltrcMenuOpen = 'before-filter-cmenu-open';\n/** @hidden */\nexport var valCustomPlacement = 'validation-custom-placement';\n/** @hidden */\nexport var filterCboxValue = 'filter-cbox-value';\n/** @hidden */\nexport var componentRendered = 'component-rendered';\n/** @hidden */\nexport var restoreFocus = 'restore-Focus';\n/** @hidden */\nexport var detailStateChange = 'detail-state-change';\n/** @hidden */\nexport var detailIndentCellInfo = 'detail-indentcell-info';\n/** @hidden */\nexport var virtaulKeyHandler = 'virtaul-key-handler';\n/** @hidden */\nexport var virtaulCellFocus = 'virtaul-cell-focus';\n/** @hidden */\nexport var virtualScrollEditActionBegin = 'virtual-scroll-edit-action-begin';\n/** @hidden */\nexport var virtualScrollEditSuccess = 'virtual-scroll-edit-success';\n/** @hidden */\nexport var virtualScrollEditCancel = 'virtual-scroll-edit-cancel';\n/** @hidden */\nexport var virtualScrollEdit = 'virtual-scroll-edit';\n/** @hidden */\nexport var refreshVirtualCache = 'refresh-virtual-cache';\n/** @hidden */\nexport var editReset = 'edit-reset';\n/** @hidden */\nexport var virtualScrollAddActionBegin = 'virtual-scroll-add-action-begin';\n/** @hidden */\nexport var getVirtualData = 'get-virtual-data';\n/** @hidden */\nexport var refreshInfiniteModeBlocks = 'refresh-infinite-mode-blocks';\n/** @hidden */\nexport var resetInfiniteBlocks = 'reset-infinite-blocks';\n/** @hidden */\nexport var infiniteScrollHandler = 'infinite-scroll-handler';\n/** @hidden */\nexport var infinitePageQuery = 'infinite-page-query';\n/** @hidden */\nexport var infiniteShowHide = 'infinite-show-hide';\n/** @hidden */\nexport var appendInfiniteContent = 'append-infinite-content';\n/** @hidden */\nexport var removeInfiniteRows = 'remove-infinite-rows';\n/** @hidden */\nexport var setInfiniteCache = 'set-infinite-cache';\n/** @hidden */\nexport var infiniteEditHandler = 'infinite-edit-handler';\n/** @hidden */\nexport var initialCollapse = 'initial-collapse';\n/** @hidden */\nexport var getAggregateQuery = 'get-aggregate-query';\n/** @hidden */\nexport var closeFilterDialog = 'close-filter-dialog';\n/** @hidden */\nexport var columnChooserCancelBtnClick = 'columnChooserCancelBtnClick';\n/** @hidden */\nexport var getFilterBarOperator = 'get-filterbar-operator';\n/** @hidden */\nexport var resetColumns = 'reset-columns';\n/** @hidden */\nexport var pdfAggregateQueryCellInfo = 'pdfAggregateQueryCellInfo';\n/** @hidden */\nexport var excelAggregateQueryCellInfo = 'excelAggregateQueryCellInfo';\n/** @hidden */\nexport var setGroupCache = 'group-cache';\n/** @hidden */\nexport var lazyLoadScrollHandler = 'lazy-load-scroll-handler';\n/** @hidden */\nexport var groupCollapse = 'group-collapse';\n/** @hidden */\nexport var beforeCheckboxRenderer = 'beforeCheckboxRenderer';\n/** @hidden */\nexport var refreshHandlers = 'refreshResizeHandlers';\n/** @hidden */\nexport var refreshFrozenColumns = 'refresh-frozen-columns';\n/** @hidden */\nexport var setReorderDestinationElement = 'set-reorder-destination-element';\n/** @hidden */\nexport var refreshVirtualFrozenHeight = 'refresh-virtual-frozen-height';\n/** @hidden */\nexport var setFreezeSelection = 'set-freeze-selection';\n/** @hidden */\nexport var setInfiniteFrozenHeight = 'set-infinite-frozen-height';\n/** @hidden */\nexport var setInfiniteColFrozenHeight = 'set-infinite-col-frozen-height';\n/** @hidden */\nexport var beforeRefreshOnDataChange = 'before-refresh-on-data-change';\n/** @hidden */\nexport var immutableBatchCancel = 'immutable-batch-cancel';\n/** @hidden */\nexport var refreshVirtualFrozenRows = 'refresh-virtual-frozenrows';\n/** @hidden */\nexport var checkScrollReset = 'check-scroll-reset';\n/** @hidden */\nexport var refreshFrozenHeight = 'refresh-frozen-height';\n/** @hidden */\nexport var setHeightToFrozenElement = 'set-height-to-frozen-element';\n/** @hidden */\nexport var preventFrozenScrollRefresh = 'prevent-frozen-scroll-refresh';\n/** @hidden */\nexport var nextCellIndex = 'next-cell-index';\n/** @hidden */\nexport var refreshInfiniteCurrentViewData = 'refresh-infinite-current-view-data';\n/** @hidden */\nexport var infiniteCrudCancel = 'infinite-crud-cancel';\n/** @hidden */\nexport var filterDialogClose = 'filter-dialog-close';\n/** @hidden */\nexport var refreshCustomFilterOkBtn = 'refresh-cutsom-filter-ok-button';\n/** @hidden */\nexport var refreshCustomFilterClearBtn = 'refresh-cutsom-filter-clear-button';\n/** @hidden */\nexport var renderResponsiveCmenu = 'render-responsive-cmenu';\n/** @hidden */\nexport var filterCmenuSelect = 'filter-cmenu-select';\n/** @hidden */\nexport var customFilterClose = 'custom-filter-close';\n/** @hidden */\nexport var setFullScreenDialog = 'set-fullscreen-dialog';\n/** @hidden */\nexport var refreshExpandandCollapse = 'refresh-Expand-and-Collapse';\n/** @hidden */\nexport var rowModeChange = 'row-mode-change';\n/** @hidden */\nexport var enterKeyHandler = 'enter-key-handler';\n/** @hidden */\nexport var refreshVirtualMaxPage = 'refresh-virtual-max-page';\n/** @hidden */\nexport var setVirtualPageQuery = 'set-virtual-page-query';\n/** @hidden */\nexport var selectRowOnContextOpen = 'select-row-on-context-open';\n/** @hidden */\nexport var pagerRefresh = 'pager-refresh';\n/** @hidden */\nexport var closeInline = 'closeinline';\n/** @hidden */\nexport var closeBatch = 'closebatch';\n/** @hidden */\nexport var closeEdit = 'close-edit';\n/** @hidden */\nexport var resetVirtualFocus = 'reset-virtual-focus';\n/** @hidden */\nexport var afterContentRender = 'after-content-renderer';\n/** @hidden */\nexport var refreshVirtualEditFormCells = 'refresh-virtual-editform-cells';\n/** @hidden */\nexport var scrollToEdit = 'scroll-to-edit';\n/** @hidden */\nexport var beforeCheckboxRendererQuery = 'before-checkbox-renderer-query';\n/** @hidden */\nexport var createVirtualValidationForm = 'create-virtual-validation-form';\n/** @hidden */\nexport var validateVirtualForm = 'validate-virtual-form';\n/** @hidden */\nexport var destroyChildGrid = 'destroy-child-grid';\n/** @hidden */\nexport var stickyScrollComplete = 'sticky-scroll-complete';\n/** @hidden */\nexport var captionActionComplete = 'infinite-group-collapse';\n/** @hidden */\nexport var refreshInfinitePersistSelection = 'refresh-infinite-persist-selection';\n/** @hidden */\nexport var refreshInfiniteEditrowindex = 'refresh-infinite-editrowindex';\n/** @hidden */\nexport var afterFilterColumnMenuClose = 'after-filter-column-menu-close';\n/** @hidden */\nexport var beforeCheckboxfilterRenderer = 'beforeCheckboxfilterRenderer';\n/** @hidden */\nexport var commandColumnDestroy = 'commandColumnDestroy';\n/** @hidden */\nexport var batchCnfrmDlgCancel = 'cancelcnfrmDlg';\n/** @hidden */\nexport var refreshVirtualLazyLoadCache = 'refresh-Virtual-LazyLoad-Cache';\n","/* tslint:disable-next-line:max-line-length */\nimport { EventHandler, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, appendChildren, getDatePredicate, getObject, extendObjWithFn, eventPromise, setChecked, clearReactVueTemplates, padZero } from '../base/util';\nimport { remove, debounce, Internationalization, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getForeignData } from '../base/util';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { getFilterMenuPostion, toogleCheckbox, createCboxWithWrap, removeAddCboxClasses, getColumnByForeignKeyValue } from '../base/util';\n/**\n * @hidden\n * `CheckBoxFilterBase` module is used to handle filtering action.\n */\nvar CheckBoxFilterBase = /** @class */ (function () {\n /**\n * Constructor for checkbox filtering module\n *\n * @param {IXLFilter} parent - specifies the IXLFilter\n * @hidden\n */\n function CheckBoxFilterBase(parent) {\n this.isExecuteLocal = false;\n this.existingPredicate = {};\n this.foreignKeyQuery = new Query();\n /** @hidden */\n this.filterState = true;\n this.values = {};\n this.renderEmpty = false;\n this.isCheckboxFilterTemplate = false;\n this.parent = parent;\n this.id = this.parent.element.id;\n this.valueFormatter = new ValueFormatter(this.parent.locale);\n this.cBoxTrue = createCheckBox(this.parent.createElement, false, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n this.cBoxTrue.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden', attrs: { 'type': 'checkbox' }\n }), this.cBoxFalse.firstChild);\n this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n if (this.parent.enableRtl) {\n addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n }\n if (this.parent.cssClass) {\n if (this.parent.cssClass.indexOf(' ') !== -1) {\n addClass([this.cBoxTrue, this.cBoxFalse], this.parent.cssClass.split(' '));\n }\n else {\n addClass([this.cBoxTrue, this.cBoxFalse], [this.parent.cssClass]);\n }\n }\n }\n /**\n * @returns {void}\n * @hidden\n */\n CheckBoxFilterBase.prototype.destroy = function () {\n this.closeDialog();\n };\n CheckBoxFilterBase.prototype.wireEvents = function () {\n EventHandler.add(this.dlg, 'click', this.clickHandler, this);\n EventHandler.add(this.dlg, 'keyup', this.keyupHandler, this);\n this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n var elem = this.dialogObj.element.querySelector('.e-searchinput');\n if (elem) {\n EventHandler.add(elem, 'keyup', this.searchHandler, this);\n }\n };\n CheckBoxFilterBase.prototype.unWireEvents = function () {\n EventHandler.remove(this.dlg, 'click', this.clickHandler);\n EventHandler.remove(this.dlg, 'keyup', this.keyupHandler);\n var elem = this.dialogObj.element.querySelector('.e-searchinput');\n if (elem) {\n EventHandler.remove(elem, 'keyup', this.searchHandler);\n }\n };\n CheckBoxFilterBase.prototype.foreignKeyFilter = function (args, fColl, mPredicate) {\n var _this = this;\n var fPredicate = {};\n var filterCollection = [];\n var query = this.foreignKeyQuery.clone();\n this.options.column.dataSource.\n executeQuery(query.where(mPredicate)).then(function (e) {\n _this.options.column.columnData = e.result;\n _this.parent.notify(events.generateQuery, { predicate: fPredicate, column: _this.options.column });\n args.ejpredicate = fPredicate.predicate.predicates;\n var fpred = fPredicate.predicate.predicates;\n for (var i = 0; i < fpred.length; i++) {\n filterCollection.push({\n field: fpred[parseInt(i.toString(), 10)].field,\n predicate: 'or',\n matchCase: fpred[parseInt(i.toString(), 10)].ignoreCase,\n ignoreAccent: fpred[parseInt(i.toString(), 10)].ignoreAccent,\n operator: fpred[parseInt(i.toString(), 10)].operator,\n value: fpred[parseInt(i.toString(), 10)].value,\n type: _this.options.type\n });\n }\n args.filterCollection = filterCollection.length ? filterCollection :\n fColl.filter(function (col) { return col.field = _this.options.field; });\n _this.options.handler(args);\n });\n };\n CheckBoxFilterBase.prototype.foreignFilter = function (args, value) {\n var operator = this.options.isRemote ?\n (this.options.column.type === 'string' ? 'contains' : 'equal') : (this.options.column.type ? 'contains' : 'equal');\n var initalPredicate = new Predicate(this.options.column.foreignKeyValue, operator, value, true, this.options.ignoreAccent);\n this.foreignKeyFilter(args, [args.filterCollection], initalPredicate);\n };\n CheckBoxFilterBase.prototype.searchBoxClick = function (e) {\n var target = e.target;\n if (target.classList.contains('e-searchclear')) {\n this.sInput.value = target.classList.contains('e-chkcancel-icon') ? '' : this.sInput.value;\n if (this.isCheckboxFilterTemplate) {\n this.parent.notify('refreshCheckbox', { event: e });\n }\n else {\n this.refreshCheckboxes();\n }\n this.updateSearchIcon();\n this.sInput.focus();\n }\n };\n CheckBoxFilterBase.prototype.searchBoxKeyUp = function (e) {\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === 'Shimmer') {\n this.parent.showMaskRow(undefined, this.dialogObj.element);\n }\n if (this.isCheckboxFilterTemplate) {\n this.parent.notify('refreshCheckbox', { event: e });\n }\n else {\n this.refreshCheckboxes();\n }\n this.updateSearchIcon();\n };\n CheckBoxFilterBase.prototype.updateSearchIcon = function () {\n if (this.sInput.value.length) {\n classList(this.sIcon, ['e-chkcancel-icon'], ['e-search-icon']);\n document.body.querySelector('.e-chkcancel-icon').setAttribute('title', this.localeObj.getConstant('Clear'));\n }\n else {\n classList(this.sIcon, ['e-search-icon'], ['e-chkcancel-icon']);\n document.body.querySelector('.e-search-icon').setAttribute('title', this.localeObj.getConstant('Search'));\n }\n };\n /**\n * Gets the localized label by locale keyword.\n *\n * @param {string} key - Defines localization key\n * @returns {string} - returns localization label\n */\n CheckBoxFilterBase.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n CheckBoxFilterBase.prototype.updateDataSource = function () {\n var dataSource = this.options.dataSource;\n var str = 'object';\n if (!(dataSource instanceof DataManager)) {\n for (var i = 0; i < dataSource.length; i++) {\n // eslint-disable-next-line valid-typeof\n if (typeof dataSource !== str) {\n var obj = {};\n obj[this.options.field] = dataSource[parseInt(i.toString(), 10)];\n dataSource[parseInt(i.toString(), 10)] = obj;\n }\n }\n }\n };\n CheckBoxFilterBase.prototype.updateModel = function (options) {\n this.options = options;\n this.existingPredicate = options.actualPredicate || {};\n this.options.dataSource = options.dataSource;\n this.options.dataManager = options.dataManager ? options.dataManager : options.dataSource;\n this.updateDataSource();\n this.options.type = options.type;\n this.options.format = options.format || '';\n this.options.ignoreAccent = options.ignoreAccent || false;\n this.options.filteredColumns = options.filteredColumns || this.parent.filterSettings.columns;\n this.options.query = options.query || new Query();\n this.options.allowCaseSensitive = options.allowCaseSensitive || false;\n this.options.uid = options.column.uid;\n this.options.disableHtmlEncode = options.column.disableHtmlEncode || false;\n this.values = {};\n this.localeObj = options.localeObj;\n this.isFiltered = options.filteredColumns.length;\n };\n CheckBoxFilterBase.prototype.getAndSetChkElem = function (options) {\n this.dlg = this.parent.createElement('div', {\n id: this.id + this.options.type + '_excelDlg',\n attrs: { uid: this.options.column.uid },\n className: 'e-checkboxfilter e-filter-popup'\n });\n this.sBox = this.parent.createElement('div', { className: 'e-searchcontainer' });\n if (!options.hideSearchbox) {\n this.sInput = this.parent.createElement('input', {\n id: this.id + '_SearchBox',\n className: 'e-searchinput'\n });\n this.sIcon = this.parent.createElement('span', {\n className: 'e-searchclear e-search-icon e-icons e-input-group-icon', attrs: {\n type: 'text', title: this.getLocalizedLabel('Search')\n }\n });\n this.searchBox = this.parent.createElement('span', { className: 'e-searchbox e-fields' });\n this.searchBox.appendChild(this.sInput);\n this.sBox.appendChild(this.searchBox);\n var inputargs = {\n element: this.sInput, floatLabelType: 'Never', properties: {\n placeholder: this.getLocalizedLabel('Search'),\n cssClass: this.parent.cssClass\n }\n };\n Input.createInput(inputargs, this.parent.createElement);\n this.searchBox.querySelector('.e-input-group').appendChild(this.sIcon);\n }\n this.spinner = this.parent.createElement('div', { className: 'e-spinner' }); //for spinner\n this.cBox = this.parent.createElement('div', {\n id: this.id + this.options.type + '_CheckBoxList',\n className: 'e-checkboxlist e-fields'\n });\n this.spinner.appendChild(this.cBox);\n this.sBox.appendChild(this.spinner);\n return this.sBox;\n };\n CheckBoxFilterBase.prototype.showDialog = function (options) {\n var args = {\n requestType: events.filterBeforeOpen,\n columnName: this.options.field, columnType: this.options.type, cancel: false\n };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.parent.notify(events.cBoxFltrBegin, args);\n if (args.cancel) {\n options.cancel = args.cancel;\n return;\n }\n this.dialogObj = new Dialog({\n visible: false, content: this.sBox,\n close: this.closeDialog.bind(this),\n enableRtl: this.parent.enableRtl,\n width: (!isNullOrUndefined(parentsUntil(options.target, 'e-bigger')))\n || this.parent.element.classList.contains('e-device') ? 260 : 255,\n target: this.parent.element, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: {\n content: this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton'),\n cssClass: this.parent.cssClass ? 'e-primary' + ' ' + this.parent.cssClass : 'e-primary',\n isPrimary: true\n }\n },\n {\n click: this.btnClick.bind(this),\n buttonModel: { cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n content: this.getLocalizedLabel(this.isExcel ? 'CancelButton' : 'ClearButton') }\n }],\n created: this.dialogCreated.bind(this),\n open: this.dialogOpen.bind(this),\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n var isStringTemplate = 'isStringTemplate';\n this.dialogObj[\"\" + isStringTemplate] = true;\n this.renderResponsiveFilter(options);\n this.dlg.setAttribute('aria-label', this.getLocalizedLabel('ExcelFilterDialogARIA'));\n if (options.isResponsiveFilter) {\n var responsiveCnt = document.querySelector('.e-responsive-dialog > .e-dlg-content > .e-mainfilterdiv');\n responsiveCnt.appendChild(this.dlg);\n }\n else {\n this.parent.element.appendChild(this.dlg);\n }\n this.dialogObj.appendTo(this.dlg);\n this.dialogObj.element.style.maxHeight = options.isResponsiveFilter ? 'none' : this.options.height + 'px';\n this.dialogObj.show();\n var content = this.dialogObj.element.querySelector('.e-dlg-content');\n content.appendChild(this.sBox);\n this.wireEvents();\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === 'Shimmer') {\n this.parent.showMaskRow(undefined, this.dialogObj.element);\n }\n else {\n createSpinner({ target: this.spinner, cssClass: this.parent.cssClass ? this.parent.cssClass : null }, this.parent.createElement);\n showSpinner(this.spinner);\n }\n this.getAllData();\n };\n CheckBoxFilterBase.prototype.renderResponsiveFilter = function (options) {\n if (options.isResponsiveFilter) {\n this.dialogObj.buttons = [{}];\n this.dialogObj.position = { X: '', Y: '' };\n this.dialogObj.target = document.querySelector('.e-resfilter > .e-dlg-content > .e-mainfilterdiv');\n this.dialogObj.width = '100%';\n }\n };\n CheckBoxFilterBase.prototype.dialogCreated = function (e) {\n if (this.options.isResponsiveFilter) {\n this.dialogObj.element.style.left = '0px';\n }\n else {\n if (!Browser.isDevice) {\n getFilterMenuPostion(this.options.target, this.dialogObj);\n }\n else {\n this.dialogObj.position = { X: 'center', Y: 'center' };\n }\n }\n if (this.options.column.showColumnMenu) {\n this.parent.notify(events.filterDialogCreated, e);\n }\n };\n CheckBoxFilterBase.prototype.openDialog = function (options) {\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n };\n CheckBoxFilterBase.prototype.closeDialog = function () {\n if (this.dialogObj && !this.dialogObj.isDestroyed) {\n this.isBlanks = false;\n var filterTemplateCol = this.options.columns.filter(function (col) { return col.getFilterItemTemplate(); });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var registeredTemplate = this.parent.registeredTemplate;\n if (filterTemplateCol.length && !isNullOrUndefined(registeredTemplate) && registeredTemplate.filterItemTemplate) {\n this.parent.destroyTemplate(['filterItemTemplate']);\n }\n if ((this.parent.isReact || this.parent.isVue) && this.parent.destroyTemplate !== undefined) {\n clearReactVueTemplates(this.parent, ['filterItemTemplate']);\n }\n this.parent.notify(events.filterMenuClose, { field: this.options.field });\n this.dialogObj.destroy();\n this.unWireEvents();\n remove(this.dlg);\n this.dlg = null;\n this.parent.notify(events.filterDialogClose, {});\n }\n };\n /**\n * @param {Column} col - Defines column details\n * @returns {void}\n * @hidden\n */\n CheckBoxFilterBase.prototype.clearFilter = function (col) {\n // eslint-disable-next-line max-len\n var args = { instance: this, handler: this.clearFilter, cancel: false };\n this.parent.notify(events.fltrPrevent, args);\n if (args.cancel) {\n return;\n }\n this.options.handler({ action: 'clear-filter', field: col ? col.field : this.options.field });\n };\n CheckBoxFilterBase.prototype.btnClick = function (e) {\n if (this.filterState) {\n if ((e.target.tagName.toLowerCase() === 'input' && e.target.classList.contains('e-searchinput')) ||\n e.keyCode === 13) {\n if (!this.isCheckboxFilterTemplate) {\n this.fltrBtnHandler();\n }\n }\n else {\n var text = e.target.firstChild.textContent.toLowerCase();\n if (this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton').toLowerCase() === text) {\n if (!this.isCheckboxFilterTemplate) {\n this.fltrBtnHandler();\n }\n }\n else if (this.getLocalizedLabel('ClearButton').toLowerCase() === text) {\n this.clearFilter();\n }\n }\n this.closeDialog();\n }\n else if (!(e.target.tagName.toLowerCase() === 'input')) {\n this.clearFilter();\n this.closeDialog();\n }\n if (this.options.column.showColumnMenu) {\n this.parent.notify(events.afterFilterColumnMenuClose, {});\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n CheckBoxFilterBase.prototype.fltrBtnHandler = function () {\n var _this = this;\n var checked = [].slice.call(this.cBox.querySelectorAll('.e-check:not(.e-selectall):not(.e-add-current)'));\n var check = checked;\n var optr = 'equal';\n var ddlValue = this.dialogObj.element.querySelector('.e-dropdownlist');\n if (ddlValue) {\n this.options.operator = optr = ddlValue.ej2_instances[0].value;\n }\n this.isMenuNotEqual = this.options.operator === 'notequal';\n var searchInput;\n if (!this.options.hideSearchbox) {\n searchInput = this.searchBox.querySelector('.e-searchinput');\n }\n var caseSen = this.options.allowCaseSensitive;\n var defaults = {\n field: this.options.field, predicate: this.isMenuNotEqual ? 'and' : 'or', uid: this.options.uid,\n operator: optr, type: this.options.type, matchCase: caseSen, ignoreAccent: this.options.ignoreAccent\n };\n var isNotEqual = this.itemsCnt !== checked.length && this.itemsCnt - checked.length < checked.length;\n if (isNotEqual && searchInput && searchInput.value === '') {\n optr = this.isMenuNotEqual ? 'equal' : 'notequal';\n checked = [].slice.call(this.cBox.querySelectorAll('.e-uncheck:not(.e-selectall)'));\n defaults.predicate = this.isMenuNotEqual ? 'or' : 'and';\n defaults.operator = optr;\n }\n var value;\n var val;\n var length;\n var fObj;\n var coll = [];\n if (checked.length !== this.itemsCnt || (searchInput && searchInput.value && searchInput.value !== '')) {\n for (var i = 0; i < checked.length; i++) {\n value = this.values[parentsUntil(checked[parseInt(i.toString(), 10)], 'e-ftrchk').getAttribute('uid')];\n fObj = extend({}, { value: value }, defaults);\n if (value && !value.toString().length) {\n fObj.operator = isNotEqual ? 'notequal' : 'equal';\n }\n if (value === '' || isNullOrUndefined(value)) {\n coll = coll.concat(CheckBoxFilterBase.generateNullValuePredicates(defaults));\n }\n else {\n coll.push(fObj);\n }\n var args = {\n instance: this, handler: this.fltrBtnHandler, arg1: fObj.field, arg2: fObj.predicate, arg3: fObj.operator,\n arg4: fObj.matchCase, arg5: fObj.ignoreAccent, arg6: fObj.value, cancel: false\n };\n this.parent.notify(events.fltrPrevent, args);\n if (args.cancel) {\n return;\n }\n }\n if ((this.options.type === 'date' || this.options.type === 'datetime') && check.length) {\n length = check.length - 1;\n val = this.values[parentsUntil(check[parseInt(length.toString(), 10)], 'e-ftrchk').getAttribute('uid')];\n if (isNullOrUndefined(val) && isNotEqual) {\n coll.push({\n field: defaults.field, matchCase: defaults.matchCase, operator: 'equal',\n predicate: 'and', value: null\n });\n }\n }\n if (this.cBox.querySelector('.e-add-current') && this.cBox.querySelector('.e-add-current').classList.contains('e-check')) {\n var existingPredicate_1 = this.existingPredicate[this.options.field];\n if (existingPredicate_1) {\n var _loop_1 = function (j) {\n if (!coll.some(function (data) {\n return data\n .value === existingPredicate_1[parseInt(j.toString(), 10)].value;\n })) {\n coll.push(existingPredicate_1[parseInt(j.toString(), 10)]);\n }\n };\n for (var j = 0; j < existingPredicate_1.length; j++) {\n _loop_1(j);\n }\n }\n else {\n return;\n }\n }\n this.initiateFilter(coll);\n }\n else {\n var isClearFilter = this.options.filteredColumns.some(function (value) {\n return _this.options.field === value.field;\n });\n if (isClearFilter) {\n this.clearFilter();\n }\n }\n };\n // eslint-disable-next-line\n /** @hidden */\n CheckBoxFilterBase.generateNullValuePredicates = function (defaults) {\n var coll = [];\n if (defaults.type === 'string') {\n coll.push({\n field: defaults.field, ignoreAccent: defaults.ignoreAccent, matchCase: defaults.matchCase,\n operator: defaults.operator, predicate: defaults.predicate, value: ''\n });\n }\n coll.push({\n field: defaults.field,\n matchCase: defaults.matchCase, operator: defaults.operator, predicate: defaults.predicate, value: null\n });\n coll.push({\n field: defaults.field, matchCase: defaults.matchCase, operator: defaults.operator,\n predicate: defaults.predicate, value: undefined\n });\n return coll;\n };\n // eslint-disable-next-line\n /** @hidden */\n CheckBoxFilterBase.prototype.initiateFilter = function (fColl) {\n var firstVal = fColl[0];\n var predicate;\n if (!isNullOrUndefined(firstVal)) {\n predicate = firstVal.ejpredicate ? firstVal.ejpredicate :\n new Predicate(firstVal.field, firstVal.operator, firstVal.value, !firstVal.matchCase, firstVal.ignoreAccent);\n for (var j = 1; j < fColl.length; j++) {\n predicate = fColl[parseInt(j.toString(), 10)].ejpredicate !== undefined ?\n predicate[fColl[parseInt(j.toString(), 10)].predicate](fColl[parseInt(j.toString(), 10)].ejpredicate) :\n predicate[fColl[parseInt(j.toString(), 10)].predicate](fColl[parseInt(j.toString(), 10)].field, fColl[parseInt(j.toString(), 10)].operator, fColl[parseInt(j.toString(), 10)].value, !fColl[parseInt(j.toString(), 10)].matchCase, fColl[parseInt(j.toString(), 10)].ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: Predicate.or(predicate)\n };\n this.options.handler(args);\n }\n };\n CheckBoxFilterBase.prototype.isForeignColumn = function (col) {\n return col.isForeignColumn ? col.isForeignColumn() : false;\n };\n CheckBoxFilterBase.prototype.refreshCheckboxes = function () {\n var _this = this;\n var val = this.sInput.value;\n var column = this.options.column;\n var query = this.isForeignColumn(column) ? this.foreignKeyQuery.clone() : this.options.query.clone();\n var foreignQuery = this.options.query.clone();\n var pred = query.queries.filter(function (e) { return e && e.fn === 'onWhere'; })[0];\n query.queries = [];\n foreignQuery.queries = [];\n var parsed = (this.options.type !== 'string' && parseFloat(val)) ? parseFloat(val) : val;\n var operator = this.options.isRemote ?\n (this.options.type === 'string' ? 'contains' : 'equal') : (this.options.type ? 'contains' : 'equal');\n var matchCase = true;\n var ignoreAccent = this.options.ignoreAccent;\n var field = this.isForeignColumn(column) ? column.foreignKeyValue : column.field;\n parsed = (parsed === '' || parsed === undefined) ? undefined : parsed;\n var coll = [];\n var defaults = {\n field: field, predicate: 'or', uid: this.options.uid,\n operator: 'equal', type: this.options.type, matchCase: matchCase, ignoreAccent: ignoreAccent\n };\n var predicte;\n var moduleName = this.options.dataManager.adaptor.getModuleName;\n if (this.options.type === 'boolean') {\n if (parsed !== undefined &&\n this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'true';\n }\n else if (parsed !== undefined &&\n this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'false';\n }\n if (parsed !== undefined &&\n this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1 && moduleName) {\n // eslint-disable-next-line no-constant-condition\n parsed = (moduleName() === 'ODataAdaptor' || 'ODataV4Adaptor') ? true : 'true';\n }\n else if (parsed !== undefined &&\n this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1 && moduleName) {\n // eslint-disable-next-line no-constant-condition\n parsed = (moduleName() === 'ODataAdaptor' || 'ODataV4Adaptor') ? false : 'false';\n }\n operator = 'equal';\n }\n if ((this.options.type === 'date' || this.options.type === 'datetime' || this.options.type === 'dateonly') && this.options.format) {\n var intl = new Internationalization();\n var format = typeof (this.options.format) === 'string' ? this.options.format :\n this.options.format.format;\n if (format) {\n parsed = intl.parseDate(val, { format: format }) || new Date(val);\n }\n else {\n parsed = new Date(val);\n }\n if (this.options.type === 'dateonly') {\n parsed = parsed.getFullYear() + '-' + padZero(parsed.getMonth() + 1) + '-' + padZero(parsed.getDate());\n }\n }\n this.addDistinct(query);\n var args = {\n requestType: events.filterSearchBegin,\n filterModel: this, columnName: field, column: column,\n operator: operator, matchCase: matchCase, ignoreAccent: ignoreAccent, filterChoiceCount: null,\n query: query, value: parsed\n };\n this.parent.trigger(events.actionBegin, args, function (filterargs) {\n // eslint-disable-next-line no-self-assign\n filterargs.operator = filterargs.operator;\n predicte = new Predicate(field, filterargs.operator, args.value, filterargs.matchCase, filterargs.ignoreAccent);\n if (_this.options.type === 'date' || _this.options.type === 'datetime' || _this.options.type === 'dateonly') {\n operator = 'equal';\n var filterObj = {\n field: field, operator: operator, value: parsed, matchCase: matchCase,\n ignoreAccent: ignoreAccent\n };\n if (!isNullOrUndefined(parsed)) {\n predicte = getDatePredicate(filterObj, _this.options.type);\n }\n }\n if (val && typeof val === 'string' && _this.isBlanks &&\n _this.getLocalizedLabel('Blanks').toLowerCase().indexOf(val.toLowerCase()) >= 0) {\n coll = coll.concat(CheckBoxFilterBase.generateNullValuePredicates(defaults));\n var emptyValPredicte = CheckBoxFilterBase.generatePredicate(coll);\n emptyValPredicte.predicates.push(predicte);\n query.where(emptyValPredicte);\n }\n else if (val.length) {\n predicte = !isNullOrUndefined(pred) ? predicte.and(pred.e) : predicte;\n query.where(predicte);\n }\n else if (!isNullOrUndefined(pred)) {\n query.where(pred.e);\n }\n filterargs.filterChoiceCount = !isNullOrUndefined(filterargs.filterChoiceCount) ? filterargs.filterChoiceCount : 1000;\n var fPredicate = {};\n showSpinner(_this.spinner);\n _this.renderEmpty = false;\n if (_this.isForeignColumn(column) && val.length) {\n var colData = ('result' in column.dataSource) ? new DataManager(column.dataSource.result) :\n column.dataSource;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n colData.executeQuery(query).then(function (e) {\n var columnData = _this.options.column.columnData;\n _this.options.column.columnData = e.result;\n _this.parent.notify(events.generateQuery, { predicate: fPredicate, column: column });\n if (fPredicate.predicate.predicates.length) {\n foreignQuery.where(fPredicate.predicate);\n }\n else {\n _this.renderEmpty = true;\n }\n _this.options.column.columnData = columnData;\n foreignQuery.take(filterargs.filterChoiceCount);\n _this.search(filterargs, foreignQuery);\n });\n }\n else {\n query.take(filterargs.filterChoiceCount);\n _this.search(filterargs, query);\n }\n });\n };\n CheckBoxFilterBase.prototype.search = function (args, query) {\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.filterEvent(args, query);\n }\n else {\n this.processSearch(query);\n }\n };\n CheckBoxFilterBase.prototype.getPredicateFromCols = function (columns, isExecuteLocal) {\n var predicates = CheckBoxFilterBase.getPredicate(columns, isExecuteLocal);\n var predicateList = [];\n var fPredicate = {};\n var isGrid = this.parent.getForeignKeyColumns !== undefined;\n var foreignColumn = isGrid ? this.parent.getForeignKeyColumns() : [];\n for (var _i = 0, _a = Object.keys(predicates); _i < _a.length; _i++) {\n var prop = _a[_i];\n var col = void 0;\n if (isGrid && !this.parent.getColumnByField(prop)) {\n col = getColumnByForeignKeyValue(prop, foreignColumn);\n }\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(Predicate.or(fPredicate.predicate.predicates));\n }\n }\n else {\n predicateList.push(predicates[\"\" + prop]);\n }\n }\n return predicateList.length && Predicate.and(predicateList);\n };\n CheckBoxFilterBase.prototype.getQuery = function () {\n return this.parent.getQuery ? this.parent.getQuery().clone() : new Query();\n };\n CheckBoxFilterBase.prototype.getAllData = function () {\n var _this = this;\n this.customQuery = false;\n var query = this.getQuery();\n query.requiresCount(); //consider take query\n this.addDistinct(query);\n var args = {\n requestType: events.filterChoiceRequest, query: query, filterChoiceCount: null\n };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.parent.trigger(events.actionBegin, args, function (args) {\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n query.take(args.filterChoiceCount);\n if (!args.query.distincts.length) {\n _this.customQuery = true;\n _this.queryGenerate(query);\n }\n if (_this.parent.dataSource && 'result' in _this.parent.dataSource) {\n _this.filterEvent(args, query);\n }\n else {\n _this.processDataOperation(query, true);\n }\n });\n };\n CheckBoxFilterBase.prototype.addDistinct = function (query) {\n var filteredColumn = DataUtil.distinct(this.options.filteredColumns, 'field');\n if (filteredColumn.indexOf(this.options.column.field) <= -1) {\n filteredColumn = filteredColumn.concat(this.options.column.field);\n }\n query.distinct(filteredColumn);\n return query;\n };\n CheckBoxFilterBase.prototype.filterEvent = function (args, query) {\n var _this = this;\n var defObj = eventPromise(args, query);\n this.parent.trigger(events.dataStateChange, defObj.state);\n var def = defObj.deffered;\n def.promise.then(function (e) {\n _this.dataSuccess(e);\n });\n };\n CheckBoxFilterBase.prototype.processDataOperation = function (query, isInitial) {\n var _this = this;\n this.options.dataSource = this.options.dataSource instanceof DataManager ?\n this.options.dataSource : new DataManager(this.options.dataSource);\n var allPromise = [];\n var runArray = [];\n if (this.isForeignColumn(this.options.column) && isInitial) {\n var colData = ('result' in this.options.column.dataSource) ?\n new DataManager(this.options.column.dataSource.result) :\n this.options.column.dataSource;\n this.foreignKeyQuery.params = query.params;\n allPromise.push(colData.executeQuery(this.foreignKeyQuery));\n runArray.push(function (data) { return _this.foreignKeyData = data; });\n }\n allPromise.push(this.options.dataSource.executeQuery(query));\n runArray.push(this.dataSuccess.bind(this));\n var i = 0;\n Promise.all(allPromise).then(function (e) {\n for (var j = 0; j < e.length; j++) {\n runArray[i++](e[parseInt(j.toString(), 10)].result);\n }\n });\n };\n CheckBoxFilterBase.prototype.dataSuccess = function (e) {\n this.fullData = e;\n var args1 = { dataSource: this.fullData, executeQuery: true, field: this.options.field };\n this.parent.notify(events.beforeCheckboxRenderer, args1);\n if (args1.executeQuery) {\n var query = new Query();\n if (!this.customQuery) {\n this.isExecuteLocal = true;\n this.queryGenerate(query);\n this.isExecuteLocal = false;\n }\n // query.select(this.options.field);\n var result = new DataManager(args1.dataSource).executeLocal(query);\n var col = this.options.column;\n this.filteredData = CheckBoxFilterBase.getDistinct(result, this.options.field, col, this.foreignKeyData, this).records || [];\n }\n var data = args1.executeQuery ? this.filteredData : args1.dataSource;\n this.processDataSource(null, true, data, args1);\n if (this.sInput) {\n this.sInput.focus();\n }\n var args = {\n requestType: events.filterAfterOpen,\n columnName: this.options.field, columnType: this.options.type\n };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.parent.notify(events.cBoxFltrComplete, args);\n if (this.isCheckboxFilterTemplate) {\n hideSpinner(this.spinner);\n }\n };\n CheckBoxFilterBase.prototype.queryGenerate = function (query) {\n if (this.parent.searchSettings && this.parent.searchSettings.key.length) {\n var sSettings = this.parent.searchSettings;\n var fields = sSettings.fields.length ? sSettings.fields : this.options.columns.map(function (f) { return f.field; });\n query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n }\n if ((this.options.filteredColumns.length)) {\n var cols = [];\n for (var i = 0; i < this.options.filteredColumns.length; i++) {\n var filterColumn = this.options.filteredColumns[parseInt(i.toString(), 10)];\n if (this.options.uid) {\n filterColumn.uid = filterColumn.uid || this.parent.getColumnByField(filterColumn.field).uid;\n if (filterColumn.uid !== this.options.uid) {\n cols.push(this.options.filteredColumns[parseInt(i.toString(), 10)]);\n }\n }\n else {\n if (filterColumn.field !== this.options.field) {\n cols.push(this.options.filteredColumns[parseInt(i.toString(), 10)]);\n }\n }\n }\n var predicate = this.getPredicateFromCols(cols, this.isExecuteLocal);\n if (predicate) {\n query.where(predicate);\n }\n }\n };\n CheckBoxFilterBase.prototype.processDataSource = function (query, isInitial, dataSource, args) {\n showSpinner(this.spinner);\n // query = query ? query : this.options.query.clone();\n // query.requiresCount();\n // let result: Object = new DataManager(dataSource as JSON[]).executeLocal(query);\n // let res: { result: Object[] } = result as { result: Object[] };\n this.isExecuteLocal = true;\n this.updateResult();\n this.isExecuteLocal = false;\n var args1 = { dataSource: this.fullData, isCheckboxFilterTemplate: false, column: this.options.column,\n element: this.cBox, type: this.options.type, format: this.options.type, btnObj: this.options.isResponsiveFilter ? null :\n this.dialogObj.btnObj[0], searchBox: this.searchBox };\n this.parent.notify(events.beforeCheckboxfilterRenderer, args1);\n this.isCheckboxFilterTemplate = args1.isCheckboxFilterTemplate;\n if (!this.isCheckboxFilterTemplate) {\n this.createFilterItems(dataSource, isInitial, args);\n }\n };\n CheckBoxFilterBase.prototype.processSearch = function (query) {\n this.processDataOperation(query);\n };\n CheckBoxFilterBase.prototype.updateResult = function () {\n this.result = {};\n var predicate = this.getPredicateFromCols(this.options.filteredColumns, this.isExecuteLocal);\n var query = new Query();\n if (predicate) {\n query.where(predicate);\n }\n this.parent.notify(events.beforeCheckboxRendererQuery, { query: query });\n var result = new DataManager(this.fullData).executeLocal(query);\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n this.result[getObject(this.options.field, res)] = true;\n }\n };\n CheckBoxFilterBase.prototype.clickHandler = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === 'Shimmer'\n && parentsUntil(target, 'e-mask-ftrchk')) {\n return;\n }\n var elem = parentsUntil(target, 'e-checkbox-wrapper');\n if (parentsUntil(target, 'e-searchbox')) {\n this.searchBoxClick(e);\n }\n if (elem && !this.isCheckboxFilterTemplate) {\n var selectAll = elem.querySelector('.e-selectall');\n if (selectAll) {\n this.updateAllCBoxes(!selectAll.classList.contains('e-check'));\n }\n else {\n toogleCheckbox(elem.parentElement);\n }\n this.updateIndeterminatenBtn();\n elem.querySelector('.e-chk-hidden').focus();\n }\n this.setFocus(parentsUntil(elem, 'e-ftrchk'));\n };\n CheckBoxFilterBase.prototype.keyupHandler = function (e) {\n this.setFocus(parentsUntil(e.target, 'e-ftrchk'));\n };\n CheckBoxFilterBase.prototype.setFocus = function (elem) {\n var prevElem = this.dlg.querySelector('.e-chkfocus');\n if (prevElem) {\n prevElem.classList.remove('e-chkfocus');\n }\n if (elem) {\n elem.classList.add('e-chkfocus');\n }\n };\n CheckBoxFilterBase.prototype.updateAllCBoxes = function (checked) {\n var cBoxes = [].slice.call(this.cBox.querySelectorAll('.e-frame:not(.e-add-current)'));\n for (var _i = 0, cBoxes_1 = cBoxes; _i < cBoxes_1.length; _i++) {\n var cBox = cBoxes_1[_i];\n removeAddCboxClasses(cBox, checked);\n setChecked(cBox.previousSibling, checked);\n }\n };\n CheckBoxFilterBase.prototype.dialogOpen = function () {\n if (this.parent.element.classList.contains('e-device')) {\n this.dialogObj.element.querySelector('.e-input-group').classList.remove('e-input-focus');\n if (!this.options.isResponsiveFilter) {\n this.dialogObj.element.querySelector('.e-btn').focus();\n }\n }\n };\n CheckBoxFilterBase.prototype.createCheckbox = function (value, checked, data) {\n var elem = checked ? this.cBoxTrue.cloneNode(true) :\n this.cBoxFalse.cloneNode(true);\n setChecked(elem.querySelector('input'), checked);\n var label = elem.querySelector('.e-label');\n var dummyData = extendObjWithFn({}, data, { column: this.options.column, parent: this.parent });\n var innerText = this.options.disableHtmlEncode ? 'textContent' : 'innerHTML';\n label[\"\" + innerText] = !isNullOrUndefined(value) && value.toString().length ?\n this.parent.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(value) : value : this.getLocalizedLabel('Blanks');\n if (label.innerHTML === this.getLocalizedLabel('Blanks')) {\n this.isBlanks = true;\n }\n if (typeof value === 'boolean') {\n label.innerHTML = value === true ? this.getLocalizedLabel('FilterTrue') : this.getLocalizedLabel('FilterFalse');\n }\n addClass([label], ['e-checkboxfiltertext']);\n if (this.options.template && data[this.options.column.field] !== this.getLocalizedLabel('SelectAll')\n && data[this.options.column.field] !== this.getLocalizedLabel('AddCurrentSelection')) {\n label.innerHTML = '';\n var isReactCompiler = this.parent.isReact && this.options.column.filter\n && typeof (this.options.column.filter.itemTemplate) !== 'string';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n this.options.template(dummyData, this.parent, 'filterItemTemplate', null, null, null, label);\n this.parent.renderTemplates();\n }\n else {\n appendChildren(label, this.options.template(dummyData, this.parent, 'filterItemTemplate'));\n }\n }\n return elem;\n };\n CheckBoxFilterBase.prototype.updateIndeterminatenBtn = function () {\n var cnt = this.cBox.children.length - 1;\n var className = [];\n var disabled = false;\n var elem = this.cBox.querySelector('.e-selectall');\n var selected = this.cBox.querySelectorAll('.e-check:not(.e-selectall):not(.e-add-current)').length;\n if (this.cBox.querySelector('.e-add-current')) {\n cnt -= 1;\n }\n var btn;\n if (!this.options.isResponsiveFilter) {\n btn = this.dialogObj.btnObj[0];\n btn.disabled = false;\n }\n var input = elem.previousSibling;\n setChecked(input, false);\n input.indeterminate = false;\n if (cnt === selected) {\n className = ['e-check'];\n setChecked(input, true);\n }\n else if (selected) {\n className = ['e-stop'];\n input.indeterminate = true;\n }\n else {\n className = ['e-uncheck'];\n disabled = true;\n if (btn) {\n btn.disabled = true;\n }\n }\n if (btn) {\n this.filterState = !btn.disabled;\n btn.dataBind();\n }\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n addClass([elem], className);\n this.parent.notify(events.refreshCustomFilterOkBtn, { disabled: disabled });\n };\n CheckBoxFilterBase.prototype.createFilterItems = function (data, isInitial, args1) {\n var _a, _b;\n var cBoxes = this.parent.createElement('div');\n var btn;\n var disabled = false;\n if (!this.options.isResponsiveFilter) {\n btn = this.dialogObj.btnObj[0];\n }\n var nullCounter = -1;\n var key = 'ejValue';\n if (!args1.executeQuery) {\n key = args1.field;\n }\n for (var i = 0; i < data.length; i++) {\n var val = getValue(key, data[parseInt(i.toString(), 10)]);\n if (val === '' || isNullOrUndefined(val)) {\n nullCounter = nullCounter + 1;\n }\n }\n this.itemsCnt = nullCounter !== -1 ? data.length - nullCounter : data.length;\n if (data.length && !this.renderEmpty) {\n var selectAllValue = this.getLocalizedLabel('SelectAll');\n var innerDiv = this.cBox.querySelector('.e-checkfltrnmdiv');\n if (innerDiv) {\n innerDiv.classList.remove('e-checkfltrnmdiv');\n }\n var checkBox = this.createCheckbox(selectAllValue, false, (_a = {}, _a[this.options.field] = selectAllValue, _a));\n if (this.parent.cssClass) {\n if (this.parent.cssClass.indexOf(' ') !== -1) {\n addClass([checkBox], this.parent.cssClass.split(' '));\n }\n else {\n addClass([checkBox], [this.parent.cssClass]);\n }\n }\n var selectAll = createCboxWithWrap(getUid('cbox'), checkBox, 'e-ftrchk');\n selectAll.querySelector('.e-frame').classList.add('e-selectall');\n cBoxes.appendChild(selectAll);\n var predicate = new Predicate('field', 'equal', this.options.field);\n if (this.options.foreignKeyValue) {\n predicate = predicate.or('field', 'equal', this.options.foreignKeyValue);\n }\n var isColFiltered = new DataManager(this.options.filteredColumns).executeLocal(new Query().where(predicate)).length;\n if (this.sInput.value) {\n var predicateCheckBox = this.createCheckbox(this.getLocalizedLabel('AddCurrentSelection'), false, (_b = {},\n _b[this.options.field] = this.getLocalizedLabel('AddCurrentSelection'),\n _b));\n if (this.parent.cssClass) {\n if (this.parent.cssClass.indexOf(' ') !== -1) {\n addClass([predicateCheckBox], this.parent.cssClass.split(' '));\n }\n else {\n addClass([predicateCheckBox], [this.parent.cssClass]);\n }\n }\n var predicateElement = createCboxWithWrap(getUid('cbox'), predicateCheckBox, 'e-ftrchk');\n predicateElement.querySelector('.e-frame').classList.add('e-add-current');\n cBoxes.appendChild(predicateElement);\n }\n var isRndere = void 0;\n for (var i = 0; i < data.length; i++) {\n var uid = getUid('cbox');\n this.values[\"\" + uid] = getValue(key, data[parseInt(i.toString(), 10)]);\n var value = getValue(this.options.field, data[parseInt(i.toString(), 10)]);\n if (this.options.formatFn) {\n value = this.valueFormatter.toView(value, this.options.formatFn);\n }\n var args_1 = { value: value, column: this.options.column, data: data[parseInt(i.toString(), 10)] };\n this.parent.notify(events.filterCboxValue, args_1);\n value = args_1.value;\n if ((value === '' || isNullOrUndefined(value))) {\n if (isRndere) {\n continue;\n }\n isRndere = true;\n }\n var checkbox = this.createCheckbox(value, this.getCheckedState(isColFiltered, this.values[\"\" + uid]), getValue('dataObj', data[parseInt(i.toString(), 10)]));\n cBoxes.appendChild(createCboxWithWrap(uid, checkbox, 'e-ftrchk'));\n }\n this.cBox.innerHTML = '';\n appendChildren(this.cBox, [].slice.call(cBoxes.children));\n this.updateIndeterminatenBtn();\n if (btn) {\n btn.disabled = false;\n }\n disabled = false;\n }\n else {\n cBoxes.appendChild(this.parent.createElement('span', { innerHTML: this.getLocalizedLabel('NoResult') }));\n this.cBox.innerHTML = '';\n this.cBox.appendChild(this.parent.createElement('div', { className: 'e-checkfltrnmdiv' }));\n appendChildren(this.cBox.children[0], [].slice.call(cBoxes.children));\n if (btn) {\n btn.disabled = true;\n }\n disabled = true;\n }\n if (btn && data.length) {\n this.filterState = !btn.disabled;\n btn.dataBind();\n }\n var args = { requestType: events.filterChoiceRequest, dataSource: this.renderEmpty ? [] : data };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.parent.notify(events.cBoxFltrComplete, args);\n this.parent.notify(events.refreshCustomFilterOkBtn, { disabled: disabled });\n hideSpinner(this.spinner);\n };\n CheckBoxFilterBase.prototype.getCheckedState = function (isColFiltered, value) {\n if (!this.isFiltered || !isColFiltered) {\n return true;\n }\n else {\n var checkState = this.sInput.value ? true : this.result[\"\" + value];\n return this.options.operator === 'notequal' ? !checkState : checkState;\n }\n };\n CheckBoxFilterBase.getDistinct = function (json, field, column, foreignKeyData, checkboxFilter) {\n var len = json.length;\n var result = [];\n var value;\n var ejValue = 'ejValue';\n var lookup = {};\n var isForeignKey = column && column.isForeignColumn ? column.isForeignColumn() : false;\n while (len--) {\n value = json[parseInt(len.toString(), 10)];\n value = getObject(field, value); //local remote diff, check with mdu\n var currentFilterValue = (typeof value === 'string') && !(isNullOrUndefined(checkboxFilter)) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !(isNullOrUndefined(checkboxFilter.parent)) && !(isNullOrUndefined(checkboxFilter.parent.filterSettings)) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !(isNullOrUndefined(checkboxFilter.parent.filterSettings.enableCaseSensitivity)) ? value.toLowerCase() : value;\n if (!(currentFilterValue in lookup)) {\n var obj = {};\n obj[\"\" + ejValue] = value;\n lookup[\"\" + currentFilterValue] = true;\n if (isForeignKey) {\n var foreignDataObj = getForeignData(column, {}, value, foreignKeyData)[0];\n setValue(events.foreignKeyData, foreignDataObj, json[parseInt(len.toString(), 10)]);\n value = getValue(column.foreignKeyValue, foreignDataObj);\n }\n setValue(field, isNullOrUndefined(value) ? null : value, obj);\n setValue('dataObj', json[parseInt(len.toString(), 10)], obj);\n result.push(obj);\n }\n }\n return DataUtil.group(DataUtil.sort(result, field, DataUtil.fnAscending), 'ejValue');\n };\n CheckBoxFilterBase.getPredicate = function (columns, isExecuteLocal) {\n var cols = DataUtil.distinct(columns, 'field', true) || [];\n var collection = [];\n var pred = {};\n for (var i = 0; i < cols.length; i++) {\n collection = new DataManager(columns).executeLocal(new Query().where('field', 'equal', cols[parseInt(i.toString(), 10)].field));\n if (collection.length !== 0) {\n pred[cols[parseInt(i.toString(), 10)].field] = CheckBoxFilterBase.generatePredicate(collection, isExecuteLocal);\n }\n }\n return pred;\n };\n CheckBoxFilterBase.generatePredicate = function (cols, isExecuteLocal) {\n var len = cols ? cols.length : 0;\n var predicate;\n var operate = 'or';\n var first = CheckBoxFilterBase.updateDateFilter(cols[0]);\n first.ignoreAccent = !isNullOrUndefined(first.ignoreAccent) ? first.ignoreAccent : false;\n if (first.type === 'date' || first.type === 'datetime' || first.type === 'dateonly') {\n predicate = getDatePredicate(first, first.type, isExecuteLocal);\n }\n else {\n predicate = first.ejpredicate ? first.ejpredicate :\n new Predicate(first.field, first.operator, first.value, !CheckBoxFilterBase.getCaseValue(first), first.ignoreAccent);\n }\n for (var p = 1; p < len; p++) {\n cols[parseInt(p.toString(), 10)] = CheckBoxFilterBase.updateDateFilter(cols[parseInt(p.toString(), 10)]);\n if (len > 2 && p > 1 && cols[parseInt(p.toString(), 10)].predicate === 'or') {\n if (cols[parseInt(p.toString(), 10)].type === 'date' || cols[parseInt(p.toString(), 10)].type === 'datetime' || cols[parseInt(p.toString(), 10)].type === 'dateonly') {\n predicate.predicates.push(getDatePredicate(cols[parseInt(p.toString(), 10)], cols[parseInt(p.toString(), 10)].type, isExecuteLocal));\n }\n else {\n predicate.predicates.push(new Predicate(cols[parseInt(p.toString(), 10)].field, cols[parseInt(p.toString(), 10)].operator, cols[parseInt(p.toString(), 10)].value, !CheckBoxFilterBase.getCaseValue(cols[parseInt(p.toString(), 10)]), cols[parseInt(p.toString(), 10)].ignoreAccent));\n }\n }\n else {\n if (cols[parseInt(p.toString(), 10)].type === 'date' || cols[parseInt(p.toString(), 10)].type === 'datetime' || cols[parseInt(p.toString(), 10)].type === 'dateonly') {\n if (cols[parseInt(p.toString(), 10)].predicate === 'and' && cols[parseInt(p.toString(), 10)].operator === 'equal') {\n predicate = predicate[\"\" + operate](getDatePredicate(cols[parseInt(p.toString(), 10)], cols[parseInt(p.toString(), 10)].type, isExecuteLocal), cols[parseInt(p.toString(), 10)].type, cols[parseInt(p.toString(), 10)].ignoreAccent);\n }\n else {\n predicate = predicate[(cols[parseInt(p.toString(), 10)].predicate)](getDatePredicate(cols[parseInt(p.toString(), 10)], cols[parseInt(p.toString(), 10)].type, isExecuteLocal), cols[parseInt(p.toString(), 10)].type, cols[parseInt(p.toString(), 10)].ignoreAccent);\n }\n }\n else {\n predicate = cols[parseInt(p.toString(), 10)].ejpredicate ?\n predicate[cols[parseInt(p.toString(), 10)]\n .predicate](cols[parseInt(p.toString(), 10)].ejpredicate) :\n predicate[(cols[parseInt(p.toString(), 10)].predicate)](cols[parseInt(p.toString(), 10)].field, cols[parseInt(p.toString(), 10)].operator, cols[parseInt(p.toString(), 10)].value, !CheckBoxFilterBase.getCaseValue(cols[parseInt(p.toString(), 10)]), cols[parseInt(p.toString(), 10)].ignoreAccent);\n }\n }\n }\n return predicate || null;\n };\n CheckBoxFilterBase.getCaseValue = function (filter) {\n if (isNullOrUndefined(filter.matchCase)) {\n if (filter.type === 'string' || isNullOrUndefined(filter.type) && typeof (filter.value) === 'string') {\n return false;\n }\n else {\n return true;\n }\n }\n else {\n return filter.matchCase;\n }\n };\n CheckBoxFilterBase.updateDateFilter = function (filter) {\n if ((filter.type === 'date' || filter.type === 'datetime' || filter.type === 'dateonly' || filter.value instanceof Date)) {\n filter.type = filter.type || 'date';\n }\n return filter;\n };\n return CheckBoxFilterBase;\n}());\nexport { CheckBoxFilterBase };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate, Deferred, UrlAdaptor, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { setFormatter, isGroupAdaptive, getColumnByForeignKeyValue, refreshFilteredColsUid } from '../base/util';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * Grid data module is used to generate query and data source.\n *\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module.\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the service locator\n * @hidden\n */\n function Data(parent, serviceLocator) {\n this.dataState = { isPending: false, resolver: null, group: [] };\n this.foreignKeyDataState = { isPending: false, resolver: null };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.initDataManager();\n if (this.parent.isDestroyed || this.getModuleName() === 'foreignKey') {\n return;\n }\n this.parent.on(events.rowsAdded, this.addRows, this);\n this.parent.on(events.rowPositionChanged, this.reorderRows, this);\n this.parent.on(events.rowsRemoved, this.removeRows, this);\n this.parent.on(events.dataSourceModified, this.initDataManager, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.updateData, this.crudActions, this);\n this.parent.on(events.addDeleteAction, this.getData, this);\n this.parent.on(events.autoCol, this.refreshFilteredCols, this);\n this.parent.on(events.columnsPrepared, this.refreshFilteredCols, this);\n }\n Data.prototype.reorderRows = function (e) {\n this.dataManager.dataSource.json.splice(e.toIndex, 0, this.dataManager.dataSource.json.splice(e.fromIndex, 1)[0]);\n };\n Data.prototype.getModuleName = function () {\n return 'data';\n };\n /**\n * The function used to initialize dataManager and external query\n *\n * @returns {void}\n */\n Data.prototype.initDataManager = function () {\n var gObj = this.parent;\n this.dataManager = gObj.dataSource instanceof DataManager ? gObj.dataSource :\n (isNullOrUndefined(gObj.dataSource) ? new DataManager() : new DataManager(gObj.dataSource));\n if (gObj.isAngular && !(gObj.query instanceof Query)) {\n gObj.setProperties({ query: new Query() }, true);\n }\n else {\n this.isQueryInvokedFromData = true;\n gObj.query = gObj.query instanceof Query ? gObj.query : new Query();\n }\n };\n /**\n * The function is used to generate updated Query from Grid model.\n *\n * @param {boolean} skipPage - specifies the boolean to skip the page\n * @param {boolean} isAutoCompleteCall - specifies for auto complete call\n * @returns {Query} returns the Query\n * @hidden\n */\n Data.prototype.generateQuery = function (skipPage, isAutoCompleteCall) {\n var gObj = this.parent;\n var query = gObj.getQuery().clone();\n if (this.parent.columnQueryMode === 'ExcludeHidden') {\n query.select(this.parent.getColumns().filter(function (column) { return !(column.isPrimaryKey !== true && column.visible === false || column.field === undefined); }).map(function (column) { return column.field; }));\n }\n else if (this.parent.columnQueryMode === 'Schema') {\n var selectQueryFields = [];\n var columns = this.parent.columns;\n for (var i = 0; i < columns.length; i++) {\n selectQueryFields.push(columns[parseInt(i.toString(), 10)].field);\n }\n query.select(selectQueryFields);\n }\n this.filterQuery(query);\n this.searchQuery(query);\n this.aggregateQuery(query);\n this.sortQuery(query);\n if (isGroupAdaptive(this.parent)) {\n this.virtualGroupPageQuery(query);\n }\n else {\n this.pageQuery(query, skipPage);\n }\n if (isNullOrUndefined(isAutoCompleteCall) || !isAutoCompleteCall) {\n this.groupQuery(query);\n }\n return query;\n };\n /**\n * @param {Query} query - specifies the query\n * @returns {Query} - returns the query\n * @hidden\n */\n Data.prototype.aggregateQuery = function (query) {\n var rows = this.parent.aggregates;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[parseInt(i.toString(), 10)];\n for (var j = 0; j < row.columns.length; j++) {\n var cols = row.columns[parseInt(j.toString(), 10)];\n var types = cols.type instanceof Array ? cols.type : [cols.type];\n for (var k = 0; k < types.length; k++) {\n query.aggregate(types[parseInt(k.toString(), 10)].toLowerCase(), cols.field);\n }\n }\n }\n return query;\n };\n Data.prototype.virtualGroupPageQuery = function (query) {\n var fName = 'fn';\n if (query.queries.length) {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[parseInt(i.toString(), 10)][\"\" + fName] === 'onPage') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n };\n Data.prototype.pageQuery = function (query, skipPage) {\n var gObj = this.parent;\n var fName = 'fn';\n var args = { query: query, skipPage: false };\n gObj.notify(events.setVirtualPageQuery, args);\n if (args.skipPage) {\n return query;\n }\n if ((gObj.allowPaging || gObj.enableVirtualization || gObj.enableInfiniteScrolling) && skipPage !== true) {\n gObj.pageSettings.currentPage = Math.max(1, gObj.pageSettings.currentPage);\n if (gObj.pageSettings.pageCount <= 0) {\n gObj.pageSettings.pageCount = 8;\n }\n if (gObj.pageSettings.pageSize <= 0) {\n gObj.pageSettings.pageSize = 12;\n }\n if (query.queries.length) {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[parseInt(i.toString(), 10)][\"\" + fName] === 'onPage') {\n query.queries.splice(i, 1);\n }\n }\n }\n if (!isNullOrUndefined(gObj.infiniteScrollModule) && gObj.enableInfiniteScrolling) {\n this.parent.notify(events.infinitePageQuery, query);\n }\n else {\n query.page(gObj.pageSettings.currentPage, gObj.allowPaging && gObj.pagerModule &&\n (gObj.pagerModule.pagerObj.isAllPage && !gObj.isManualRefresh) &&\n (!this.dataManager.dataSource.offline && !(this.dataManager.adaptor instanceof RemoteSaveAdaptor)) ?\n null : gObj.pageSettings.pageSize);\n }\n }\n return query;\n };\n Data.prototype.groupQuery = function (query) {\n var gObj = this.parent;\n if (gObj.allowGrouping && gObj.groupSettings.columns.length) {\n if (this.parent.groupSettings.enableLazyLoading) {\n query.lazyLoad.push({ key: 'isLazyLoad', value: this.parent.groupSettings.enableLazyLoading });\n }\n var columns = gObj.groupSettings.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n var column = this.getColumnByField(columns[parseInt(i.toString(), 10)]);\n if (!column) {\n this.parent.log('initial_action', { moduleName: 'group', columnName: columns[parseInt(i.toString(), 10)] });\n }\n var isGrpFmt = column.enableGroupByFormat;\n var format = column.format;\n if (isGrpFmt) {\n query.group(columns[parseInt(i.toString(), 10)], this.formatGroupColumn.bind(this), format);\n }\n else {\n query.group(columns[parseInt(i.toString(), 10)], null);\n }\n }\n }\n return query;\n };\n Data.prototype.sortQuery = function (query) {\n var gObj = this.parent;\n if ((gObj.allowSorting || gObj.allowGrouping) && gObj.sortSettings.columns.length) {\n var columns = gObj.sortSettings.columns;\n var sortGrp = [];\n for (var i = columns.length - 1; i > -1; i--) {\n var col = this.getColumnByField(columns[parseInt(i.toString(), 10)].field);\n if (col) {\n col.setSortDirection(columns[parseInt(i.toString(), 10)].direction);\n }\n else {\n this.parent.log('initial_action', { moduleName: 'sort', columnName: columns[parseInt(i.toString(), 10)].field });\n return query;\n }\n var fn = columns[parseInt(i.toString(), 10)].direction;\n if (col.sortComparer) {\n this.parent.log('grid_sort_comparer');\n fn = !this.isRemote() ? col.sortComparer.bind(col) : columns[parseInt(i.toString(), 10)].direction;\n }\n if (gObj.groupSettings.columns.indexOf(columns[parseInt(i.toString(), 10)].field) === -1) {\n if (col.isForeignColumn() || col.sortComparer) {\n query.sortByForeignKey(col.field, fn, undefined, columns[parseInt(i.toString(), 10)].direction.toLowerCase());\n }\n else {\n query.sortBy(col.field, fn);\n }\n }\n else {\n sortGrp.push({ direction: fn, field: col.field });\n }\n }\n for (var i = 0, len = sortGrp.length; i < len; i++) {\n if (typeof sortGrp[parseInt(i.toString(), 10)].direction === 'string') {\n query.sortBy(sortGrp[parseInt(i.toString(), 10)].field, sortGrp[parseInt(i.toString(), 10)].direction);\n }\n else {\n var col = this.getColumnByField(sortGrp[parseInt(i.toString(), 10)].field);\n query.sortByForeignKey(sortGrp[parseInt(i.toString(), 10)].field, sortGrp[parseInt(i.toString(), 10)].direction, undefined, col.getSortDirection().toLowerCase());\n }\n }\n }\n return query;\n };\n Data.prototype.searchQuery = function (query, fcolumn, isForeignKey) {\n var sSettings = this.parent.searchSettings;\n var fields = sSettings.fields.length ? sSettings.fields : this.getSearchColumnFieldNames();\n var predicateList = [];\n var needForeignKeySearch = false;\n if (this.parent.searchSettings.key.length) {\n needForeignKeySearch = this.parent.getForeignKeyColumns().some(function (col) { return fields.indexOf(col.field) > -1; });\n var adaptor = !isForeignKey ? this.dataManager.adaptor : fcolumn.dataSource.adaptor;\n if (needForeignKeySearch || (adaptor.getModuleName &&\n adaptor.getModuleName() === 'ODataV4Adaptor')) {\n fields = isForeignKey ? [fcolumn.foreignKeyValue] : fields;\n for (var i = 0; i < fields.length; i++) {\n var column = isForeignKey ? fcolumn : this.getColumnByField(fields[parseInt(i.toString(), 10)]);\n if (column.isForeignColumn() && !isForeignKey) {\n predicateList = this.fGeneratePredicate(column, predicateList);\n }\n else {\n predicateList.push(new Predicate(fields[parseInt(i.toString(), 10)], sSettings.operator, sSettings.key, sSettings.ignoreCase, sSettings.ignoreAccent));\n }\n }\n var predList = Predicate.or(predicateList);\n predList.key = sSettings.key;\n query.where(predList);\n }\n else {\n query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n }\n }\n return query;\n };\n Data.prototype.filterQuery = function (query, column, skipFoerign) {\n var gObj = this.parent;\n var predicateList = [];\n var actualFilter = [];\n var foreignColumn = this.parent.getForeignKeyColumns();\n var foreignColEmpty;\n if (gObj.allowFiltering && gObj.filterSettings.columns.length) {\n var columns = column ? column : gObj.filterSettings.columns;\n var colType = {};\n for (var _i = 0, _a = gObj.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n colType[col.field] = col.filter.type ? col.filter.type : gObj.filterSettings.type;\n }\n var foreignCols = [];\n var defaultFltrCols = [];\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var col = columns_1[_b];\n var gridColumn = col.isForeignKey ? gObj.getColumnByUid(col.uid) : gObj.getColumnByField(col.field);\n if (isNullOrUndefined(col.type) && gridColumn && (gridColumn.type === 'date' || gridColumn.type === 'datetime' || gridColumn.type === 'dateonly')) {\n col.type = col.isForeignKey ? gObj.getColumnByUid(col.uid).type : gObj.getColumnByField(col.field).type;\n }\n if (col.isForeignKey) {\n foreignCols.push(col);\n }\n else {\n defaultFltrCols.push(col);\n }\n }\n if (defaultFltrCols.length) {\n for (var i = 0, len = defaultFltrCols.length; i < len; i++) {\n defaultFltrCols[parseInt(i.toString(), 10)].uid = defaultFltrCols[parseInt(i.toString(), 10)].uid ||\n this.parent.grabColumnByFieldFromAllCols(defaultFltrCols[parseInt(i.toString(), 10)].field).uid;\n }\n var excelPredicate = CheckBoxFilterBase.getPredicate(defaultFltrCols);\n for (var _c = 0, _d = Object.keys(excelPredicate); _c < _d.length; _c++) {\n var prop = _d[_c];\n predicateList.push(excelPredicate[\"\" + prop]);\n }\n }\n if (foreignCols.length) {\n for (var _e = 0, foreignCols_1 = foreignCols; _e < foreignCols_1.length; _e++) {\n var col = foreignCols_1[_e];\n col.uid = col.uid || this.parent.grabColumnByFieldFromAllCols(col.field).uid;\n var column_1 = this.parent.grabColumnByUidFromAllCols(col.uid);\n if (!column_1) {\n this.parent.log('initial_action', { moduleName: 'filter', columnName: col.field });\n }\n if (column_1.isForeignColumn() && getColumnByForeignKeyValue(col.field, foreignColumn) && !skipFoerign) {\n actualFilter.push(col);\n if (!column_1.columnData.length) {\n foreignColEmpty = true;\n }\n predicateList = this.fGeneratePredicate(column_1, predicateList);\n }\n else {\n var excelPredicate = CheckBoxFilterBase.getPredicate(columns);\n for (var _f = 0, _g = Object.keys(excelPredicate); _f < _g.length; _f++) {\n var prop = _g[_f];\n predicateList.push(excelPredicate[\"\" + prop]);\n }\n }\n }\n }\n if (predicateList.length && !foreignColEmpty) {\n query.where(Predicate.and(predicateList));\n }\n else {\n this.parent.notify(events.showEmptyGrid, {});\n }\n }\n return query;\n };\n Data.prototype.fGeneratePredicate = function (col, predicateList) {\n var fPredicate = {};\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(fPredicate.predicate);\n }\n }\n return predicateList;\n };\n /**\n * The function is used to get dataManager promise by executing given Query.\n *\n * @param {object} args - specifies the object\n * @param {string} args.requestType - Defines the request type\n * @param {string[]} args.foreignKeyData - Defines the foreignKeyData.string\n * @param {Object} args.data - Defines the data.\n * @param {number} args.index - Defines the index .\n * @param {Query} query - Defines the query which will execute along with data processing.\n * @returns {Promise} - returns the object\n * @hidden\n */\n Data.prototype.getData = function (args, query) {\n var _this = this;\n if (args === void 0) { args = { requestType: '' }; }\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ?\n args.foreignKeyData : this.parent.getPrimaryKeyFieldNames());\n this.parent.log('datasource_syntax_mismatch', { dataState: this.parent });\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n var def = this.eventPromise(args, query, key);\n return def.promise;\n }\n else {\n var crud = void 0;\n switch (args.requestType) {\n case 'delete':\n query = query ? query : this.generateQuery();\n // eslint-disable-next-line no-case-declarations\n var len = Object.keys(args.data).length;\n if (len === 1) {\n crud = this.dataManager.remove(key, args.data[0], query.fromTable, query);\n }\n else {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n changes.deletedRecords = args.data;\n crud = this.dataManager.saveChanges(changes, key, query.fromTable, query.requiresCount());\n }\n break;\n case 'save':\n query = query ? query : this.generateQuery();\n args.index = isNullOrUndefined(args.index) ? 0 : args.index;\n crud = this.dataManager.insert(args.data, query.fromTable, query, args.index);\n break;\n }\n var promise = 'promise';\n args[\"\" + promise] = crud;\n // eslint-disable-next-line no-prototype-builtins\n if (crud && !Array.isArray(crud) && !crud.hasOwnProperty('deletedRecords')) {\n return crud.then(function () {\n return _this.insert(query, args);\n });\n }\n else {\n return this.insert(query, args);\n }\n }\n };\n Data.prototype.insert = function (query, args) {\n if (args.requestType === 'save') {\n this.parent.notify(events.recordAdded, args);\n }\n return this.executeQuery(query);\n };\n Data.prototype.executeQuery = function (query) {\n var _this = this;\n if (this.dataManager.ready) {\n var deferred_1 = new Deferred();\n var ready = this.dataManager.ready;\n ready.then(function () {\n _this.dataManager.executeQuery(query).then(function (result) {\n deferred_1.resolve(result);\n });\n }).catch(function (e) {\n deferred_1.reject(e);\n });\n return deferred_1.promise;\n }\n else {\n return this.dataManager.executeQuery(query);\n }\n };\n Data.prototype.formatGroupColumn = function (value, field) {\n var serviceLocator = this.serviceLocator;\n var column = this.getColumnByField(field);\n var date = value;\n if (!column.type) {\n column.type = date.getDay ? (date.getHours() > 0 || date.getMinutes() > 0 ||\n date.getSeconds() > 0 || date.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n if (isNullOrUndefined(column.getFormatter())) {\n setFormatter(serviceLocator, column);\n }\n var formatVal = ValueFormatter.prototype.toView(value, column.getFormatter());\n return formatVal;\n };\n Data.prototype.crudActions = function (args) {\n var query = this.generateQuery();\n var promise = null;\n var pr = 'promise';\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ? args.foreignKeyData :\n this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.eventPromise(args, query, key);\n }\n switch (args.requestType) {\n case 'save':\n promise = this.dataManager.update(key, args.data, query.fromTable, query, args.previousData);\n break;\n }\n args[\"\" + pr] = promise ? promise : args[\"\" + pr];\n this.parent.notify(events.crudAction, args);\n };\n /**\n * @param {object} changes - specifies the changes\n * @param {string} key - specifies the key\n * @param {object} original - specifies the original data\n * @param {Query} query - specifies the query\n * @returns {Promise} returns the object\n * @hidden\n */\n Data.prototype.saveChanges = function (changes, key, original, query) {\n if (query === void 0) { query = this.generateQuery(); }\n query.requiresCount();\n if ('result' in this.parent.dataSource) {\n var deff = new Deferred();\n var args = {\n requestType: 'batchsave', changes: changes, key: key, query: query,\n endEdit: deff.resolve\n };\n this.setState({ isPending: true, resolver: deff.resolve });\n this.parent.trigger(events.dataSourceChanged, args);\n return deff.promise;\n }\n else {\n var promise = this.dataManager.saveChanges(changes, key, query.fromTable, query, original);\n return promise;\n }\n };\n Data.prototype.getKey = function (keys) {\n if (keys && keys.length) {\n return keys[0];\n }\n return undefined;\n };\n /**\n * @returns {boolean} returns whether its remote data\n * @hidden\n */\n Data.prototype.isRemote = function () {\n return this.dataManager.dataSource.offline !== true && this.dataManager.dataSource.url !== undefined &&\n this.dataManager.dataSource.url !== '';\n };\n Data.prototype.addRows = function (e) {\n for (var i = e.records.length; i > 0; i--) {\n this.dataManager.dataSource.json.splice(e.toIndex, 0, e.records[i - 1]);\n }\n };\n Data.prototype.removeRows = function (e) {\n var json = this.dataManager.dataSource.json;\n this.dataManager.dataSource.json = json.filter(function (value) { return e.records.indexOf(value) === -1; });\n };\n Data.prototype.getColumnByField = function (field) {\n var col;\n return (this.parent.columnModel).some(function (column) {\n col = column;\n return column.field === field;\n }) && col;\n };\n Data.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowsAdded, this.addRows);\n this.parent.off(events.rowsRemoved, this.removeRows);\n this.parent.off(events.dataSourceModified, this.initDataManager);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.updateData, this.crudActions);\n this.parent.off(events.addDeleteAction, this.getData);\n this.parent.off(events.autoCol, this.refreshFilteredCols);\n this.parent.off(events.columnsPrepared, this.refreshFilteredCols);\n };\n Data.prototype.getState = function () {\n return this.dataState;\n };\n Data.prototype.setState = function (state) {\n return this.dataState = state;\n };\n Data.prototype.getForeignKeyDataState = function () {\n return this.foreignKeyDataState;\n };\n Data.prototype.setForeignKeyDataState = function (state) {\n this.foreignKeyDataState = state;\n };\n Data.prototype.getStateEventArgument = function (query) {\n var adaptr = new UrlAdaptor();\n var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n var state = adaptr.processQuery(dm, query);\n var data = JSON.parse(state.data);\n return extend(data, state.pvtData);\n };\n Data.prototype.eventPromise = function (args, query, key) {\n var _this = this;\n var dataArgs = args;\n var state = this.getStateEventArgument(query);\n var def = new Deferred();\n var deff = new Deferred();\n if (args.requestType !== undefined && this.dataState.isDataChanged !== false) {\n state.action = args;\n if (args.requestType === 'save' || args.requestType === 'delete') {\n var editArgs_1 = args;\n editArgs_1.key = key;\n var promise = 'promise';\n editArgs_1[\"\" + promise] = deff.promise;\n editArgs_1.state = state;\n this.setState({ isPending: true, resolver: deff.resolve });\n dataArgs.endEdit = deff.resolve;\n dataArgs.cancelEdit = deff.reject;\n this.parent.trigger(events.dataSourceChanged, editArgs_1);\n deff.promise.then(function () {\n _this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n if (editArgs_1.requestType === 'save') {\n _this.parent.notify(events.recordAdded, editArgs_1);\n }\n _this.parent.trigger(events.dataStateChange, state);\n })\n .catch(function () { return void 0; });\n }\n else {\n this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n this.parent.trigger(events.dataStateChange, state);\n }\n }\n else {\n this.setState({});\n def.resolve(this.parent.dataSource);\n }\n return def;\n };\n /**\n * Gets the columns where searching needs to be performed from the Grid.\n *\n * @returns {string[]} returns the searched column field names\n */\n Data.prototype.getSearchColumnFieldNames = function () {\n var colFieldNames = [];\n var columns = this.parent.getColumns();\n for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n var col = columns_2[_i];\n if (col.allowSearching && !isNullOrUndefined(col.field)) {\n colFieldNames.push(col.field);\n }\n }\n return colFieldNames;\n };\n Data.prototype.refreshFilteredCols = function () {\n if (this.parent.allowFiltering && this.parent.filterSettings.columns.length) {\n refreshFilteredColsUid(this.parent, this.parent.filterSettings.columns);\n }\n };\n return Data;\n}());\nexport { Data };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Row\n *\n * @hidden\n */\nvar Row = /** @class */ (function () {\n function Row(options, parent) {\n merge(this, options);\n this.parent = parent;\n }\n Row.prototype.clone = function () {\n var row = new Row({});\n merge(row, this);\n row.cells = this.cells.map(function (cell) { return cell.clone(); });\n return row;\n };\n /**\n * Replaces the row data and grid refresh the particular row element only.\n *\n * @param {Object} data - To update new data for the particular row.\n * @returns {void}\n */\n Row.prototype.setRowValue = function (data) {\n if (!this.parent) {\n return;\n }\n var key = this.data[this.parent.getPrimaryKeyFieldNames()[0]];\n this.parent.setRowData(key, data);\n };\n /**\n * Replaces the given field value and refresh the particular cell element only.\n *\n * @param {string} field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n * @returns {void}\n */\n Row.prototype.setCellValue = function (field, value) {\n if (!this.parent) {\n return;\n }\n var isValDiff = !(this.data[\"\" + field].toString() === value.toString());\n if (isValDiff) {\n var pKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var key = this.data[\"\" + pKeyField];\n this.parent.setCellValue(key, field, value);\n this.makechanges(pKeyField, this.data);\n }\n else {\n return;\n }\n };\n Row.prototype.makechanges = function (key, data) {\n if (!this.parent) {\n return;\n }\n var gObj = this.parent;\n var dataManager = gObj.getDataModule().dataManager;\n dataManager.update(key, data);\n };\n return Row;\n}());\nexport { Row };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Cell\n *\n * @hidden\n */\nvar Cell = /** @class */ (function () {\n function Cell(options) {\n this.isSpanned = false;\n this.isRowSpanned = false;\n merge(this, options);\n }\n Cell.prototype.clone = function () {\n var cell = new Cell({});\n merge(cell, this);\n return cell;\n };\n return Cell;\n}());\nexport { Cell };\n","import { isNullOrUndefined, attributes } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject } from '../base/util';\nimport { CellType } from '../base/enum';\n/**\n * `CellMergeRender` module.\n *\n * @hidden\n */\nvar CellMergeRender = /** @class */ (function () {\n function CellMergeRender(serviceLocator, parent) {\n this.serviceLocator = serviceLocator;\n this.parent = parent;\n }\n CellMergeRender.prototype.render = function (cellArgs, row, i, td) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[parseInt(i.toString(), 10)].cellType\n || CellType.Data);\n var colSpan = row.cells[parseInt(i.toString(), 10)].cellSpan ? row.cells[parseInt(i.toString(), 10)].cellSpan :\n (cellArgs.colSpan + i) <= row.cells.length ? cellArgs.colSpan : row.cells.length - i;\n var rowSpan = cellArgs.rowSpan;\n var visible = 0;\n var spannedCell;\n if (row.index > 0) {\n var rowsObject = this.parent.isFrozenGrid() ?\n this.parent.contentModule.tempFreezeRows : this.parent.getRowsObject();\n var cells = this.parent.groupSettings.columns.length > 0 &&\n !rowsObject[row.index - 1].isDataRow ? rowsObject[row.index].cells : rowsObject[row.index - 1].cells;\n var targetCell_1 = row.cells[parseInt(i.toString(), 10)];\n var uid_1 = 'uid';\n spannedCell = cells.filter(function (cell) { return cell.column.uid === targetCell_1.column[\"\" + uid_1]; })[0];\n }\n var colSpanLen = spannedCell && spannedCell.colSpanRange > 1 && spannedCell.rowSpanRange > 1 ?\n spannedCell.colSpanRange : colSpan;\n for (var j = i + 1; j < i + colSpanLen && j < row.cells.length; j++) {\n if (row.cells[parseInt(j.toString(), 10)].visible === false) {\n visible++;\n }\n else {\n row.cells[parseInt(j.toString(), 10)].isSpanned = true;\n }\n }\n if (visible > 0) {\n for (var j = i + colSpan; j < i + colSpan + visible && j < row.cells.length; j++) {\n row.cells[parseInt(j.toString(), 10)].isSpanned = true;\n }\n if (i + colSpan + visible >= row.cells.length) {\n colSpan -= (i + colSpan + visible) - row.cells.length;\n }\n }\n if (row.cells[parseInt(i.toString(), 10)].cellSpan) {\n row.data[cellArgs.column.field] = row.cells[parseInt(i.toString(), 10)].spanText;\n td = cellRenderer.render(row.cells[parseInt(i.toString(), 10)], row.data, { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' });\n }\n if (colSpan > 1) {\n attributes(td, { 'colSpan': colSpan.toString(), 'aria-colSpan': colSpan.toString() });\n }\n if (rowSpan > 1) {\n attributes(td, { 'rowspan': rowSpan.toString(), 'aria-rowspan': rowSpan.toString() });\n row.cells[parseInt(i.toString(), 10)].isRowSpanned = true;\n row.cells[parseInt(i.toString(), 10)].rowSpanRange = Number(rowSpan);\n if (colSpan > 1) {\n row.cells[parseInt(i.toString(), 10)].colSpanRange = Number(colSpan);\n }\n }\n if (row.index > 0 && (spannedCell.rowSpanRange > 1)) {\n row.cells[parseInt(i.toString(), 10)].isSpanned = true;\n row.cells[parseInt(i.toString(), 10)].rowSpanRange = Number(spannedCell.rowSpanRange - 1);\n row.cells[parseInt(i.toString(), 10)].colSpanRange = spannedCell.rowSpanRange > 0 ? spannedCell.colSpanRange : 1;\n }\n if (this.parent.enableColumnVirtualization && !row.cells[parseInt(i.toString(), 10)].cellSpan &&\n !this.containsKey(cellArgs.column.field, cellArgs.data[cellArgs.column.field])) {\n this.backupMergeCells(cellArgs.column.field, cellArgs.data[cellArgs.column.field], cellArgs.colSpan);\n }\n return td;\n };\n CellMergeRender.prototype.backupMergeCells = function (fName, data, span) {\n this.setMergeCells(this.generteKey(fName, data), span);\n };\n CellMergeRender.prototype.generteKey = function (fname, data) {\n return fname + '__' + data.toString();\n };\n CellMergeRender.prototype.splitKey = function (key) {\n return key.split('__');\n };\n CellMergeRender.prototype.containsKey = function (fname, data) {\n // eslint-disable-next-line no-prototype-builtins\n return this.getMergeCells().hasOwnProperty(this.generteKey(fname, data));\n };\n CellMergeRender.prototype.getMergeCells = function () {\n return this.parent.mergeCells;\n };\n CellMergeRender.prototype.setMergeCells = function (key, span) {\n this.parent.mergeCells[\"\" + key] = span;\n };\n CellMergeRender.prototype.updateVirtualCells = function (rows) {\n var mCells = this.getMergeCells();\n for (var _i = 0, _a = Object.keys(mCells); _i < _a.length; _i++) {\n var key = _a[_i];\n var value = mCells[\"\" + key];\n var merge = this.splitKey(key);\n var columnIndex = this.getIndexFromAllColumns(merge[0]);\n var vColumnIndices = this.parent.getColumnIndexesInView();\n var span = value - (vColumnIndices[0] - columnIndex);\n if (columnIndex < vColumnIndices[0] && span > 1) {\n for (var _b = 0, rows_1 = rows; _b < rows_1.length; _b++) {\n var row = rows_1[_b];\n if (row.data[merge[0]].toString() === merge[1].toString()) {\n row.cells[0].cellSpan = span;\n row.cells[0].spanText = merge[1];\n break;\n }\n }\n }\n }\n return rows;\n };\n CellMergeRender.prototype.getIndexFromAllColumns = function (field) {\n var index = iterateArrayOrObject(this.parent.getVisibleColumns(), function (item, index) {\n if (item.field === field) {\n return index;\n }\n return undefined;\n })[0];\n return index;\n };\n return CellMergeRender;\n}());\nexport { CellMergeRender };\n","/**\n * Specifies class names\n */\n/** @hidden */\nexport var rowCell = 'e-rowcell';\n/** @hidden */\nexport var gridHeader = 'e-gridheader';\n/** @hidden */\nexport var gridContent = 'e-gridcontent';\n/** @hidden */\nexport var gridFooter = 'e-gridfooter';\n/** @hidden */\nexport var headerContent = 'e-headercontent';\n/** @hidden */\nexport var movableContent = 'e-movablecontent';\n/** @hidden */\nexport var movableHeader = 'e-movableheader';\n/** @hidden */\nexport var frozenContent = 'e-frozencontent';\n/** @hidden */\nexport var frozenHeader = 'e-frozenheader';\n/** @hidden */\nexport var content = 'e-content';\n/** @hidden */\nexport var table = 'e-table';\n/** @hidden */\nexport var row = 'e-row';\n/** @hidden */\nexport var gridChkBox = 'e-gridchkbox';\n/** @hidden */\nexport var editedRow = 'e-editedrow';\n/** @hidden */\nexport var addedRow = 'e-addedrow';\n/**\n * Specifies repeated strings\n */\n/** @hidden */\nexport var changedRecords = 'changedRecords';\n/** @hidden */\nexport var addedRecords = 'addedRecords';\n/** @hidden */\nexport var deletedRecords = 'deletedRecords';\n/** @hidden */\nexport var leftRight = 'Left-Right';\n/** @hidden */\nexport var frozenRight = 'frozen-right';\n/** @hidden */\nexport var frozenLeft = 'frozen-left';\n/** @hidden */\nexport var dataColIndex = 'data-colindex';\n/** @hidden */\nexport var ariaColIndex = 'aria-colindex';\n/** @hidden */\nexport var dataRowIndex = 'data-rowindex';\n/** @hidden */\nexport var ariaRowIndex = 'aria-rowindex';\n/** @hidden */\nexport var tbody = 'tbody';\n/** @hidden */\nexport var colGroup = 'colgroup';\n/** @hidden */\nexport var open = 'open';\n/** @hidden */\nexport var change = 'change';\n/** @hidden */\nexport var focus = 'focus';\n/** @hidden */\nexport var create = 'created';\n/** @hidden */\nexport var beforeOpen = 'beforeOpen';\n/** @hidden */\nexport var downArrow = 'downArrow';\n/** @hidden */\nexport var upArrow = 'upArrow';\n/** @hidden */\nexport var pageUp = 'PageUp';\n/** @hidden */\nexport var pageDown = 'PageDown';\n/** @hidden */\nexport var enter = 'enter';\n/** @hidden */\nexport var shiftEnter = 'shiftEnter';\n/** @hidden */\nexport var tab = 'tab';\n/** @hidden */\nexport var shiftTab = 'shiftTab';\n","import { isNullOrUndefined, extend, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, getObject, extendObjWithFn } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport * as literals from '../base/string-literals';\n/**\n * RowRenderer class which responsible for building row content.\n *\n * @hidden\n */\nvar RowRenderer = /** @class */ (function () {\n function RowRenderer(serviceLocator, cellType, parent) {\n this.isSpan = false;\n this.cellType = cellType;\n this.serviceLocator = serviceLocator;\n this.parent = parent;\n this.element = this.parent.createElement('tr');\n }\n /* eslint-disable */\n /**\n * Function to render the row content based on Column[] and data.\n *\n * @param {Row} row - specifies the row\n * @param {Column[]} columns - specifies the columns\n * @param {Object} attributes - specifies the attributes\n * @param {string} rowTemplate - specifies the rowTemplate\n * @param {Element} cloneNode - specifies the cloneNode\n * @returns {Element} returns the element\n */\n /* eslint-enable */\n RowRenderer.prototype.render = function (row, columns, attributes, rowTemplate, cloneNode) {\n return this.refreshRow(row, columns, attributes, rowTemplate, cloneNode);\n };\n /* eslint-disable */\n /**\n * Function to refresh the row content based on Column[] and data.\n *\n * @param {Row} row - specifies the row\n * @param {Column[]} columns - specifies the column\n * @param {boolean} isChanged - specifies isChanged\n * @param {Object} attributes - specifies the attributes\n * @param {string} rowTemplate - specifies the rowTemplate\n * @returns {void}\n */\n /* eslint-enable */\n RowRenderer.prototype.refresh = function (row, columns, isChanged, attributes, rowTemplate) {\n var _this = this;\n if (isChanged) {\n row.data = extendObjWithFn({}, row.changes);\n this.refreshMergeCells(row);\n }\n var node = this.parent.element.querySelector('[data-uid=' + row.uid + ']');\n var tr = this.refreshRow(row, columns, attributes, rowTemplate, null, isChanged);\n var cells = [].slice.call(tr.cells);\n var tempCells = [].slice.call(node.querySelectorAll('.e-templatecell'));\n if (this.parent.isReact && tempCells.length) {\n var _loop_1 = function (col) {\n if (col.template) {\n setTimeout(function () {\n _this.parent.refreshReactColumnTemplateByUid(col.uid, true);\n }, 0);\n return \"break\";\n }\n };\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n var state_1 = _loop_1(col);\n if (state_1 === \"break\")\n break;\n }\n }\n var attr = [].slice.call(tr.attributes);\n attr.map(function (item) {\n node.setAttribute(item['name'], item['value']);\n });\n node.innerHTML = '';\n for (var _a = 0, cells_1 = cells; _a < cells_1.length; _a++) {\n var cell = cells_1[_a];\n node.appendChild(cell);\n }\n };\n // tslint:disable-next-line:max-func-body-length\n RowRenderer.prototype.refreshRow = function (row, columns, attributes, rowTemplate, cloneNode, isEdit) {\n var tr = !isNullOrUndefined(cloneNode) ? cloneNode : this.element.cloneNode();\n var rowArgs = { data: row.data };\n var cellArgs = { data: row.data };\n var chekBoxEnable = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox' && col.field; })[0];\n var value = false;\n if (chekBoxEnable) {\n value = getObject(chekBoxEnable.field, rowArgs.data);\n }\n var selIndex = this.parent.getSelectedRowIndexes();\n if (row.isDataRow) {\n row.isSelected = selIndex.indexOf(row.index) > -1 || value;\n }\n if (row.isDataRow && this.parent.isCheckBoxSelection\n && this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n row.isSelected = true;\n if (selIndex.indexOf(row.index) === -1) {\n selIndex.push(row.index);\n }\n }\n this.buildAttributeFromRow(tr, row);\n addAttributes(tr, extend({}, attributes, {}));\n setStyleAndAttributes(tr, row.attributes);\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var _loop_2 = function (i, len) {\n var cell = row.cells[parseInt(i.toString(), 10)];\n cell.isSelected = row.isSelected;\n cell.isColumnSelected = cell.column.isSelected;\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[parseInt(i.toString(), 10)].cellType\n || CellType.Data);\n var attrs = { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' };\n if (row.isExpand && row.cells[parseInt(i.toString(), 10)].cellType === CellType.DetailExpand) {\n attrs['class'] = this_1.parent.isPrinting ? 'e-detailrowcollapse' : 'e-detailrowexpand';\n }\n var td = cellRenderer.render(row.cells[parseInt(i.toString(), 10)], row.data, attrs, row.isExpand, isEdit);\n if (row.cells[parseInt(i.toString(), 10)].cellType !== CellType.Filter) {\n if (row.cells[parseInt(i.toString(), 10)].cellType === CellType.Data\n || row.cells[parseInt(i.toString(), 10)].cellType === CellType.CommandColumn) {\n var isReactChild = this_1.parent.parentDetails && this_1.parent.parentDetails.parentInstObj &&\n this_1.parent.parentDetails.parentInstObj.isReact;\n if (((this_1.parent.isReact && this_1.parent.requireTemplateRef) || (isReactChild &&\n this_1.parent.parentDetails.parentInstObj.requireTemplateRef)) && cell.isTemplate) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_1 = this_1;\n thisRef_1.parent.renderTemplates(function () {\n var ariaAttr = td.getAttribute('aria-label');\n td.setAttribute('aria-label', td.innerText + ariaAttr);\n thisRef_1.parent.trigger(queryCellInfo, extend(cellArgs, {\n cell: td, column: cell.column, colSpan: 1,\n rowSpan: 1, foreignKeyData: row.cells[parseInt(i.toString(), 10)].foreignKeyData,\n requestType: thisRef_1.parent.requestTypeAction\n }));\n });\n }\n else {\n this_1.parent.trigger(queryCellInfo, extend(cellArgs, {\n cell: td, column: cell.column, colSpan: 1,\n rowSpan: 1, foreignKeyData: row.cells[parseInt(i.toString(), 10)].foreignKeyData,\n requestType: this_1.parent.requestTypeAction\n }));\n }\n var isRowSpanned = false;\n if (row.index > 0 && this_1.isSpan) {\n var rowsObject = this_1.parent.isFrozenGrid() ?\n this_1.parent.contentModule.tempFreezeRows : this_1.parent.getRowsObject();\n var prevRowCells = this_1.parent.groupSettings.columns.length > 0 &&\n !rowsObject[row.index - 1].isDataRow ? rowsObject[row.index].cells : rowsObject[row.index - 1].cells;\n var uid_1 = 'uid';\n var prevRowCell = prevRowCells.filter(function (cell) {\n return cell.column.uid === row.cells[parseInt(i.toString(), 10)].column[\"\" + uid_1];\n })[0];\n isRowSpanned = prevRowCell.isRowSpanned ? prevRowCell.isRowSpanned : prevRowCell.rowSpanRange > 1;\n }\n if (cellArgs.colSpan > 1 || row.cells[parseInt(i.toString(), 10)].cellSpan > 1 || cellArgs.rowSpan > 1\n || isRowSpanned) {\n this_1.isSpan = true;\n var cellMerge = new CellMergeRender(this_1.serviceLocator, this_1.parent);\n td = cellMerge.render(cellArgs, row, i, td);\n }\n }\n if (!row.cells[parseInt(i.toString(), 10)].isSpanned) {\n tr.appendChild(td);\n }\n }\n };\n var this_1 = this;\n for (var i = 0, len = row.cells.length; i < len; i++) {\n _loop_2(i, len);\n }\n var args = { row: tr, rowHeight: this.parent.rowHeight };\n if (row.isDataRow) {\n var eventArg_1 = extend(rowArgs, args);\n eventArg_1.isSelectable = true;\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n var cellTemplate = eventArg_1.row.querySelectorAll('.e-templatecell');\n if (((this.parent.isReact && this.parent.requireTemplateRef) || (isReactChild &&\n this.parent.parentDetails.parentInstObj.requireTemplateRef)) && cellTemplate.length) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_2 = this;\n thisRef_2.parent.renderTemplates(function () {\n thisRef_2.parent.trigger(rowDataBound, eventArg_1);\n });\n }\n else {\n this.parent.trigger(rowDataBound, eventArg_1);\n }\n row.isSelectable = eventArg_1.isSelectable;\n var isDraggable = this.parent.isRowDragable();\n if (this.parent.allowPaging && this.parent.selectionSettings.persistSelection) {\n var primaryKey_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var pKey_1 = row.data ? row.data[\"\" + primaryKey_1] : null;\n var SelectedRecords = eventArg_1.isSelectable ? this.parent.partialSelectedRecords :\n this.parent.disableSelectedRecords;\n if (!SelectedRecords.some(function (data) { return data[\"\" + primaryKey_1] === pKey_1; })) {\n SelectedRecords.push(row.data);\n }\n }\n if (!eventArg_1.isSelectable) {\n this.parent.selectionModule.isPartialSelection = true;\n row.isSelected = false;\n var chkBox = args.row.querySelectorAll('.e-rowcell.e-gridchkbox');\n var isDrag = eventArg_1.row.querySelector('.e-rowdragdrop');\n var cellIdx = this.parent.groupSettings.columns.length + (isDrag || this.parent.isDetail() ? 1 : 0);\n for (var i = 0; i < chkBox.length; i++) {\n chkBox[parseInt(i.toString(), 10)].firstElementChild.classList.add('e-checkbox-disabled');\n chkBox[parseInt(i.toString(), 10)].querySelector('.e-frame').classList.remove('e-check');\n }\n if (row.cells.length) {\n for (var i = cellIdx; i < row.cells.length; i++) {\n var cell = eventArg_1.row.querySelector('.e-rowcell[data-colindex=\"' + row.cells[parseInt(i.toString(), 10)].index + '\"]');\n if (cell) {\n removeClass([cell], ['e-selectionbackground', 'e-active']);\n }\n }\n }\n if (isDrag) {\n removeClass([isDrag], ['e-selectionbackground', 'e-active']);\n }\n }\n if (this.parent.childGrid || isDraggable || this.parent.detailTemplate) {\n var td = tr.querySelectorAll('.e-rowcell:not(.e-hide)')[0];\n if (td) {\n td.classList.add('e-detailrowvisible');\n }\n }\n }\n if (this.parent.enableVirtualization) {\n rowArgs.rowHeight = this.parent.rowHeight;\n }\n if (rowArgs.rowHeight) {\n tr.style.height = rowArgs.rowHeight + 'px';\n }\n else if (this.parent.rowHeight && (tr.querySelector('.e-headercell') || tr.querySelector('.e-groupcaption'))) {\n tr.style.height = this.parent.rowHeight + 'px';\n }\n if (row.cssClass) {\n tr.classList.add(row.cssClass);\n }\n if (row.lazyLoadCssClass) {\n tr.classList.add(row.lazyLoadCssClass);\n }\n if (this.parent.rowRenderingMode === 'Vertical' && this.parent.allowTextWrap && (this.parent.textWrapSettings.wrapMode === 'Header'\n || this.parent.textWrapSettings.wrapMode === 'Both')) {\n tr.classList.add('e-verticalwrap');\n }\n var vFTable = this.parent.enableColumnVirtualization && this.parent.frozenColumns !== 0;\n if (!vFTable && this.parent.aggregates.length && this.parent.element.scrollHeight > this.parent.height) {\n for (var i = 0; i < this.parent.aggregates.length; i++) {\n var property = 'properties';\n var column = 'columns';\n if (this.parent.aggregates[parseInt(i.toString(), 10)][\"\" + property][\"\" + column][0].footerTemplate) {\n var summarycell = [].slice.call(tr.getElementsByClassName('e-summarycell'));\n if (summarycell.length) {\n var lastSummaryCell = (summarycell[summarycell.length - 1]);\n addClass([lastSummaryCell], ['e-lastsummarycell']);\n var firstSummaryCell = (summarycell[0]);\n addClass([firstSummaryCell], ['e-firstsummarycell']);\n }\n }\n }\n }\n return tr;\n };\n RowRenderer.prototype.refreshMergeCells = function (row) {\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n cell.isSpanned = false;\n }\n return row;\n };\n /* eslint-disable */\n /**\n * Function to check and add alternative row css class.\n *\n * @param {Element} tr - specifies the tr element\n * @param {Row} row - specifies the row\n * @returns {void}\n */\n /* eslint-enable */\n RowRenderer.prototype.buildAttributeFromRow = function (tr, row) {\n var attr = {};\n var prop = { 'rowindex': literals.dataRowIndex, 'dataUID': 'data-uid', 'ariaSelected': 'aria-selected' };\n var classes = [];\n if (row.isDataRow) {\n classes.push(literals.row);\n }\n if (row.isAltRow) {\n classes.push('e-altrow');\n }\n if (row.isCaptionRow) {\n classes.push('e-groupcaptionrow');\n }\n if (row.isAggregateRow && row.parentUid) {\n classes.push('e-groupfooterrow');\n }\n if (!isNullOrUndefined(row.index)) {\n attr[literals.ariaRowIndex] = row.index + 1;\n attr[prop.rowindex] = row.index;\n }\n if (row.rowSpan) {\n attr.rowSpan = row.rowSpan;\n }\n if (row.uid) {\n attr[prop.dataUID] = row.uid;\n }\n if (row.isSelected) {\n attr[prop.ariaSelected] = true;\n }\n if (row.visible === false) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(tr, attr);\n };\n return RowRenderer;\n}());\nexport { RowRenderer };\n","import { isNullOrUndefined, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Row } from '../models/row';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\nimport { getUid } from '../base/util';\nimport { getForeignData } from '../../grid/base/util';\nimport * as events from '../base/constant';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar RowModelGenerator = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n *\n * @param {IGrid} parent - specifies the IGrid\n */\n function RowModelGenerator(parent) {\n this.parent = parent;\n }\n RowModelGenerator.prototype.generateRows = function (data, args) {\n var rows = [];\n var startIndex = this.parent.enableVirtualization && args ? args.startIndex : 0;\n startIndex = this.parent.enableInfiniteScrolling && args ? this.getInfiniteIndex(args) : startIndex;\n if (this.parent.enableImmutableMode && args && args.startIndex) {\n startIndex = args.startIndex;\n }\n for (var i = 0, len = Object.keys(data).length; i < len; i++, startIndex++) {\n rows[parseInt(i.toString(), 10)] = this.generateRow(data[parseInt(i.toString(), 10)], startIndex);\n }\n return rows;\n };\n RowModelGenerator.prototype.ensureColumns = function () {\n //TODO: generate dummy column for group, detail here;\n var cols = [];\n if (this.parent.detailTemplate || this.parent.childGrid) {\n var args = {};\n this.parent.notify(events.detailIndentCellInfo, args);\n cols.push(this.generateCell(args, null, CellType.DetailExpand));\n }\n if (this.parent.isRowDragable()) {\n cols.push(this.generateCell({}, null, CellType.RowDragIcon));\n }\n return cols;\n };\n RowModelGenerator.prototype.generateRow = function (data, index, cssClass, indent, pid, tIndex, parentUid) {\n var options = {};\n options.foreignKeyData = {};\n options.uid = getUid('grid-row');\n options.data = data;\n options.index = index;\n options.indent = indent;\n options.tIndex = tIndex;\n options.isDataRow = true;\n options.parentGid = pid;\n options.parentUid = parentUid;\n if (this.parent.isPrinting) {\n if (this.parent.hierarchyPrintMode === 'All') {\n options.isExpand = true;\n }\n else if (this.parent.hierarchyPrintMode === 'Expanded' && this.parent.expandedRows && this.parent.expandedRows[parseInt(index.toString(), 10)]) {\n options.isExpand = this.parent.expandedRows[parseInt(index.toString(), 10)].isExpand;\n }\n }\n options.cssClass = cssClass;\n options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n options.isSelected = this.parent.getSelectedRowIndexes().indexOf(index) > -1;\n this.refreshForeignKeyRow(options);\n var cells = this.ensureColumns();\n var row = new Row(options, this.parent);\n row.cells = this.parent.getFrozenMode() === 'Right' ? this.generateCells(options).concat(cells)\n : cells.concat(this.generateCells(options));\n return row;\n };\n RowModelGenerator.prototype.refreshForeignKeyRow = function (options) {\n var foreignKeyColumns = this.parent.getForeignKeyColumns();\n for (var i = 0; i < foreignKeyColumns.length; i++) {\n setValue(foreignKeyColumns[parseInt(i.toString(), 10)].field, getForeignData(foreignKeyColumns[parseInt(i.toString(), 10)], options.data), options.foreignKeyData);\n }\n };\n RowModelGenerator.prototype.generateCells = function (options) {\n var dummies = this.parent.getColumns();\n var tmp = [];\n for (var i = 0; i < dummies.length; i++) {\n tmp.push(this.generateCell(dummies[parseInt(i.toString(), 10)], options.uid, isNullOrUndefined(dummies[parseInt(i.toString(), 10)].commands) ? undefined : CellType.CommandColumn, null, i, options.foreignKeyData));\n }\n return tmp;\n };\n /**\n *\n * @param {Column} column - Defines column details\n * @param {string} rowId - Defines row id\n * @param {CellType} cellType - Defines cell type\n * @param {number} colSpan - Defines colSpan\n * @param {number} oIndex - Defines index\n * @param {Object} foreignKeyData - Defines foreign key data\n * @returns {Cell} returns cell model\n * @hidden\n */\n RowModelGenerator.prototype.generateCell = function (column, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': !isNullOrUndefined(column.field || column.template),\n 'isTemplate': !isNullOrUndefined(column.template),\n 'rowID': rowId,\n 'column': column,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': column.commands,\n 'isForeignKey': column.isForeignColumn && column.isForeignColumn(),\n 'foreignKeyData': column.isForeignColumn && column.isForeignColumn() && getValue(column.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n RowModelGenerator.prototype.refreshRows = function (input) {\n for (var i = 0; i < input.length; i++) {\n this.refreshForeignKeyRow(input[parseInt(i.toString(), 10)]);\n input[parseInt(i.toString(), 10)].cells = this.generateCells(input[parseInt(i.toString(), 10)]);\n }\n return input;\n };\n RowModelGenerator.prototype.getInfiniteIndex = function (args) {\n return args.requestType === 'infiniteScroll' || args.requestType === 'delete' || args.action === 'add'\n ? (isNullOrUndefined(args.startIndex) ? args['index'] : args.startIndex) : 0;\n };\n return RowModelGenerator;\n}());\nexport { RowModelGenerator };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Row } from '../models/row';\nimport { Column } from '../models/column';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { calculateAggregate, getUid } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\n/**\n * Summary row model generator\n *\n * @hidden\n */\nvar SummaryModelGenerator = /** @class */ (function () {\n /**\n * Constructor for Summary row model generator\n *\n * @param {IGrid} parent - specifies the IGrid\n */\n function SummaryModelGenerator(parent) {\n this.parent = parent;\n }\n SummaryModelGenerator.prototype.getData = function () {\n var _this = this;\n var rows = [];\n var row = this.parent.aggregates.slice();\n for (var i = 0; i < row.length; i++) {\n var columns = row[parseInt(i.toString(), 10)].columns.filter(function (column) {\n return !(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)\n || _this.columnSelector(column);\n });\n if (columns.length) {\n rows.push({ columns: columns });\n }\n }\n return rows;\n };\n SummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.footerTemplate !== undefined;\n };\n SummaryModelGenerator.prototype.getColumns = function (start, end) {\n var columns = [];\n if (this.parent.detailTemplate || !isNullOrUndefined(this.parent.childGrid)) {\n columns.push(new Column({}));\n }\n if (this.parent.allowGrouping) {\n for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n columns.push(new Column({}));\n }\n }\n if (this.parent.isRowDragable() && !start) {\n columns.push(new Column({}));\n }\n columns.push.apply(columns, this.parent.getColumns());\n end = end && !start ? end + this.parent.getIndentCount() : end;\n return isNullOrUndefined(start) ? columns : columns.slice(start, end);\n };\n SummaryModelGenerator.prototype.generateRows = function (input, args, start, end, columns) {\n if (input.length === 0) {\n if (args === undefined || !args.count) {\n return [];\n }\n }\n var data = this.buildSummaryData(input, args);\n var rows = [];\n var row = this.getData();\n for (var i = 0; i < row.length; i++) {\n rows.push(this.getGeneratedRow(row[parseInt(i.toString(), 10)], data[parseInt(i.toString(), 10)], args ? args.level : undefined, start, end, args ? args.parentUid : undefined, columns));\n }\n return rows;\n };\n SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end, parentUid, columns) {\n var tmp = [];\n var indents = this.getIndentByLevel();\n var isDetailGridAlone = !isNullOrUndefined(this.parent.childGrid);\n var indentLength = !start ? this.parent.getIndentCount() : 0;\n if (this.parent.groupSettings.columns.length && this.parent.allowRowDragAndDrop) {\n indents.push('e-indentcelltop');\n }\n else if (this.parent.isRowDragable() && !start) {\n indents = ['e-indentcelltop'];\n }\n var values = columns ? columns : this.getColumns(start, end);\n for (var i = 0; i < values.length; i++) {\n tmp.push(this.getGeneratedCell(values[parseInt(i.toString(), 10)], summaryRow, i >= indentLength ? this.getCellType() :\n i === 0 && this.parent.childGrid ? CellType.DetailFooterIntent : CellType.Indent, indents[parseInt(i.toString(), 10)], isDetailGridAlone));\n }\n var row = new Row({ data: data, attributes: { class: 'e-summaryrow' } });\n row.cells = tmp;\n row.uid = getUid('grid-row');\n row.parentUid = parentUid;\n row.isAggregateRow = true;\n row.visible = tmp.some(function (cell) { return cell.isDataCell && cell.visible; });\n return row;\n };\n SummaryModelGenerator.prototype.getGeneratedCell = function (column, summaryRow, cellType, indent, isDetailGridAlone) {\n //Get the summary column by display\n var sColumn = summaryRow.columns.filter(function (scolumn) { return scolumn.columnName === column.field; })[0];\n var attrs = {\n 'style': { 'textAlign': column.textAlign },\n 'e-mappinguid': column.uid, index: column.index\n };\n if (indent) {\n attrs.class = indent;\n }\n if (isNullOrUndefined(indent) && isDetailGridAlone) {\n attrs.class = 'e-detailindentcelltop';\n }\n var opt = {\n 'visible': column.visible,\n 'isDataCell': !isNullOrUndefined(sColumn),\n 'isTemplate': sColumn && !isNullOrUndefined(sColumn.footerTemplate\n || sColumn.groupFooterTemplate || sColumn.groupCaptionTemplate),\n 'column': sColumn || {},\n 'attributes': attrs,\n 'cellType': cellType\n };\n opt.column.headerText = column.headerText;\n return new Cell(opt);\n };\n SummaryModelGenerator.prototype.buildSummaryData = function (data, args) {\n var dummy = [];\n var summaryRows = this.getData();\n var single = {};\n for (var i = 0; i < summaryRows.length; i++) {\n single = {};\n var column = summaryRows[parseInt(i.toString(), 10)].columns;\n for (var j = 0; j < column.length; j++) {\n single = this.setTemplate(column[parseInt(j.toString(), 10)], (args && args.aggregates) ? args : data, single);\n }\n dummy.push(single);\n }\n return dummy;\n };\n SummaryModelGenerator.prototype.getIndentByLevel = function () {\n return this.parent.groupSettings.columns.map(function () { return 'e-indentcelltop'; });\n };\n SummaryModelGenerator.prototype.setTemplate = function (column, data, single) {\n var types = column.type;\n var helper = {};\n var formatFn = column.getFormatter() || (function () { return function (a) { return a; }; })();\n var group = data;\n if (!(types instanceof Array)) {\n types = [column.type];\n }\n for (var i = 0; i < types.length; i++) {\n var key = column.field + ' - ' + types[parseInt(i.toString(), 10)].toLowerCase();\n var disp = column.columnName;\n var val = types[parseInt(i.toString(), 10)] !== 'Custom' && group.aggregates && key in group.aggregates ? group.aggregates[\"\" + key] :\n calculateAggregate(types[parseInt(i.toString(), 10)], group.aggregates ? group : data, column, this.parent);\n single[\"\" + disp] = single[\"\" + disp] || {};\n single[\"\" + disp][\"\" + key] = val;\n single[\"\" + disp][types[parseInt(i.toString(), 10)]] = !isNullOrUndefined(val) ? formatFn(val) : ' ';\n if (group.field) {\n single[\"\" + disp].field = group.field;\n single[\"\" + disp].key = group.key;\n }\n }\n helper.format = column.getFormatter();\n column.setTemplate(helper);\n return single;\n };\n SummaryModelGenerator.prototype.getCellType = function () {\n return CellType.Summary;\n };\n return SummaryModelGenerator;\n}());\nexport { SummaryModelGenerator };\nvar GroupSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(GroupSummaryModelGenerator, _super);\n function GroupSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GroupSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupFooterTemplate !== undefined;\n };\n GroupSummaryModelGenerator.prototype.getIndentByLevel = function (level) {\n if (level === void 0) { level = this.parent.groupSettings.columns.length; }\n if (this.parent.allowRowDragAndDrop && this.parent.groupSettings.columns.length) {\n level -= 1;\n }\n return this.parent.groupSettings.columns.map(function (v, indx) { return indx <= level - 1 ? '' : 'e-indentcelltop'; });\n };\n GroupSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.GroupSummary;\n };\n return GroupSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { GroupSummaryModelGenerator };\nvar CaptionSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(CaptionSummaryModelGenerator, _super);\n function CaptionSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CaptionSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupCaptionTemplate !== undefined;\n };\n CaptionSummaryModelGenerator.prototype.getData = function () {\n var initVal = { columns: [] };\n return [_super.prototype.getData.call(this).reduce(function (prev, cur) {\n prev.columns = prev.columns.concat(cur.columns);\n return prev;\n }, initVal)];\n };\n CaptionSummaryModelGenerator.prototype.isEmpty = function () {\n return (this.getData()[0].columns || []).length === 0;\n };\n CaptionSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.CaptionSummary;\n };\n return CaptionSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { CaptionSummaryModelGenerator };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Row } from '../models/row';\nimport { isNullOrUndefined, extend, setValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { getForeignData, getUid } from '../../grid/base/util';\n/**\n * GroupModelGenerator is used to generate group caption rows and data rows.\n *\n * @hidden\n */\nvar GroupModelGenerator = /** @class */ (function (_super) {\n __extends(GroupModelGenerator, _super);\n function GroupModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.rows = [];\n /** @hidden */\n _this.index = 0;\n _this.infiniteChildCount = 0;\n _this.renderInfiniteAgg = true;\n _this.parent = parent;\n _this.summaryModelGen = new GroupSummaryModelGenerator(parent);\n _this.captionModelGen = new CaptionSummaryModelGenerator(parent);\n return _this;\n }\n GroupModelGenerator.prototype.generateRows = function (data, args) {\n if (this.parent.groupSettings.columns.length === 0) {\n return _super.prototype.generateRows.call(this, data, args);\n }\n this.isInfiniteScroll = (args.requestType === 'infiniteScroll');\n this.rows = [];\n this.index = this.parent.enableVirtualization || this.isInfiniteScroll ? args.startIndex : 0;\n for (var i = 0, len = data.length; i < len; i++) {\n this.infiniteChildCount = 0;\n this.renderInfiniteAgg = true;\n this.getGroupedRecords(0, data[parseInt(i.toString(), 10)], data.level, i, undefined, this.rows.length);\n }\n this.index = 0;\n if (this.parent.isCollapseStateEnabled()) {\n this.ensureRowVisibility();\n }\n return this.rows;\n };\n GroupModelGenerator.prototype.getGroupedRecords = function (index, data, raw, parentid, childId, tIndex, parentUid) {\n var _a;\n var level = raw;\n if (isNullOrUndefined(data.items)) {\n if (isNullOrUndefined(data.GroupGuid)) {\n this.rows = this.rows.concat(this.generateDataRows(data, index, parentid, this.rows.length, parentUid));\n }\n else {\n for (var j = 0, len = data.length; j < len; j++) {\n this.getGroupedRecords(index, data[parseInt(j.toString(), 10)], data.level, parentid, index, this.rows.length, parentUid);\n }\n }\n }\n else {\n var preCaption = void 0;\n var captionRow = this.generateCaptionRow(data, index, parentid, childId, tIndex, parentUid);\n if (this.isInfiniteScroll) {\n preCaption = this.getPreCaption(index, captionRow.data.key);\n }\n if (!preCaption) {\n this.rows = this.rows.concat(captionRow);\n }\n else {\n captionRow.uid = preCaption.uid;\n }\n if (data.items && data.items.length) {\n this.getGroupedRecords(index + 1, data.items, data.items.level, parentid, index + 1, this.rows.length, captionRow.uid);\n }\n if (this.parent.aggregates.length && this.isRenderAggregate(captionRow)) {\n var rowCnt = this.rows.length;\n (_a = this.rows).push.apply(_a, this.summaryModelGen.generateRows(data, { level: level, parentUid: captionRow.uid }));\n for (var i = rowCnt - 1; i >= 0; i--) {\n if (this.rows[parseInt(i.toString(), 10)].isCaptionRow) {\n this.rows[parseInt(i.toString(), 10)].aggregatesCount = this.rows.length - rowCnt;\n }\n else if (!this.rows[parseInt(i.toString(), 10)].isCaptionRow && !this.rows[parseInt(i.toString(), 10)].isDataRow) {\n break;\n }\n }\n }\n if (preCaption) {\n this.setInfiniteRowVisibility(preCaption);\n }\n }\n };\n GroupModelGenerator.prototype.isRenderAggregate = function (data) {\n if (this.parent.enableInfiniteScrolling) {\n if (!this.renderInfiniteAgg) {\n return false;\n }\n this.getPreCaption(data.indent, data.data.key);\n this.renderInfiniteAgg = data.data.count === this.infiniteChildCount;\n return this.renderInfiniteAgg;\n }\n return !this.parent.enableInfiniteScrolling;\n };\n GroupModelGenerator.prototype.getPreCaption = function (indent, key) {\n var rowObj = this.parent.getRowsObject().concat(this.rows);\n var preCap;\n this.infiniteChildCount = 0;\n var i = rowObj.length;\n while (i--) {\n if (rowObj[parseInt(i.toString(), 10)].isCaptionRow && rowObj[parseInt(i.toString(), 10)].indent === indent\n && rowObj[parseInt(i.toString(), 10)].data.key === key) {\n preCap = rowObj[parseInt(i.toString(), 10)];\n }\n if (rowObj[parseInt(i.toString(), 10)].indent === indent || rowObj[parseInt(i.toString(), 10)].indent < indent) {\n break;\n }\n if (rowObj[parseInt(i.toString(), 10)].indent === indent + 1) {\n this.infiniteChildCount++;\n }\n }\n return preCap;\n };\n GroupModelGenerator.prototype.getCaptionRowCells = function (field, indent, data) {\n var cells = [];\n var visibles = [];\n var column = this.parent.getColumnByField(field);\n var indexes = this.parent.getColumnIndexesInView();\n if (this.parent.enableColumnVirtualization) {\n column = this.parent.columns.filter(function (c) { return c.field === field; })[0];\n }\n var groupedLen = this.parent.groupSettings.columns.length;\n var gObj = this.parent;\n if (!this.parent.enableColumnVirtualization || indexes.indexOf(indent) !== -1) {\n for (var i = 0; i < indent; i++) {\n cells.push(this.generateIndentCell());\n }\n cells.push(this.generateCell({}, null, CellType.Expand));\n }\n indent = this.parent.enableColumnVirtualization ? 1 :\n (this.parent.getVisibleColumns().length + groupedLen + (gObj.detailTemplate || gObj.childGrid ? 1 : 0) -\n indent + (this.parent.getVisibleColumns().length ? -1 : 0));\n //Captionsummary cells will be added here.\n if (this.parent.aggregates.length && !this.captionModelGen.isEmpty()) {\n var captionCells = this.captionModelGen.generateRows(data)[0];\n extend(data, captionCells.data);\n var cIndex_1 = 0;\n captionCells.cells.some(function (cell, index) { cIndex_1 = index; return cell.visible && cell.isDataCell; });\n visibles = captionCells.cells.slice(cIndex_1).filter(function (cell) { return cell.visible; });\n if (captionCells.visible && visibles[0].column.field === this.parent.getVisibleColumns()[0].field) {\n visibles = visibles.slice(1);\n }\n if (this.parent.getVisibleColumns().length === 1) {\n visibles = [];\n }\n indent = indent - visibles.length;\n }\n var cols = (!this.parent.enableColumnVirtualization ? [column] : this.parent.getColumns());\n var wFlag = true;\n for (var j = 0; j < cols.length; j++) {\n var tmpFlag = wFlag && indexes.indexOf(indent) !== -1;\n if (tmpFlag) {\n wFlag = false;\n }\n var cellType = !this.parent.enableColumnVirtualization || tmpFlag ?\n CellType.GroupCaption : CellType.GroupCaptionEmpty;\n indent = this.parent.enableColumnVirtualization && cellType === CellType.GroupCaption ? indent + groupedLen : indent;\n if (gObj.isRowDragable()) {\n indent++;\n }\n cells.push(this.generateCell(column, null, cellType, indent));\n }\n cells.push.apply(cells, visibles);\n return cells;\n };\n /**\n * @param {GroupedData} data - specifies the data\n * @param {number} indent - specifies the indent\n * @param {number} parentID - specifies the parentID\n * @param {number} childID - specifies the childID\n * @param {number} tIndex - specifies the TIndex\n * @param {string} parentUid - specifies the ParentUid\n * @returns {Row} returns the Row object\n * @hidden\n */\n GroupModelGenerator.prototype.generateCaptionRow = function (data, indent, parentID, childID, tIndex, parentUid) {\n var options = {};\n var records = 'records';\n var col = this.parent.getColumnByField(data.field);\n options.data = extend({}, data);\n if (col) {\n options.data.field = data.field;\n }\n options.isDataRow = false;\n options.isExpand = !this.parent.groupSettings.enableLazyLoading && !this.parent.isCollapseStateEnabled();\n options.parentGid = parentID;\n options.childGid = childID;\n options.tIndex = tIndex;\n options.isCaptionRow = true;\n options.parentUid = parentUid;\n options.gSummary = !isNullOrUndefined(data.items[\"\" + records]) ? data.items[\"\" + records].length : data.items.length;\n options.uid = getUid('grid-row');\n var row = new Row(options);\n row.indent = indent;\n this.getForeignKeyData(row);\n row.cells = this.getCaptionRowCells(data.field, indent, row.data);\n return row;\n };\n GroupModelGenerator.prototype.getForeignKeyData = function (row) {\n var data = row.data;\n var col = this.parent.getColumnByField(data.field);\n if (col && col.isForeignColumn && col.isForeignColumn()) {\n var fkValue = (isNullOrUndefined(data.key) ? '' : col.valueAccessor(col.foreignKeyValue, getForeignData(col, {}, data.key)[0], col));\n setValue('foreignKey', fkValue, row.data);\n }\n };\n /**\n * @param {Object[]} data - specifies the data\n * @param {number} indent - specifies the indent\n * @param {number} childID - specifies the childID\n * @param {number} tIndex - specifies the tIndex\n * @param {string} parentUid - specifies the ParentUid\n * @returns {Row[]} returns the row object\n * @hidden\n */\n GroupModelGenerator.prototype.generateDataRows = function (data, indent, childID, tIndex, parentUid) {\n var rows = [];\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = data.length; i < len; i++, tIndex++) {\n rows[parseInt(i.toString(), 10)] = this.generateRow(data[parseInt(i.toString(), 10)], this.index, i ? undefined : 'e-firstchildrow', indent, childID, tIndex, parentUid);\n for (var j = 0; j < indent; j++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(indent) === -1) {\n continue;\n }\n rows[parseInt(i.toString(), 10)].cells.unshift(this.generateIndentCell());\n }\n this.index++;\n }\n return rows;\n };\n GroupModelGenerator.prototype.generateIndentCell = function () {\n return this.generateCell({}, null, CellType.Indent);\n };\n GroupModelGenerator.prototype.refreshRows = function (input) {\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0; i < input.length; i++) {\n if (input[parseInt(i.toString(), 10)].isDataRow) {\n input[parseInt(i.toString(), 10)].cells = this.generateCells(input[parseInt(i.toString(), 10)]);\n for (var j = 0; j < input[parseInt(i.toString(), 10)].indent; j++) {\n if (this.parent.enableColumnVirtualization\n && indexes.indexOf(input[parseInt(i.toString(), 10)].indent) === -1) {\n continue;\n }\n input[parseInt(i.toString(), 10)].cells.unshift(this.generateIndentCell());\n }\n }\n else {\n var cRow = this.generateCaptionRow(input[parseInt(i.toString(), 10)].data, input[parseInt(i.toString(), 10)].indent);\n input[parseInt(i.toString(), 10)].cells = cRow.cells;\n }\n }\n return input;\n };\n GroupModelGenerator.prototype.setInfiniteRowVisibility = function (caption) {\n if (!caption.isExpand || caption.visible === false) {\n for (var _i = 0, _a = this.rows; _i < _a.length; _i++) {\n var row = _a[_i];\n if (row.parentUid === caption.uid) {\n row.visible = false;\n if (row.isCaptionRow) {\n this.setInfiniteRowVisibility(row);\n }\n }\n }\n }\n };\n GroupModelGenerator.prototype.ensureRowVisibility = function () {\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[parseInt(i.toString(), 10)];\n if (!row.isCaptionRow) {\n continue;\n }\n for (var j = i + 1; j < this.rows.length; j++) {\n var childRow = this.rows[parseInt(j.toString(), 10)];\n if (row.uid === childRow.parentUid) {\n this.rows[parseInt(j.toString(), 10)].visible = row.isExpand;\n }\n }\n }\n };\n return GroupModelGenerator;\n}(RowModelGenerator));\nexport { GroupModelGenerator };\n","import { Droppable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, remove, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf, appendChildren, setDisplayValue, clearReactVueTemplates } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from './row-renderer';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { isGroupAdaptive } from '../base/util';\nimport * as literals from '../base/string-literals';\n// eslint-disable-next-line valid-jsdoc\n/**\n * Content module is used to render grid content\n *\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n *\n * @param {IGrid} parent - specifies the Igrid\n * @param {ServiceLocator} serviceLocator - specifies the service locator\n */\n function ContentRender(parent, serviceLocator) {\n var _this = this;\n this.rows = [];\n this.freezeRows = [];\n this.movableRows = [];\n this.freezeRowElements = [];\n /** @hidden */\n this.currentInfo = {};\n /** @hidden */\n this.prevCurrentView = [];\n this.isLoaded = true;\n this.viewColIndexes = [];\n this.drop = function (e) {\n _this.parent.notify(events.columnDrop, { target: e.target, droppedElement: e.droppedElement });\n remove(e.droppedElement);\n };\n this.infiniteCache = {};\n this.isRemove = false;\n /** @hidden */\n this.visibleRows = [];\n this.visibleFrozenRows = [];\n this.rightFreezeRows = [];\n this.isAddRows = false;\n this.isInfiniteFreeze = false;\n this.useGroupCache = false;\n /** @hidden */\n this.tempFreezeRows = [];\n this.rafCallback = function (args) {\n var arg = args;\n return function () {\n if (_this.parent.isFrozenGrid() && (_this.parent.enableVirtualization || _this.parent.enableInfiniteScrolling)) {\n var tableName = args.tableName;\n _this.isLoaded = _this.parent.getFrozenMode() === literals.leftRight ? tableName === 'frozen-right' : tableName === 'movable';\n if (_this.parent.enableColumnVirtualization && args.requestType === 'virtualscroll' && _this.isLoaded) {\n var mHdr = [].slice.call(_this.parent.getMovableVirtualHeader().getElementsByClassName(literals.row));\n var fHdr = [].slice.call(_this.parent.getFrozenVirtualHeader().getElementsByClassName(literals.row));\n _this.isLoaded = mHdr.length === fHdr.length;\n }\n }\n _this.ariaService.setBusy(_this.getPanel().querySelector('.' + literals.content), false);\n if (_this.parent.isDestroyed) {\n return;\n }\n var rows = _this.rows.slice(0);\n if (_this.parent.enableInfiniteScrolling) {\n if (_this.parent.groupSettings.enableLazyLoading) {\n for (var i = 0; i < _this.visibleRows.length; i++) {\n _this.setRowsInLazyGroup(_this.visibleRows[parseInt(i.toString(), 10)], i);\n }\n }\n rows = _this.parent.getRowsObject();\n var prevPage = arg.prevPage;\n if (_this.parent.infiniteScrollSettings.enableCache && prevPage) {\n var maxBlock = _this.parent.infiniteScrollSettings.maxBlocks;\n rows = [];\n var rowIdx = (parseInt(_this.rowElements[0].getAttribute('data-rowindex'), 10) + 1);\n var startIdx = Math.ceil(rowIdx / _this.parent.pageSettings.pageSize);\n for (var i = 0, count = startIdx; i < maxBlock; i++, count++) {\n if (_this.infiniteCache[parseInt(count.toString(), 10)]) {\n rows = rows.concat(_this.infiniteCache[parseInt(count.toString(), 10)]);\n }\n }\n }\n }\n if (_this.parent.isFrozenGrid()) {\n rows = args.isFrozen ? _this.freezeRows : args.renderFrozenRightContent ? _this.parent.getFrozenRightRowsObject()\n : _this.movableRows;\n }\n _this.parent.notify(events.contentReady, { rows: rows, args: arg });\n if (_this.parent.autoFit) {\n _this.parent.preventAdjustColumns();\n }\n if (!_this.parent.isInitialLoad) {\n _this.parent.focusModule.setFirstFocusableTabIndex();\n }\n if (_this.isLoaded) {\n _this.parent.isManualRefresh = false;\n if (_this.parent.enableInfiniteScrolling && _this.parent.groupSettings.enableLazyLoading && args.requestType === 'sorting') {\n _this.parent.infiniteScrollModule['groupCaptionAction'] = undefined;\n }\n var isReactChild = _this.parent.parentDetails && _this.parent.parentDetails.parentInstObj &&\n _this.parent.parentDetails.parentInstObj.isReact;\n if ((_this.parent.isReact || isReactChild) && _this.parent.element.querySelectorAll('.e-templatecell').length) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_1 = _this;\n thisRef_1.parent.renderTemplates(function () {\n thisRef_1.parent.trigger(events.dataBound, {}, function () {\n if (thisRef_1.parent.allowTextWrap) {\n thisRef_1.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n });\n });\n }\n else {\n _this.parent.trigger(events.dataBound, {}, function () {\n if (_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n });\n }\n if (_this.parent.allowTextWrap && _this.parent.height === 'auto') {\n if (_this.parent.getContentTable().scrollHeight > _this.parent.getContent().clientHeight) {\n _this.parent.scrollModule.setPadding();\n }\n else {\n _this.parent.scrollModule.removePadding();\n }\n }\n }\n if (arg) {\n var action = (arg.requestType || '').toLowerCase() + '-complete';\n _this.parent.notify(action, arg);\n if (args.requestType === 'batchsave') {\n args.cancel = false;\n _this.parent.trigger(events.actionComplete, args);\n }\n }\n if (_this.isLoaded) {\n _this.parent.hideSpinner();\n }\n };\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.parent.enableDeepCompare = this.parent.getDataModule().isRemote();\n this.generator = this.getModelGenerator();\n if (this.parent.isDestroyed) {\n return;\n }\n if (!this.parent.enableColumnVirtualization && !this.parent.enableVirtualization\n && !this.parent.groupSettings.enableLazyLoading) {\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n }\n this.parent.on(events.colGroupRefresh, this.colGroupRefresh, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.refreshInfiniteModeBlocks, this.refreshContentRows, this);\n this.parent.on(events.beforeCellFocused, this.beforeCellFocused, this);\n this.parent.on(events.destroy, this.droppableDestroy, this);\n }\n ContentRender.prototype.beforeCellFocused = function (e) {\n if (e.byKey && (e.keyArgs.action === 'upArrow' || e.keyArgs.action === 'downArrow')) {\n this.pressedKey = e.keyArgs.action;\n }\n else {\n this.pressedKey = undefined;\n }\n };\n /**\n * The function is used to render grid content div\n *\n * @returns {void}\n */\n ContentRender.prototype.renderPanel = function () {\n var gObj = this.parent;\n var div = this.parent.element.querySelector('.' + literals.gridContent);\n if (div) {\n this.ariaService.setOptions(this.parent.element.querySelector('.' + literals.content), { busy: false });\n this.setPanel(div);\n return;\n }\n div = this.parent.createElement('div', { className: literals.gridContent });\n var innerDiv = this.parent.createElement('div', {\n className: literals.content\n });\n this.ariaService.setOptions(innerDiv, { busy: false });\n div.appendChild(innerDiv);\n this.setPanel(div);\n gObj.element.appendChild(div);\n };\n /**\n * The function is used to render grid content table\n *\n * @returns {void}\n */\n ContentRender.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n var virtualTable = contentDiv.querySelector('.e-virtualtable');\n var virtualTrack = contentDiv.querySelector('.e-virtualtrack');\n if (this.parent.enableVirtualization && !isNullOrUndefined(virtualTable) && !isNullOrUndefined(virtualTrack)) {\n remove(virtualTable);\n remove(virtualTrack);\n }\n contentDiv.appendChild(this.createContentTable('_content_table'));\n this.setTable(contentDiv.querySelector('.' + literals.table));\n this.ariaService.setOptions(this.getTable(), {\n multiselectable: this.parent.selectionSettings.type === 'Multiple'\n });\n this.initializeContentDrop();\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().classList.add('e-frozenhdrcont');\n }\n };\n /**\n * The function is used to create content table elements\n *\n * @param {string} id - specifies the id\n * @returns {Element} returns the element\n * @hidden\n */\n ContentRender.prototype.createContentTable = function (id) {\n var innerDiv = this.getPanel().firstElementChild;\n if (this.getTable()) {\n remove(this.getTable());\n }\n var table = innerDiv.querySelector('.' + literals.table) ? innerDiv.querySelector('.' + literals.table) :\n this.parent.createElement('table', {\n className: literals.table, attrs: {\n cellspacing: '0.25px', role: 'grid',\n id: this.parent.element.id + id\n }\n });\n this.setColGroup(this.parent.getHeaderTable().querySelector(literals.colGroup).cloneNode(true));\n table.appendChild(this.getColGroup());\n table.appendChild(this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } }));\n innerDiv.appendChild(table);\n return innerDiv;\n };\n /**\n * Refresh the content of the Grid.\n *\n * @param {NotifyArgs} args - specifies the args\n * @returns {void}\n */\n // tslint:disable-next-line:max-func-body-length\n ContentRender.prototype.refreshContentRows = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n var gObj = this.parent;\n if (gObj.currentViewData.length === 0) {\n return;\n }\n var dataSource = this.currentMovableRows || gObj.currentViewData;\n var contentModule = this.parent.contentModule;\n var isReact = gObj.isReact && !isNullOrUndefined(gObj.rowTemplate);\n var frag = isReact ? gObj.createElement(literals.tbody, { attrs: { role: 'rowgroup' } }) : document.createDocumentFragment();\n if (!this.initialPageRecords) {\n this.initialPageRecords = extend([], dataSource);\n }\n var hdrfrag = isReact ? gObj.createElement(literals.tbody, { attrs: { role: 'rowgroup' } }) : document.createDocumentFragment();\n var refFrag;\n var refHdrfrag;\n if (gObj.isReact && gObj.rowTemplate) {\n refFrag = frag;\n refHdrfrag = hdrfrag;\n }\n var columns = gObj.getColumns();\n var tr;\n var hdrTbody;\n var frzCols = gObj.getFrozenColumns();\n var isFrozenGrid = this.parent.isFrozenGrid();\n var trElement;\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var isInfiniteScroll = this.parent.enableInfiniteScrolling\n && args.requestType === 'infiniteScroll';\n gObj.notify(events.destroyChildGrid, {});\n this.rowElements = [];\n this.rows = [];\n this.tempFreezeRows = [];\n var fCont = this.getPanel().querySelector('.' + literals.frozenContent);\n var mCont = this.getPanel().querySelector('.' + literals.movableContent);\n var cont = this.getPanel().querySelector('.' + literals.content);\n var tbdy;\n var tableName;\n if (isGroupAdaptive(gObj)) {\n if (['sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder', 'save', 'delete']\n .some(function (value) { return args.requestType === value; })) {\n this.emptyVcRows();\n }\n }\n var modelData;\n if (this.parent.enableVirtualization && this.parent.isFrozenGrid()) {\n if (this.parent.enableColumnVirtualization && args.requestType === 'virtualscroll'\n && args.virtualInfo.sentinelInfo.axis === 'X') {\n modelData = this.parent.contentModule.generateRows(dataSource, args);\n args.renderMovableContent = true;\n }\n modelData = this.parent.contentModule.generateRows(dataSource, args);\n }\n else {\n modelData = this.checkCache(modelData, args);\n if (!this.isAddRows && !this.useGroupCache) {\n modelData = this.generator.generateRows(dataSource, args);\n }\n }\n this.setGroupCache(modelData, args);\n this.parent.notify(events.setInfiniteCache, { isInfiniteScroll: isInfiniteScroll, modelData: modelData, args: args });\n var idx = modelData[0].cells[0].index;\n if (isFrozenGrid) {\n tableName = contentModule.setTbody(modelData, args);\n tbdy = contentModule.getTbody(tableName);\n }\n var isFrozenLeft = this.parent.getFrozenMode() === literals.leftRight && tableName === literals.frozenRight;\n /* eslint-disable */\n if (!(args.requestType === 'infiniteScroll' && !this.parent.infiniteScrollSettings.enableCache) && this.parent.registeredTemplate\n && this.parent.registeredTemplate.template && !args.isFrozen && !isFrozenLeft) {\n var templatetoclear = [];\n for (var i = 0; i < this.parent.registeredTemplate.template.length; i++) {\n for (var j = 0; j < this.parent.registeredTemplate.template[i].rootNodes.length; j++) {\n if (isNullOrUndefined(this.parent.registeredTemplate.template[i].rootNodes[j].parentNode)) {\n templatetoclear.push(this.parent.registeredTemplate.template[i]);\n /* eslint-enable */\n }\n }\n }\n this.parent.destroyTemplate(['template'], templatetoclear);\n }\n if ((this.parent.isReact || this.parent.isVue) && !(args.requestType === 'infiniteScroll' && !this.parent.infiniteScrollSettings.enableCache) && !args.isFrozen) {\n var templates = [\n this.parent.isVue ? 'template' : 'columnTemplate', 'rowTemplate', 'detailTemplate',\n 'captionTemplate', 'commandsTemplate', 'groupFooterTemplate', 'groupCaptionTemplate'\n ];\n if (args.requestType === 'infiniteScroll' && this.parent.infiniteScrollSettings.enableCache) {\n templates = [\n this.parent.isVue ? 'template' : 'columnTemplate', 'commandsTemplate'\n ];\n }\n clearReactVueTemplates(this.parent, templates);\n }\n if (this.parent.enableColumnVirtualization) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n cellMerge.updateVirtualCells(modelData);\n }\n if (!isFrozenGrid) {\n this.tbody = this.getTable().querySelector(literals.tbody);\n }\n var startIndex = 0;\n var blockLoad = true;\n if (isGroupAdaptive(gObj) && gObj.vcRows.length) {\n var top_1 = 'top';\n var scrollTop = !isNullOrUndefined(args.virtualInfo.offsets) ? args.virtualInfo.offsets.top :\n (!isNullOrUndefined(args.scrollTop) ? args.scrollTop[\"\" + top_1] : 0);\n if (scrollTop !== 0) {\n var offsets_1 = gObj.vGroupOffsets;\n var bSize = gObj.pageSettings.pageSize / 2;\n var values = Object.keys(offsets_1).map(function (key) { return offsets_1[\"\" + key]; });\n for (var m = 0; m < values.length; m++) {\n if (scrollTop < values[parseInt(m.toString(), 10)]) {\n if (!isNullOrUndefined(args.virtualInfo) && args.virtualInfo.direction === 'up') {\n startIndex = m > 0 ? ((m - 1) * bSize) : (m * bSize);\n break;\n }\n else {\n startIndex = m * bSize;\n if (this.parent.contentModule.isEndBlock(m) || this.parent.contentModule.isEndBlock(m + 1)) {\n args.virtualInfo.blockIndexes = [m, m + 1];\n }\n break;\n }\n }\n }\n if (Math.round(scrollTop + this.contentPanel.firstElementChild.offsetHeight) >=\n this.contentPanel.firstElementChild.scrollHeight && !args.rowObject) {\n blockLoad = false;\n }\n }\n }\n var isVFFrozenOnly = gObj.frozenRows && !gObj.isFrozenGrid() && this.parent.enableVirtualization\n && args.requestType === 'reorder';\n if ((gObj.frozenRows && args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo.axis === 'X') || isVFFrozenOnly) {\n var bIndex = args.virtualInfo.blockIndexes;\n var page = args.virtualInfo.page;\n args.virtualInfo.blockIndexes = [1, 2];\n if (isVFFrozenOnly) {\n args.virtualInfo.page = 1;\n }\n var data = isVFFrozenOnly ? this.initialPageRecords : dataSource;\n var mhdrData = this.vgenerator\n .generateRows(data, args);\n mhdrData.splice(this.parent.frozenRows);\n for (var i = 0; i < this.parent.frozenRows; i++) {\n mhdrData[parseInt(i.toString(), 10)].cells.splice(0, this.parent.getFrozenColumns());\n tr = row.render(mhdrData[parseInt(i.toString(), 10)], columns);\n hdrfrag.appendChild(tr);\n }\n args.virtualInfo.blockIndexes = bIndex;\n args.virtualInfo.page = page;\n if (isVFFrozenOnly && args.virtualInfo.page === 1) {\n modelData.splice(0, this.parent.frozenRows);\n }\n }\n this.virtualFrozenHdrRefresh(hdrfrag, modelData, row, args, dataSource, columns);\n if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n this.parent.contentModule).refRowsObj[this.parent.pageSettings.currentPage] = [];\n }\n if (this.parent.enableInfiniteScrolling && this.parent.groupSettings.enableLazyLoading && args.requestType === 'delete') { // || (this.parent.infiniteScrollSettings && this.parent.infiniteScrollSettings.enableCache))\n this.visibleRows = [];\n }\n var _loop_1 = function (i, len) {\n this_1.rows.push(modelData[parseInt(i.toString(), 10)]);\n if (isFrozenGrid) {\n this_1.tempFreezeRows.push(modelData[parseInt(i.toString(), 10)]);\n }\n if (this_1.parent.groupSettings.enableLazyLoading && !this_1.useGroupCache && this_1.parent.groupSettings.columns.length) {\n (this_1.parent.enableVirtualization ? this_1.parent.lazyLoadRender :\n this_1.parent.contentModule).refRowsObj[this_1.parent.pageSettings.currentPage].push(modelData[parseInt(i.toString(), 10)]);\n this_1.setRowsInLazyGroup(modelData[parseInt(i.toString(), 10)], i);\n if (isNullOrUndefined(modelData[parseInt(i.toString(), 10)].indent)) {\n return \"continue\";\n }\n }\n this_1.setInfiniteVisibleRows(args, modelData[parseInt(i.toString(), 10)], tableName);\n if (isGroupAdaptive(gObj) && args.virtualInfo && args.virtualInfo.blockIndexes\n && (this_1.rowElements.length >= (args.virtualInfo.blockIndexes.length * this_1.parent.contentModule.getBlockSize()))\n && blockLoad) {\n this_1.parent.currentViewData['records'] = this_1.rows.map(function (m) { return m.data; });\n return \"break\";\n }\n if (!gObj.rowTemplate) {\n tr = row.render(modelData[parseInt(i.toString(), 10)], columns);\n var isVFreorder = this_1.ensureFrozenHeaderRender(args);\n if (gObj.frozenRows && i < gObj.frozenRows && !isInfiniteScroll && args.requestType !== 'virtualscroll' && isVFreorder\n && this_1.ensureVirtualFrozenHeaderRender(args)) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n if (modelData[parseInt(i.toString(), 10)].isExpand) {\n gObj.notify(events.expandChildGrid, tr.cells[gObj.groupSettings.columns.length]);\n }\n }\n else {\n var rowTemplateID = gObj.element.id + 'rowTemplate';\n var elements = void 0;\n if (gObj.isReact) {\n var isHeader = gObj.frozenRows && i < gObj.frozenRows;\n var copied = extend({ index: i }, dataSource[parseInt(i.toString(), 10)]);\n gObj.getRowTemplate()(copied, gObj, 'rowTemplate', rowTemplateID, null, null, isHeader ? hdrfrag : frag);\n if (gObj.requireTemplateRef) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_2 = this_1;\n thisRef_2.parent.renderTemplates(function () {\n if (gObj.frozenRows && i < gObj.frozenRows) {\n tr = refHdrfrag.childNodes[parseInt(i.toString(), 10)];\n }\n else {\n trElement = refFrag.childNodes[parseInt(i.toString(), 10)];\n }\n var arg = { data: modelData[parseInt(i.toString(), 10)].data,\n row: trElement ? trElement : tr };\n thisRef_2.parent.trigger(events.rowDataBound, arg);\n if (modelData[parseInt(i.toString(), 10)].isDataRow || (thisRef_2.parent.enableVirtualization &&\n thisRef_2.parent.groupSettings.enableLazyLoading)) {\n thisRef_2.rowElements.push(tr);\n }\n thisRef_2.ariaService.setOptions(thisRef_2.getTable(), {\n colcount: gObj.getColumns().length.toString()\n });\n if (i === modelData.length - 1) {\n refFrag = null;\n refHdrfrag = null;\n }\n });\n return \"continue\";\n }\n }\n else {\n elements = gObj.getRowTemplate()(extend({ index: i }, dataSource[parseInt(i.toString(), 10)]), gObj, 'rowTemplate', rowTemplateID, undefined, undefined, undefined, this_1.parent['root']);\n }\n if (!gObj.isReact && elements[0].tagName === 'TBODY') {\n for (var j = 0; j < elements.length; j++) {\n var isTR = elements[parseInt(j.toString(), 10)].nodeName.toLowerCase() === 'tr';\n if (isTR || (elements[parseInt(j.toString(), 10)].querySelectorAll && elements[parseInt(j.toString(), 10)].querySelectorAll('tr').length)) {\n tr = isTR ? elements[parseInt(j.toString(), 10)] : elements[parseInt(j.toString(), 10)].querySelector('tr');\n }\n }\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n }\n else {\n if (gObj.frozenRows && i < gObj.frozenRows) {\n tr = !gObj.isReact ? appendChildren(hdrfrag, elements) : hdrfrag.lastElementChild;\n }\n else {\n // frag.appendChild(tr);\n if (!gObj.isReact) {\n tr = appendChildren(frag, elements);\n }\n trElement = gObj.isReact ? frag.lastElementChild : tr.lastElementChild;\n }\n }\n var arg = { data: modelData[parseInt(i.toString(), 10)].data, row: trElement ? trElement : tr };\n this_1.parent.trigger(events.rowDataBound, arg);\n }\n if (modelData[parseInt(i.toString(), 10)].isDataRow || (this_1.parent.enableVirtualization &&\n this_1.parent.groupSettings.enableLazyLoading)) {\n this_1.rowElements.push(tr);\n }\n this_1.ariaService.setOptions(this_1.getTable(), { colcount: gObj.getColumns().length.toString() });\n };\n var this_1 = this;\n for (var i = startIndex, len = modelData.length; i < len; i++) {\n var state_1 = _loop_1(i, len);\n if (state_1 === \"break\")\n break;\n }\n var isReactChild = gObj.parentDetails && gObj.parentDetails.parentInstObj && gObj.parentDetails.parentInstObj.isReact;\n if ((gObj.isReact || isReactChild) && !gObj.requireTemplateRef) {\n gObj.renderTemplates();\n }\n if (this.parent.enableInfiniteScrolling && this.parent.groupSettings.enableLazyLoading) {\n this.parent.contentModule.refRowsObj[this.parent.pageSettings.currentPage] =\n this.parent.contentModule['groupCache'][this.parent.pageSettings.currentPage];\n }\n if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n this.parent.notify(events.refreshExpandandCollapse, {\n rows: (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n this.parent.contentModule).refRowsObj[this.parent.pageSettings.currentPage]\n });\n }\n if (isFrozenGrid) {\n contentModule.splitRows(tableName);\n }\n gObj.removeMaskRow();\n this.parent.notify('removeGanttShimmer', { requestType: 'hideShimmer' });\n if ((gObj.frozenRows && args.requestType !== 'virtualscroll' && !isInfiniteScroll && this.ensureVirtualFrozenHeaderRender(args))\n || (args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo && args.virtualInfo.sentinelInfo.axis === 'X')) {\n hdrTbody = isFrozenGrid ? contentModule.getFrozenHeader(tableName) : gObj.getHeaderTable().querySelector(literals.tbody);\n if (isReact) {\n var parentTable = hdrTbody.parentElement;\n remove(hdrTbody);\n parentTable.appendChild(hdrfrag);\n }\n else {\n hdrTbody.innerHTML = '';\n hdrTbody.appendChild(hdrfrag);\n }\n }\n if (!gObj.enableVirtualization && gObj.frozenRows && idx === 0 && cont.offsetHeight === Number(gObj.height)) {\n cont.style.height = (cont.offsetHeight - hdrTbody.offsetHeight) + 'px';\n }\n args.rows = this.rows.slice(0);\n if (isFrozenGrid) {\n contentModule.setIsFrozen(args, tableName);\n }\n this.index = idx;\n getUpdateUsingRaf(function () {\n _this.parent.notify(events.beforeFragAppend, args);\n var isVFTable = _this.parent.enableVirtualization && _this.parent.isFrozenGrid();\n if (!_this.parent.enableVirtualization && !isInfiniteScroll) {\n if (_this.parent.isFrozenGrid()) {\n remove(contentModule.getTbody(tableName));\n tbdy = _this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n }\n else {\n if (!gObj.isReact) {\n _this.tbody.innerHTML = '';\n }\n if (!isNullOrUndefined(_this.tbody.parentElement)) {\n remove(_this.tbody);\n }\n else {\n remove(gObj.getContentTable().querySelector(literals.tbody));\n }\n _this.tbody = _this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n }\n }\n if (isFrozenGrid && !isVFTable && !_this.parent.enableInfiniteScrolling) {\n _this.appendContent(tbdy, frag, args, tableName);\n }\n else {\n if (gObj.rowTemplate) {\n updateBlazorTemplate(gObj.element.id + 'rowTemplate', 'RowTemplate', gObj);\n }\n if (isVFTable) {\n if (args.renderFrozenRightContent) {\n var frCont = gObj.getContent().querySelector('.e-frozen-right-content').querySelector(literals.tbody);\n _this.appendContent(frCont, frag, args);\n }\n else if (!args.renderMovableContent) {\n _this.appendContent(fCont.querySelector(literals.tbody), frag, args);\n }\n else {\n _this.appendContent(mCont.querySelector(literals.tbody), frag, args);\n args.renderMovableContent = false;\n }\n if (!_this.parent.getFrozenColumns()) {\n contentModule.renderNextFrozentPart(args, tableName);\n }\n }\n else {\n if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.enableInfiniteScrolling) {\n _this.isAddRows = false;\n _this.parent.notify(events.removeInfiniteRows, { args: args });\n _this.parent.notify(events.appendInfiniteContent, {\n tbody: tbdy ? tbdy : _this.tbody, frag: frag, args: args, rows: _this.rows,\n rowElements: _this.rowElements, visibleRows: _this.visibleRows,\n tableName: tableName\n });\n if (!frzCols && isFrozenGrid) {\n if ((gObj.getFrozenMode() !== literals.leftRight\n && (tableName === literals.frozenLeft || tableName === literals.frozenRight))\n || (gObj.getFrozenMode() === literals.leftRight\n && (tableName === literals.frozenLeft || tableName === 'movable'))) {\n _this.refreshContentRows(extend({}, args));\n }\n }\n }\n else {\n _this.useGroupCache = false;\n _this.appendContent(_this.tbody, frag, args);\n }\n }\n }\n if (frzCols) {\n contentModule.renderNextFrozentPart(args, tableName);\n }\n frag = null;\n }, this.rafCallback(extend({}, args)));\n };\n ContentRender.prototype.emptyVcRows = function () {\n this.parent.vcRows = [];\n this.parent.vRows = [];\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ContentRender.prototype.appendContent = function (tbody, frag, args, tableName) {\n var isReact = this.parent.isReact && !isNullOrUndefined(this.parent.rowTemplate);\n if (isReact) {\n this.getTable().appendChild(frag);\n }\n else {\n tbody.appendChild(frag);\n this.getTable().appendChild(tbody);\n }\n if (this.parent.rowRenderingMode === 'Vertical' && this.parent.allowTextWrap && (this.parent.textWrapSettings.wrapMode === 'Header'\n || this.parent.textWrapSettings.wrapMode === 'Both')) {\n var cells = tbody.querySelectorAll('td');\n for (var i = 0; i < cells.length; i++) {\n var headerCellHeight = parseFloat(document.defaultView.getComputedStyle(cells[parseInt(i.toString(), 10)], '::before').getPropertyValue('height'));\n var cellHeight = cells[parseInt(i.toString(), 10)].offsetHeight;\n if (headerCellHeight > cellHeight) {\n cells[parseInt(i.toString(), 10)].style.height = headerCellHeight + 'px';\n cells[parseInt(i.toString(), 10)].style.boxSizing = 'content-box';\n }\n }\n }\n };\n ContentRender.prototype.setRowsInLazyGroup = function (row, index) {\n if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n this.parent.contentModule).maintainRows(row, index);\n }\n };\n ContentRender.prototype.setGroupCache = function (data, args) {\n if (!this.useGroupCache && this.parent.groupSettings.enableLazyLoading) {\n this.parent.notify(events.setGroupCache, { args: args, data: data });\n }\n };\n ContentRender.prototype.ensureFrozenHeaderRender = function (args) {\n return !((this.parent.enableVirtualization\n && (args.requestType === 'reorder' || args.requestType === 'refresh')) || (this.parent.infiniteScrollSettings.enableCache\n && this.parent.frozenRows && this.parent.infiniteScrollModule.requestType === 'delete'\n && this.parent.pageSettings.currentPage !== 1));\n };\n ContentRender.prototype.ensureVirtualFrozenHeaderRender = function (args) {\n return !(this.parent.enableVirtualization && args.requestType === 'delete');\n };\n ContentRender.prototype.checkCache = function (modelData, args) {\n if (this.parent.infiniteScrollSettings.enableCache && args.requestType === 'infiniteScroll') {\n var index = args.isFrozen ? 1 : 0;\n var frozenCols = this.parent.isFrozenGrid();\n this.isAddRows = !isNullOrUndefined(this.infiniteCache[this.parent.pageSettings.currentPage]);\n if (frozenCols && !isNullOrUndefined(this.infiniteCache[this.parent.pageSettings.currentPage])) {\n this.isAddRows = this.infiniteCache[this.parent.pageSettings\n .currentPage][parseInt(index.toString(), 10)].length !== 0;\n }\n if (this.isAddRows) {\n var data = !frozenCols ? this.infiniteCache[this.parent.pageSettings.currentPage]\n : this.infiniteCache[this.parent.pageSettings.currentPage][parseInt(index.toString(), 10)];\n modelData = this.parent.pageSettings.currentPage === 1 ? data.slice(this.parent.frozenRows) : data;\n }\n return modelData;\n }\n if (this.parent.groupSettings.enableLazyLoading && this.parent.groupSettings.columns.length && (args.requestType === 'paging'\n || args.requestType === 'columnstate' || args.requestType === 'reorder' || args.requestType === 'virtualscroll')\n && (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n this.parent.contentModule).getGroupCache()[this.parent.pageSettings.currentPage]) {\n if (!this.parent.enableVirtualization) {\n this.useGroupCache = true;\n }\n return this.parent.enableVirtualization ? this.parent.getRowsObject() :\n this.parent.contentModule.initialGroupRows(args.requestType === 'reorder');\n }\n return null;\n };\n ContentRender.prototype.setInfiniteVisibleRows = function (args, data, tableName) {\n var frozenCols = this.parent.isFrozenGrid();\n if (this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache) {\n if (frozenCols) {\n if (tableName === literals.frozenLeft || (this.parent.getFrozenMode() === 'Right' && tableName === literals.frozenRight)) {\n this.visibleFrozenRows.push(data);\n }\n else if (tableName === 'movable') {\n this.visibleRows.push(data);\n }\n else {\n this.rightFreezeRows.push(data);\n }\n }\n else if (!this.parent.infiniteScrollSettings.enableCache) {\n this.visibleRows.push(data);\n }\n }\n };\n ContentRender.prototype.getCurrentBlockInfiniteRecords = function (isFreeze) {\n var data = [];\n if (this.parent.infiniteScrollSettings.enableCache) {\n if (!Object.keys(this.infiniteCache).length) {\n return [];\n }\n var frozenCols = this.parent.isFrozenGrid();\n var rows = this.parent.getRows();\n var index = parseInt(rows[this.parent.frozenRows].getAttribute(literals.dataRowIndex), 10);\n var first = Math.ceil((index + 1) / this.parent.pageSettings.pageSize);\n index = parseInt(rows[rows.length - 1].getAttribute(literals.dataRowIndex), 10);\n var last = Math.ceil((index + (rows.length ? 1 : 0)) / this.parent.pageSettings.pageSize);\n if (frozenCols) {\n var idx = isFreeze ? 0 : 1;\n for (var i = first; i <= last; i++) {\n data = !data.length ? this.infiniteCache[parseInt(i.toString(), 10)][parseInt(idx.toString(), 10)]\n : data.concat(this.infiniteCache[parseInt(i.toString(), 10)][parseInt(idx.toString(), 10)]);\n }\n if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n data = this.infiniteCache[1][parseInt(idx.toString(), 10)]\n .slice(0, this.parent.frozenRows).concat(data);\n }\n }\n else {\n for (var i = first; i <= last; i++) {\n data = !data.length ? this.infiniteCache[parseInt(i.toString(), 10)]\n : data.concat(this.infiniteCache[parseInt(i.toString(), 10)]);\n }\n if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n data = this.infiniteCache[1].slice(0, this.parent.frozenRows).concat(data);\n }\n }\n }\n return data;\n };\n ContentRender.prototype.getReorderedVFRows = function (args) {\n return this.parent.contentModule.getReorderedFrozenRows(args);\n };\n ContentRender.prototype.getReorderedRows = function (args) {\n return this.parent.contentModule.getReorderedFrozenRows(args);\n };\n ContentRender.prototype.virtualFrozenHdrRefresh = function (hdrfrag, modelData, row, args, dataSource, columns) {\n if (this.parent.frozenRows && this.parent.enableVirtualization\n && (args.requestType === 'reorder' || args.requestType === 'refresh')) {\n var tr = void 0;\n var fhdrData = [];\n if (this.parent.isFrozenGrid()) {\n this.currentMovableRows = dataSource;\n fhdrData = this.getReorderedVFRows(args);\n }\n else {\n fhdrData = this.getReorderedRows(args);\n }\n for (var i = 0; i < fhdrData.length; i++) {\n tr = row.render(fhdrData[parseInt(i.toString(), 10)], columns);\n hdrfrag.appendChild(tr);\n }\n if (args.virtualInfo.page === 1) {\n modelData.splice(0, this.parent.frozenRows);\n }\n if (args.renderMovableContent) {\n this.parent.currentViewData = this.currentMovableRows;\n this.currentMovableRows = null;\n }\n }\n };\n ContentRender.prototype.getInfiniteRows = function () {\n var rows = [];\n var frozenCols = this.parent.isFrozenGrid();\n if (this.parent.enableInfiniteScrolling) {\n if (this.parent.infiniteScrollSettings.enableCache) {\n var keys = Object.keys(this.infiniteCache);\n for (var i = 0; i < keys.length; i++) {\n rows = !frozenCols ? rows.concat(this.infiniteCache[keys[parseInt(i.toString(), 10)]]) : rows.concat(this.infiniteCache[keys[parseInt(i.toString(), 10)]][0]);\n }\n }\n else {\n rows = frozenCols ? this.visibleFrozenRows : this.visibleRows;\n }\n }\n return rows;\n };\n ContentRender.prototype.getInfiniteMovableRows = function () {\n var infiniteCacheRows = this.getCurrentBlockInfiniteRecords();\n var infiniteRows = this.parent.enableInfiniteScrolling ? infiniteCacheRows.length ? infiniteCacheRows\n : this.visibleRows : [];\n return infiniteRows;\n };\n /**\n * Get the content div element of grid\n *\n * @returns {Element} returns the element\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Set the content div element of grid\n *\n * @param {Element} panel - specifies the panel\n * @returns {void}\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the content table element of grid\n *\n * @returns {Element} returns the element\n */\n ContentRender.prototype.getTable = function () {\n return this.contentTable;\n };\n /**\n * Set the content table element of grid\n *\n * @param {Element} table - specifies the table\n * @returns {void}\n */\n ContentRender.prototype.setTable = function (table) {\n this.contentTable = table;\n };\n /**\n * Get the Movable Row collection in the Freeze pane Grid.\n *\n * @returns {Row[] | HTMLCollectionOf} returns the row\n */\n ContentRender.prototype.getRows = function () {\n var infiniteRows = this.getInfiniteRows();\n return infiniteRows.length ? infiniteRows : this.parent.getFrozenColumns() ? this.freezeRows : this.rows;\n };\n /**\n * Get the Movable Row collection in the Freeze pane Grid.\n *\n * @returns {Row[] | HTMLCollectionOf} returns the row\n */\n ContentRender.prototype.getMovableRows = function () {\n var infiniteRows = this.getInfiniteMovableRows();\n return infiniteRows.length ? infiniteRows : this.movableRows;\n };\n /**\n * Get the content table data row elements\n *\n * @returns {Element} returns the element\n */\n ContentRender.prototype.getRowElements = function () {\n return this.parent.getFrozenColumns() ? this.freezeRowElements : this.rowElements;\n };\n /**\n * Get the Freeze pane movable content table data row elements\n *\n * @returns {Element} returns the element\n */\n ContentRender.prototype.getMovableRowElements = function () {\n return this.rowElements;\n };\n /**\n * Get the content table data row elements\n *\n * @param {Element[]} elements - specifies the elements\n * @returns {void}\n */\n ContentRender.prototype.setRowElements = function (elements) {\n this.rowElements = elements;\n };\n /**\n * Get the header colgroup element\n *\n * @returns {Element} returns the element\n */\n ContentRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n *\n * @param {Element} colGroup - specifies the colgroup\n * @returns {Element} returns the element\n */\n ContentRender.prototype.setColGroup = function (colGroup) {\n if (!isNullOrUndefined(colGroup)) {\n colGroup.id = 'content-' + colGroup.id;\n }\n return this.colgroup = colGroup;\n };\n /**\n * Function to hide content table column based on visible property\n *\n * @param {Column[]} columns - specifies the column\n * @returns {void}\n */\n ContentRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var isFrozenGrid = this.parent.isFrozenGrid();\n var frzCols = gObj.getFrozenColumns();\n var rows = [];\n if (isFrozenGrid) {\n var fRows = this.freezeRows;\n var mRows = this.movableRows;\n var rowLen = fRows.length;\n var cellLen = void 0;\n var rightRows = [];\n if (gObj.getFrozenMode() === literals.leftRight) {\n rightRows = gObj.getFrozenRightRowsObject();\n }\n for (var i = 0, row = void 0; i < rowLen; i++) {\n cellLen = mRows[parseInt(i.toString(), 10)].cells.length;\n var rightLen = rightRows.length ? rightRows[parseInt(i.toString(), 10)].cells.length : 0;\n row = fRows[parseInt(i.toString(), 10)].clone();\n for (var j = 0; j < cellLen; j++) {\n row.cells.push(mRows[parseInt(i.toString(), 10)].cells[parseInt(j.toString(), 10)]);\n }\n for (var k = 0; k < rightLen; k++) {\n row.cells.push(rightRows[parseInt(i.toString(), 10)].cells[parseInt(k.toString(), 10)]);\n }\n rows.push(row);\n }\n }\n else {\n rows = this.getRows();\n }\n var testRow;\n rows.some(function (r) { if (r.isDataRow) {\n testRow = r;\n } return r.isDataRow; });\n var needFullRefresh = true;\n if (!gObj.groupSettings.columns.length && testRow) {\n needFullRefresh = false;\n }\n var tr = gObj.getDataRows();\n var args = {};\n var infiniteData = this.infiniteRowVisibility();\n var contentrows = infiniteData ? infiniteData\n : this.rows.filter(function (row) { return !row.isDetailRow; });\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[parseInt(c.toString(), 10)];\n var idx = this.parent.getNormalizedColumnIndex(column.uid);\n var colIdx = this.parent.getColumnIndexByUid(column.uid);\n var displayVal = column.visible === true ? '' : 'none';\n if (idx !== -1 && testRow && idx < testRow.cells.length) {\n if (isFrozenGrid) {\n if (column.getFreezeTableName() !== 'movable') {\n if (column.getFreezeTableName() === literals.frozenRight) {\n var left = this.parent.getFrozenLeftColumnsCount();\n var movable = this.parent.getMovableColumnsCount();\n colIdx = idx = idx - (left + movable);\n var colG = this.parent.getContent().querySelector('.e-frozen-right-content').querySelector(literals.colGroup);\n setStyleAttribute(colG.childNodes[parseInt(idx.toString(), 10)], { 'display': displayVal });\n contentrows = gObj.getFrozenRightRowsObject();\n tr = gObj.getFrozenRightDataRows();\n }\n else {\n setStyleAttribute(this.getColGroup().childNodes[parseInt(idx.toString(), 10)], { 'display': displayVal });\n var infiniteFreezeData = this.infiniteRowVisibility(true);\n contentrows = infiniteFreezeData ? infiniteFreezeData : this.freezeRows;\n tr = gObj.getDataRows();\n }\n }\n else {\n var mTable = gObj.getContent().querySelector('.' + literals.movableContent).querySelector(literals.colGroup);\n colIdx = idx = idx - frzCols - this.parent.getFrozenLeftColumnsCount();\n setStyleAttribute(mTable.childNodes[parseInt(idx.toString(), 10)], { 'display': displayVal });\n tr = gObj.getMovableDataRows();\n var infiniteMovableData = this.infiniteRowVisibility();\n contentrows = infiniteMovableData ? infiniteMovableData : this.movableRows;\n }\n }\n else {\n setStyleAttribute(this.getColGroup().childNodes[parseInt(idx.toString(), 10)], { 'display': displayVal });\n }\n }\n if (!needFullRefresh) {\n this.setDisplayNone(tr, colIdx, displayVal, contentrows);\n if (isFrozenGrid) {\n this.parent.notify(events.freezeRender, { case: 'refreshHeight', isModeChg: true });\n }\n }\n if (!this.parent.invokedFromMedia && column.hideAtMedia) {\n this.parent.updateMediaColumns(column);\n }\n this.parent.invokedFromMedia = false;\n }\n if (needFullRefresh) {\n this.refreshContentRows({ requestType: 'refresh' });\n }\n else {\n if (!this.parent.getFrozenColumns()) {\n this.parent.notify(events.partialRefresh, { rows: contentrows, args: args });\n }\n else {\n this.parent.notify(events.partialRefresh, { rows: this.freezeRows, args: { isFrozen: true, rows: this.freezeRows } });\n this.parent.notify(events.partialRefresh, { rows: this.movableRows, args: { isFrozen: false, rows: this.movableRows } });\n }\n }\n };\n /**\n * @param {Object} tr - specifies the trr\n * @param {number} idx - specifies the idx\n * @param {string} displayVal - specifies the displayval\n * @param {Row} rows - specifies the rows\n * @returns {void}\n * @hidden\n */\n ContentRender.prototype.setDisplayNone = function (tr, idx, displayVal, rows) {\n setDisplayValue(tr, idx, displayVal, rows, this.parent, this.parent.isRowDragable());\n this.parent.notify(events.infiniteShowHide, { visible: displayVal, index: idx, isFreeze: this.isInfiniteFreeze });\n };\n ContentRender.prototype.infiniteRowVisibility = function (isFreeze) {\n var infiniteData;\n if (this.parent.enableInfiniteScrolling) {\n this.isInfiniteFreeze = isFreeze;\n if (this.parent.infiniteScrollSettings.enableCache) {\n infiniteData = isFreeze ? this.getCurrentBlockInfiniteRecords(true) : this.getCurrentBlockInfiniteRecords();\n }\n else {\n infiniteData = isFreeze ? this.visibleFrozenRows : this.visibleRows;\n }\n }\n return infiniteData;\n };\n ContentRender.prototype.colGroupRefresh = function () {\n if (this.getColGroup()) {\n var colGroup = void 0;\n if (this.parent.enableColumnVirtualization && this.parent.getFrozenColumns()\n && this.parent.contentModule.isXaxis()) {\n colGroup = this.parent.getMovableVirtualHeader()\n .querySelector(literals.colGroup + ':not(.e-masked-colgroup)').cloneNode(true);\n }\n else {\n colGroup = this.getHeaderColGroup();\n }\n this.getTable().replaceChild(colGroup, this.getColGroup());\n this.setColGroup(colGroup);\n }\n };\n ContentRender.prototype.getHeaderColGroup = function () {\n return this.parent.element.querySelector('.' + literals.gridHeader)\n .querySelector(literals.colGroup + ':not(.e-masked-colgroup)').cloneNode(true);\n };\n ContentRender.prototype.initializeContentDrop = function () {\n var gObj = this.parent;\n this.droppable = new Droppable(gObj.element, {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n ContentRender.prototype.droppableDestroy = function () {\n if (this.droppable && !this.droppable.isDestroyed) {\n this.droppable.destroy();\n }\n };\n ContentRender.prototype.canSkip = function (column, row, index) {\n /**\n * Skip the toggle visiblity operation when one of the following success\n * 1. Grid has empty records\n * 2. column visible property is unchanged\n * 3. cell`s isVisible property is same as column`s visible property.\n */\n return isNullOrUndefined(row) || //(1)\n isNullOrUndefined(column.visible) || //(2)\n row.cells[parseInt(index.toString(), 10)].visible === column.visible; //(3)\n };\n ContentRender.prototype.getModelGenerator = function () {\n return this.generator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n };\n ContentRender.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector(literals.tbody).innerHTML = '';\n }\n };\n ContentRender.prototype.setSelection = function (uid, set, clearAll) {\n this.parent.notify(events.setFreezeSelection, { uid: uid, set: set, clearAll: clearAll });\n var isFrozen = this.parent.isFrozenGrid();\n if (isFrozen && this.parent.enableVirtualization) {\n return;\n }\n if (isFrozen) {\n var rows = this.getMovableRows().filter(function (row) { return clearAll || uid === row.uid; });\n for (var i = 0; i < rows.length; i++) {\n rows[parseInt(i.toString(), 10)].isSelected = set;\n }\n }\n var row = this.getRows().filter(function (row) { return clearAll || uid === row.uid; });\n for (var j = 0; j < row.length; j++) {\n row[parseInt(j.toString(), 10)].isSelected = set;\n var cells = row[parseInt(j.toString(), 10)].cells;\n for (var k = 0; k < cells.length; k++) {\n cells[parseInt(k.toString(), 10)].isSelected = set;\n }\n }\n };\n ContentRender.prototype.getRowByIndex = function (index) {\n index = this.getInfiniteRowIndex(index);\n return !isNullOrUndefined(index) ? this.parent.getDataRows()[parseInt(index.toString(), 10)] : undefined;\n };\n ContentRender.prototype.getInfiniteRowIndex = function (index) {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(index)) {\n var fRows = this.parent.frozenRows;\n var idx = fRows > index ? 0 : fRows;\n var firstRowIndex = parseInt(this.parent.getRows()[parseInt(idx.toString(), 10)]\n .getAttribute(literals.dataRowIndex), 10);\n index = fRows > index ? index : (index - firstRowIndex) + fRows;\n }\n return index;\n };\n ContentRender.prototype.getVirtualRowIndex = function (index) {\n return index;\n };\n ContentRender.prototype.getMovableRowByIndex = function (index) {\n index = this.getInfiniteRowIndex(index);\n return !isNullOrUndefined(index) ? this.parent.getMovableDataRows()[parseInt(index.toString(), 10)] : undefined;\n };\n ContentRender.prototype.enableAfterRender = function (e) {\n if (e.module === 'group' && e.enable) {\n this.generator = this.getModelGenerator();\n }\n };\n ContentRender.prototype.setRowObjects = function (rows) {\n this.rows = rows;\n };\n /**\n * @param {NotifyArgs} args - specifies the args\n * @returns {void}\n * @hidden\n */\n ContentRender.prototype.immutableModeRendering = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n var gObj = this.parent;\n gObj.hideSpinner();\n var key = gObj.getPrimaryKeyFieldNames()[0];\n var oldKeys = {};\n var newKeys = {};\n var newRowObjs = [];\n var oldIndexes = {};\n var oldRowObjs = gObj.getRowsObject().slice();\n var batchChangeKeys = this.getBatchEditedRecords(key, oldRowObjs);\n var newIndexes = {};\n var hasBatch = Object.keys(batchChangeKeys).length !== 0;\n if (gObj.getContent().querySelector('.e-emptyrow') || args.requestType === 'reorder'\n || this.parent.groupSettings.columns.length) {\n this.refreshContentRows(args);\n }\n else {\n if (gObj.currentViewData.length === 0) {\n return;\n }\n var oldRowElements = {};\n var tbody = gObj.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n var dataSource = gObj.currentViewData;\n var trs = [].slice.call(this.getTable().querySelector(literals.tbody).children);\n if (this.prevCurrentView.length) {\n var prevLen = this.prevCurrentView.length;\n var currentLen = dataSource.length;\n if (prevLen === currentLen) {\n for (var i = 0; i < currentLen; i++) {\n if (this.parent.editSettings.mode === 'Batch'\n && trs[parseInt(i.toString(), 10)].classList.contains('e-insertedrow')) {\n trs.splice(i, 1);\n --i;\n continue;\n }\n newKeys[dataSource[parseInt(i.toString(), 10)][\"\" + key]] = oldKeys[this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key]] = i;\n newIndexes[parseInt(i.toString(), 10)] = dataSource[parseInt(i.toString(), 10)][\"\" + key];\n oldRowElements[oldRowObjs[parseInt(i.toString(), 10)].uid] = trs[parseInt(i.toString(), 10)];\n oldIndexes[parseInt(i.toString(), 10)] = this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key];\n }\n }\n else {\n for (var i = 0; i < currentLen; i++) {\n newKeys[dataSource[parseInt(i.toString(), 10)][\"\" + key]] = i;\n newIndexes[parseInt(i.toString(), 10)] = dataSource[parseInt(i.toString(), 10)][\"\" + key];\n }\n for (var i = 0; i < prevLen; i++) {\n if (this.parent.editSettings.mode === 'Batch'\n && trs[parseInt(i.toString(), 10)].classList.contains('e-insertedrow')) {\n trs.splice(i, 1);\n --i;\n continue;\n }\n oldRowElements[oldRowObjs[parseInt(i.toString(), 10)].uid] = trs[parseInt(i.toString(), 10)];\n oldKeys[this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key]] = i;\n oldIndexes[parseInt(i.toString(), 10)] = this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key];\n }\n }\n }\n for (var i = 0; i < dataSource.length; i++) {\n var oldIndex = oldKeys[dataSource[parseInt(i.toString(), 10)][\"\" + key]];\n if (!isNullOrUndefined(oldIndex)) {\n var isEqual = false;\n if (this.parent.enableDeepCompare) {\n isEqual = this.objectEqualityChecker(this.prevCurrentView[parseInt(oldIndex.toString(), 10)], dataSource[parseInt(i.toString(), 10)]);\n }\n var tr = oldRowElements[oldRowObjs[parseInt(oldIndex.toString(), 10)]\n .uid];\n newRowObjs.push(oldRowObjs[parseInt(oldIndex.toString(), 10)]);\n if (this.rowElements[parseInt(oldIndex.toString(), 10)] && this.rowElements[parseInt(oldIndex.toString(), 10)].getAttribute('data-uid') === newRowObjs[parseInt(i.toString(), 10)].uid\n && ((hasBatch && isNullOrUndefined(batchChangeKeys[newIndexes[parseInt(i.toString(), 10)]]))\n || (!hasBatch && (isEqual\n || this.prevCurrentView[parseInt(oldIndex.toString(), 10)] === dataSource[parseInt(i.toString(), 10)])))) {\n if (oldIndex !== i) {\n this.refreshImmutableContent(i, tr, newRowObjs[parseInt(i.toString(), 10)]);\n }\n tbody.appendChild(tr);\n continue;\n }\n if ((hasBatch && !isNullOrUndefined(batchChangeKeys[newIndexes[parseInt(i.toString(), 10)]]))\n || (!this.parent.enableDeepCompare\n && dataSource[parseInt(i.toString(), 10)] !== this.prevCurrentView[parseInt(oldIndex.toString(), 10)])\n || (this.parent.enableDeepCompare && !isEqual)) {\n oldRowObjs[parseInt(oldIndex.toString(), 10)].setRowValue(dataSource[parseInt(i.toString(), 10)]);\n }\n tbody.appendChild(tr);\n this.refreshImmutableContent(i, tr, newRowObjs[parseInt(i.toString(), 10)]);\n }\n else {\n var row = new RowRenderer(this.serviceLocator, null, gObj);\n var args_1 = { startIndex: i };\n var modelData = this.generator.generateRows([dataSource[parseInt(i.toString(), 10)]], args_1);\n newRowObjs.push(modelData[0]);\n var tr = row.render(modelData[0], gObj.getColumns());\n tbody.appendChild(tr);\n this.refreshImmutableContent(i, tr, newRowObjs[parseInt(i.toString(), 10)]);\n }\n }\n this.rows = newRowObjs;\n this.rowElements = [].slice.call(tbody.children);\n remove(this.getTable().querySelector(literals.tbody));\n this.getTable().appendChild(tbody);\n this.parent.trigger(events.dataBound, {}, function () {\n if (_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n });\n if (args) {\n var action = (args.requestType || '').toLowerCase() + '-complete';\n this.parent.notify(action, args);\n }\n }\n };\n ContentRender.prototype.objectEqualityChecker = function (old, next) {\n var keys = Object.keys(old);\n var isEqual = true;\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[parseInt(i.toString(), 10)]] !== next[keys[parseInt(i.toString(), 10)]]) {\n var isDate = old[keys[parseInt(i.toString(), 10)]] instanceof Date\n && next[keys[parseInt(i.toString(), 10)]] instanceof Date;\n if (!isDate || (old[keys[parseInt(i.toString(), 10)]]\n .getTime() !== next[keys[parseInt(i.toString(), 10)]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n };\n ContentRender.prototype.getBatchEditedRecords = function (primaryKey, rows) {\n var keys = {};\n var changes = this.parent.getBatchChanges();\n var changedRecords = [];\n var addedRecords = [];\n if (Object.keys(changes).length) {\n changedRecords = changes.changedRecords;\n addedRecords = changes.addedRecords;\n }\n var args = { cancel: false };\n this.parent.notify(events.immutableBatchCancel, { rows: rows, args: args });\n if (addedRecords.length) {\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n rows.splice(rows.length - 1, addedRecords.length);\n }\n else {\n if (!args.cancel) {\n rows.splice(0, addedRecords.length);\n }\n }\n }\n for (var i = 0; i < changedRecords.length; i++) {\n keys[changedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey]] = i;\n }\n return keys;\n };\n ContentRender.prototype.refreshImmutableContent = function (index, tr, row) {\n row.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n if (row.isAltRow) {\n tr.classList.add('e-altrow');\n }\n else {\n tr.classList.remove('e-altrow');\n }\n row.index = index;\n row.edit = undefined;\n row.isDirty = false;\n tr.setAttribute(literals.dataRowIndex, index.toString());\n tr.setAttribute(literals.ariaRowIndex, (index + 1).toString());\n this.updateCellIndex(tr, index);\n };\n ContentRender.prototype.updateCellIndex = function (rowEle, index) {\n for (var i = 0; i < rowEle.cells.length; i++) {\n rowEle.cells[parseInt(i.toString(), 10)].setAttribute('index', index.toString());\n }\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, closest as getClosest, remove } from '@syncfusion/ej2-base';\nimport { classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from './row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport * as events from '../base/constant';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, wrap, measureColumnDepth, appendChildren } from '../base/util';\nimport * as literals from '../base/string-literals';\n// eslint-disable-next-line valid-jsdoc\n/**\n * Content module is used to render grid content\n *\n * @hidden\n */\nvar HeaderRender = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n */\n function HeaderRender(parent, serviceLocator) {\n var _this = this;\n this.frzIdx = 0;\n this.notfrzIdx = 0;\n this.isFirstCol = false;\n this.isReplaceDragEle = true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = _this.draggable.currentStateTarget;\n var parentEle = parentsUntil(target, 'e-headercell');\n if (!(gObj.allowReordering || gObj.allowGrouping) || (!isNullOrUndefined(parentEle)\n && parentEle.getElementsByClassName('e-checkselectall').length > 0)) {\n return false;\n }\n var visualElement = _this.parent.createElement('div', { className: 'e-cloneproperties e-dragclone e-headerclone' });\n var element = target.classList.contains('e-headercell') ? target : parentEle;\n if (!element || (!gObj.allowReordering && element.classList.contains('e-stackedheadercell'))) {\n return false;\n }\n var height = element.offsetHeight;\n var headercelldiv = element.querySelector('.e-headercelldiv') || element.querySelector('.e-stackedheadercelldiv');\n var col;\n if (headercelldiv) {\n if (element.querySelector('.e-stackedheadercelldiv')) {\n col = gObj.getStackedHeaderColumnByHeaderText(headercelldiv.innerText.trim(), gObj.columns);\n }\n else {\n col = gObj.getColumnByUid(headercelldiv.getAttribute('e-mappinguid'));\n }\n _this.column = col;\n if (_this.column.lockColumn) {\n return false;\n }\n visualElement.setAttribute('e-mappinguid', _this.column.uid);\n }\n if (col && !isNullOrUndefined(col.headerTemplate)) {\n if (!isNullOrUndefined(col.headerTemplate)) {\n var colIndex = gObj.getColumnIndexByField(col.field);\n var result = col.getHeaderTemplate()(extend({ 'index': colIndex }, col), gObj, 'headerTemplate');\n appendChildren(visualElement, result);\n }\n else {\n visualElement.innerHTML = col.headerTemplate;\n }\n }\n else {\n visualElement.innerHTML = headercelldiv ?\n col.headerText : element.firstElementChild.innerHTML;\n }\n visualElement.style.width = element.offsetWidth + 'px';\n visualElement.style.height = element.offsetHeight + 'px';\n visualElement.style.lineHeight = (height - 6).toString() + 'px';\n gObj.element.appendChild(visualElement);\n return visualElement;\n };\n this.dragStart = function (e) {\n var gObj = _this.parent;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n gObj.notify(events.columnDragStart, { target: _this.draggable.currentStateTarget, column: _this.column, event: e.event });\n };\n this.drag = function (e) {\n var gObj = _this.parent;\n var target = e.target;\n if (target) {\n var closest = getClosest(target, '.e-grid');\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n if (!closest || closest.getAttribute('id') !== gObj.element.getAttribute('id')) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n if (gObj.allowReordering) {\n gObj.element.querySelector('.e-reorderuparrow').style.display = 'none';\n gObj.element.querySelector('.e-reorderdownarrow').style.display = 'none';\n }\n if (!gObj.groupSettings.allowReordering) {\n return;\n }\n }\n gObj.notify(events.columnDrag, { target: e.target, column: _this.column, event: e.event });\n }\n };\n this.dragStop = function (e) {\n var gObj = _this.parent;\n var cancel;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n if ((!parentsUntil(e.target, 'e-headercell') && !parentsUntil(e.target, 'e-groupdroparea')) ||\n (!gObj.allowReordering && parentsUntil(e.target, 'e-headercell')) ||\n (!e.helper.getAttribute('e-mappinguid') && parentsUntil(e.target, 'e-groupdroparea'))) {\n remove(e.helper);\n cancel = true;\n }\n gObj.notify(events.columnDragStop, { target: e.target, event: e.event, column: _this.column, cancel: cancel });\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var uid = e.droppedElement.getAttribute('e-mappinguid');\n var closest = getClosest(e.target, '.e-grid');\n remove(e.droppedElement);\n if (closest && closest.getAttribute('id') !== gObj.element.getAttribute('id') ||\n !(gObj.allowReordering || gObj.allowGrouping)) {\n return;\n }\n gObj.notify(events.headerDrop, { target: e.target, uid: uid, droppedElement: e.droppedElement });\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.widthService = this.serviceLocator.getService('widthService');\n if (this.parent.isDestroyed) {\n return;\n }\n if (!this.parent.enableColumnVirtualization\n && !this.parent.getFrozenLeftColumnsCount() && !this.parent.getFrozenRightColumnsCount()) {\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n }\n this.parent.on(events.columnPositionChanged, this.colPosRefresh, this);\n this.parent.on(events.initialEnd, this.renderCustomToolbar, this);\n if (this.parent.rowRenderingMode === 'Vertical') {\n this.parent.on(events.uiUpdate, this.updateCustomResponsiveToolbar, this);\n }\n }\n /**\n * The function is used to render grid header div\n *\n * @returns {void}\n */\n HeaderRender.prototype.renderPanel = function () {\n var div = this.parent.element.querySelector('.' + literals.gridHeader);\n var isRendered = (div != null);\n div = isRendered ? div : this.parent.createElement('div', { className: 'e-gridheader' });\n var innerDiv = isRendered ? div.querySelector('.' + literals.headerContent) :\n this.parent.createElement('div', { className: literals.headerContent });\n this.toggleStackClass(div);\n div.appendChild(innerDiv);\n this.setPanel(div);\n if (!isRendered) {\n this.parent.element.appendChild(div);\n }\n };\n /**\n * The function is used to render grid header div\n *\n * @returns {void}\n */\n HeaderRender.prototype.renderTable = function () {\n var headerDiv = this.getPanel();\n headerDiv.appendChild(this.createHeaderTable());\n this.setTable(headerDiv.querySelector('.' + literals.table));\n if (!this.parent.getFrozenColumns() && !this.parent.getFrozenRightColumnsCount() && !this.parent.getFrozenLeftColumnsCount()) {\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n }\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.isFrozenGrid() } });\n };\n /**\n * Get the header content div element of grid\n *\n * @returns {Element} returns the element\n */\n HeaderRender.prototype.getPanel = function () {\n return this.headerPanel;\n };\n /**\n * Set the header content div element of grid\n *\n * @param {Element} panel - specifies the panel element\n * @returns {void}\n */\n HeaderRender.prototype.setPanel = function (panel) {\n this.headerPanel = panel;\n };\n /**\n * Get the header table element of grid\n *\n * @returns {Element} returns the element\n */\n HeaderRender.prototype.getTable = function () {\n return this.headerTable;\n };\n /**\n * Set the header table element of grid\n *\n * @param {Element} table - specifies the table element\n * @returns {void}\n */\n HeaderRender.prototype.setTable = function (table) {\n this.headerTable = table;\n };\n /**\n * Get the header colgroup element\n *\n * @returns {Element} returns the element\n */\n HeaderRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n *\n * @param {Element} colGroup - specifies the colgroup\n * @returns {Element} returns the element\n */\n HeaderRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Get the header row element collection.\n *\n * @returns {Element[]} returns the element\n */\n HeaderRender.prototype.getRows = function () {\n var table = this.getTable();\n return table.tHead.rows;\n };\n /**\n * The function is used to create header table elements\n *\n * @returns {Element} returns the element\n * @hidden\n */\n HeaderRender.prototype.createHeaderTable = function () {\n var table = this.createTable();\n var innerDiv = this.getPanel().querySelector('.' + literals.headerContent);\n innerDiv.appendChild(table);\n return innerDiv;\n };\n /**\n * The function is used to create header table elements\n *\n * @param {Element} tableEle - specifies the table Element\n * @param {freezeTable} tableName - specifies the table name\n * @returns {Element} returns the element\n * @hidden\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n HeaderRender.prototype.createHeader = function (tableEle, tableName) {\n if (tableEle === void 0) { tableEle = null; }\n var gObj = this.parent;\n var isFrozen = gObj.isFrozenGrid();\n if (this.getTable() && !isFrozen) {\n remove(this.getTable());\n }\n var table = this.parent.createElement('table', { className: literals.table, attrs: { cellspacing: '0.25px', role: 'grid' } });\n var tblName = tableName ? tableName : gObj.getFrozenLeftCount() ? 'frozen-left' : 'frozen-right';\n var findHeaderRow = this.createHeaderContent(tblName);\n var thead = findHeaderRow.thead;\n var tbody = this.parent.createElement(literals.tbody, { className: this.parent.frozenRows ? '' : 'e-hide', attrs: { role: 'rowgroup' } });\n this.caption = this.parent.createElement('caption', { innerHTML: this.parent.element.id + '_header_table', className: 'e-hide' });\n var colGroup = this.parent.createElement(literals.colGroup);\n var rowBody = this.parent.createElement('tr');\n var bodyCell;\n var rows = this.rows = findHeaderRow.rows;\n for (var i = 0, len = rows.length; i < len; i++) {\n for (var j = 0, len_1 = rows[parseInt(i.toString(), 10)].cells.length; j < len_1; j++) {\n bodyCell = this.parent.createElement('td');\n rowBody.appendChild(bodyCell);\n }\n }\n if (gObj.allowFiltering || gObj.allowSorting || gObj.allowGrouping) {\n table.classList.add('e-sortfilter');\n }\n if (isFrozen && gObj.allowResizing) {\n var movableContent = this.parent.getContent().querySelector('.' + literals.movableContent).querySelector('.' + literals.table);\n if (tableName === 'movable' && !isNullOrUndefined(movableContent)) {\n table.style.width = movableContent.style.width;\n }\n }\n this.updateColGroup(colGroup);\n tbody.appendChild(rowBody);\n table.appendChild(this.setColGroup(colGroup));\n table.appendChild(thead);\n table.appendChild(tbody);\n table.appendChild(this.caption);\n this.ariaService.setOptions(table, { colcount: gObj.getColumns().length.toString() });\n return table;\n };\n /**\n * @param {Element} tableEle - specifies the column\n * @returns {Element} returns the element\n * @hidden\n */\n HeaderRender.prototype.createTable = function (tableEle) {\n if (tableEle === void 0) { tableEle = null; }\n return this.createHeader(tableEle);\n };\n HeaderRender.prototype.createHeaderContent = function (tableName) {\n var gObj = this.parent;\n var index = 1;\n var frozenMode = gObj.getFrozenMode();\n var columns = gObj.getColumns();\n var thead = this.parent.createElement('thead', { attrs: { 'role': 'rowgroup' } });\n var colHeader = this.parent.createElement('tr', { className: 'e-columnheader' });\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, gObj);\n rowRenderer.element = colHeader;\n var rows = [];\n var headerRow;\n this.colDepth = measureColumnDepth(gObj.columns);\n for (var i = 0, len = this.colDepth; i < len; i++) {\n rows[parseInt(i.toString(), 10)] = this.generateRow(i);\n rows[parseInt(i.toString(), 10)].cells = [];\n }\n if (frozenMode !== 'Right') {\n rows = this.ensureColumns(rows);\n }\n rows = this.getHeaderCells(rows, tableName);\n if (frozenMode === 'Right') {\n index = 0;\n rows = this.ensureColumns(rows);\n }\n var frzCols = this.parent.getFrozenColumns();\n if (this.parent.isRowDragable() && this.parent.isFrozenGrid() && rows[0].cells[parseInt(index.toString(), 10)]) {\n var colFreezeMode = rows[0].cells[parseInt(index.toString(), 10)].column.getFreezeTableName();\n if (tableName === 'movable' && this.getStackedLockColsCount.length) {\n for (var j = 0, len = rows.length; j < len; j++) {\n if (frozenMode === 'Right') {\n rows[parseInt(j.toString(), 10)].cells.pop();\n }\n else {\n rows[parseInt(j.toString(), 10)].cells.shift();\n }\n }\n }\n else if ((colFreezeMode === 'movable' || (frozenMode === literals.leftRight &&\n colFreezeMode === literals.frozenRight))) {\n if (frozenMode === 'Right') {\n rows[0].cells.pop();\n }\n else {\n rows[0].cells.shift();\n }\n }\n else if (!frzCols && colFreezeMode === literals.frozenLeft) {\n rows[0].cells[0].column.freeze = colFreezeMode === literals.frozenLeft ? 'Left' : 'Right';\n }\n else if (frozenMode === 'Right' && colFreezeMode === literals.frozenRight) {\n rows[0].cells[rows[0].cells.length - 1].column.freeze = 'Right';\n }\n }\n for (var i = 0, len = this.colDepth; i < len; i++) {\n headerRow = rowRenderer.render(rows[parseInt(i.toString(), 10)], columns);\n if (this.parent.rowHeight && headerRow.querySelector('.e-headercell')) {\n headerRow.style.height = this.parent.rowHeight + 'px';\n }\n thead.appendChild(headerRow);\n }\n var findHeaderRow = {\n thead: thead,\n rows: rows\n };\n return findHeaderRow;\n };\n HeaderRender.prototype.updateColGroup = function (colGroup) {\n var cols = this.parent.getColumns();\n var col;\n var indexes = this.parent.getColumnIndexesInView();\n if (this.parent.enableColumnVirtualization && this.parent.getFrozenColumns()\n && this.parent.contentModule.isXaxis()) {\n cols = extend([], this.parent.getColumns());\n cols.splice(0, this.parent.getFrozenColumns());\n }\n colGroup.id = this.parent.element.id + literals.colGroup;\n if (this.parent.allowGrouping) {\n for (var i = 0, len = this.parent.groupSettings.columns.length; i < len; i++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n continue;\n }\n col = this.parent.createElement('col', { className: 'e-group-intent' });\n colGroup.appendChild(col);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n col = this.parent.createElement('col', { className: 'e-detail-intent' });\n colGroup.appendChild(col);\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n col = this.parent.createElement('col', { className: 'e-drag-intent' });\n colGroup.appendChild(col);\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n col = this.parent.createElement('col');\n if (cols[parseInt(i.toString(), 10)].visible === false) {\n setStyleAttribute(col, { 'display': 'none' });\n }\n colGroup.appendChild(col);\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n col = this.parent.createElement('col', { className: 'e-drag-intent' });\n colGroup.appendChild(col);\n }\n return colGroup;\n };\n HeaderRender.prototype.ensureColumns = function (rows) {\n //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n var gObj = this.parent;\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (gObj.allowGrouping) {\n for (var c = 0, len_2 = gObj.groupSettings.columns.length; c < len_2; c++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(c) === -1) {\n continue;\n }\n rows[parseInt(i.toString(), 10)].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gObj.detailTemplate || gObj.childGrid) {\n var args = {};\n this.parent.notify(events.detailIndentCellInfo, args);\n rows[parseInt(i.toString(), 10)].cells.push(this.generateCell(args, CellType.DetailHeader));\n }\n if (gObj.isRowDragable()) {\n rows[parseInt(i.toString(), 10)].cells.push(this.generateCell({}, CellType.RowDragHIcon));\n }\n }\n return rows;\n };\n HeaderRender.prototype.getHeaderCells = function (rows, tableName) {\n var thead = this.parent.getHeaderTable() && this.parent.getHeaderTable().querySelector('thead');\n var cols = this.parent.enableColumnVirtualization ?\n this.parent.getColumns(this.parent.enablePersistence) : this.parent.columns;\n this.frzIdx = 0;\n this.notfrzIdx = 0;\n if (this.parent.lockcolPositionCount) {\n for (var i = 0; i < cols.length; i++) {\n this.lockColsRendered = false;\n rows = this.appendCells(cols[parseInt(i.toString(), 10)], rows, 0, i === 0, false, i === (cols.length - 1), thead, tableName, false);\n }\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.notfrzIdx = 0;\n this.lockColsRendered = true;\n rows = this.appendCells(cols[parseInt(i.toString(), 10)], rows, 0, i === 0, false, i === (len - 1), thead, tableName, false);\n }\n return rows;\n };\n HeaderRender.prototype.appendCells = function (cols, rows, index, isFirstObj, isFirstCol, isLastCol, isMovable, tableName, isStackLastCol) {\n var lastCol = isLastCol ? isStackLastCol ? 'e-laststackcell' : 'e-lastcell' : '';\n var isFrozen = this.parent.isFrozenGrid();\n var isLockColumn = !this.parent.lockcolPositionCount\n || (cols.lockColumn && !this.lockColsRendered) || (!cols.lockColumn && this.lockColsRendered);\n var isFrozenLockColumn = !this.parent.lockcolPositionCount || (cols.lockColumn && !this.lockColsRendered)\n || (!cols.lockColumn && this.lockColsRendered);\n var scrollbar = this.parent.getContent().querySelector('.e-movablescrollbar');\n var left;\n if (isFrozen && scrollbar && this.parent.enableColumnVirtualization) {\n left = scrollbar.scrollLeft;\n }\n if (!cols.columns) {\n if (left && left > 0 && this.parent.contentModule.isXaxis()\n && this.parent.inViewIndexes[0] !== 0 && cols.getFreezeTableName() === 'movable') {\n rows[parseInt(index.toString(), 10)].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n }\n else {\n if ((!isFrozen && isLockColumn) || (isFrozen && cols.getFreezeTableName() === tableName && isFrozenLockColumn)) {\n rows[parseInt(index.toString(), 10)].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n }\n }\n if (this.parent.lockcolPositionCount) {\n if ((this.frzIdx + this.notfrzIdx < this.parent.frozenColumns) &&\n ((cols.lockColumn && !this.lockColsRendered) || (!cols.lockColumn && this.lockColsRendered))) {\n this.frzIdx++;\n }\n else {\n this.notfrzIdx++;\n }\n }\n else {\n this.frzIdx++;\n }\n }\n else {\n this.isFirstCol = false;\n var colSpan = this.getCellCnt(cols, 0);\n if (colSpan) {\n var stackedLockColsCount = this.getStackedLockColsCount(cols, 0);\n var isStackedLockColumn = this.parent.lockcolPositionCount === 0\n || (!this.lockColsRendered && stackedLockColsCount !== 0)\n || (this.lockColsRendered && (colSpan - stackedLockColsCount) !== 0);\n var isFrozenStack = isFrozen && this.ensureStackedFrozen(cols.columns, tableName, false);\n if ((!isFrozen && isStackedLockColumn) || isFrozenStack) {\n rows[parseInt(index.toString(), 10)].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols,\n colSpan: this.getColSpan(colSpan, stackedLockColsCount, cols.columns, tableName, isFrozen),\n className: isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')\n }));\n }\n }\n if (this.parent.lockcolPositionCount && !this.lockColsRendered) {\n for (var i = 0; i < cols.columns.length; i++) {\n rows = this.appendCells(cols.columns[parseInt(i.toString(), 10)], rows, index + 1, isFirstObj, i === 0, i === (cols.columns.length - 1) && isLastCol, isMovable, tableName, false);\n }\n }\n if (this.lockColsRendered) {\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n isFirstObj = isFirstObj && i === 0;\n var isFirstCol_1 = this.isFirstCol = cols.columns[parseInt(i.toString(), 10)].visible\n && !isFirstObj;\n var isLaststackedCol = i === (len - 1) && isLastCol;\n rows = this.appendCells(cols.columns[parseInt(i.toString(), 10)], rows, index + 1, isFirstObj, isFirstCol_1 && !isLaststackedCol, isLaststackedCol, isMovable, tableName, true);\n }\n }\n }\n return rows;\n };\n HeaderRender.prototype.ensureStackedFrozen = function (columns, tableName, isTrue) {\n var length = columns.length;\n for (var i = 0; i < length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n isTrue = this.ensureStackedFrozen(columns[parseInt(i.toString(), 10)].columns, tableName, isTrue);\n }\n else if (columns[parseInt(i.toString(), 10)].getFreezeTableName() === tableName) {\n isTrue = true;\n break;\n }\n }\n return isTrue;\n };\n HeaderRender.prototype.getStackedLockColsCount = function (col, lockColsCount) {\n if (col.columns) {\n for (var i = 0; i < col.columns.length; i++) {\n lockColsCount = this.getStackedLockColsCount(col.columns[parseInt(i.toString(), 10)], lockColsCount);\n }\n }\n else if (col.lockColumn) {\n lockColsCount++;\n }\n return lockColsCount;\n };\n HeaderRender.prototype.getColSpan = function (colSpan, stackedLockColsCount, columns, tableName, isFrozen) {\n if (isFrozen) {\n colSpan = this.getFrozenColSpan(columns, tableName, 0);\n }\n else if (this.parent.lockcolPositionCount) {\n colSpan = !this.lockColsRendered ? stackedLockColsCount : colSpan - stackedLockColsCount;\n }\n return colSpan;\n };\n HeaderRender.prototype.getFrozenColSpan = function (columns, tableName, count) {\n var length = columns.length;\n for (var i = 0; i < length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n count = this.getFrozenColSpan(columns[parseInt(i.toString(), 10)].columns, tableName, count);\n }\n else if (columns[parseInt(i.toString(), 10)].getFreezeTableName() === tableName\n && columns[parseInt(i.toString(), 10)].visible) {\n count++;\n }\n }\n return count;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n HeaderRender.prototype.generateRow = function (index) {\n return new Row({});\n };\n HeaderRender.prototype.generateCell = function (column, cellType, rowSpan, className, rowIndex, colIndex) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': false,\n 'isTemplate': !isNullOrUndefined(column.headerTemplate),\n 'rowID': '',\n 'column': column,\n 'cellType': cellType,\n 'rowSpan': rowSpan,\n 'className': className,\n 'index': rowIndex,\n 'colIndex': colIndex\n };\n if (!opt.rowSpan || opt.rowSpan < 2) {\n delete opt.rowSpan;\n }\n return new Cell(opt);\n };\n /**\n * Function to hide header table column based on visible property\n *\n * @param {Column[]} columns - specifies the column\n * @returns {void}\n */\n HeaderRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var displayVal;\n var idx;\n var frzCols = gObj.getFrozenColumns();\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[parseInt(c.toString(), 10)];\n idx = gObj.getNormalizedColumnIndex(column.uid);\n displayVal = column.visible ? '' : 'none';\n if (frzCols) {\n var normalizedfrzCols = this.parent.isRowDragable() ? frzCols + 1 : frzCols;\n if (idx < normalizedfrzCols) {\n setStyleAttribute(this.getColGroup().children[parseInt(idx.toString(), 10)], { 'display': displayVal });\n }\n else {\n var mTblColGrp = gObj.getHeaderContent().querySelector('.' + literals.movableHeader).querySelector(literals.colGroup);\n setStyleAttribute(mTblColGrp.children[idx - normalizedfrzCols], { 'display': displayVal });\n }\n }\n else {\n setStyleAttribute(this.getColGroup().children[parseInt(idx.toString(), 10)], { 'display': displayVal });\n }\n }\n this.refreshUI();\n };\n HeaderRender.prototype.colPosRefresh = function () {\n this.refreshUI();\n };\n /**\n * Refresh the header of the Grid.\n *\n * @returns {void}\n */\n HeaderRender.prototype.refreshUI = function () {\n var frzCols = this.parent.isFrozenGrid();\n var isVFTable = this.parent.enableColumnVirtualization && frzCols;\n var headerDiv = this.getPanel();\n this.toggleStackClass(headerDiv);\n var table = this.freezeReorder ? this.headerPanel.querySelector('.' + literals.movableHeader).querySelector('.' + literals.table)\n : this.getTable();\n var tableName = this.parent.isFrozenGrid() ? this.parent.getFrozenLeftCount() ? 'frozen-left'\n : 'frozen-right' : undefined;\n if (isVFTable) {\n table = this.parent.contentModule.getVirtualFreezeHeader();\n tableName = this.parent.contentModule.isXaxis() ? 'movable' : tableName;\n }\n if (table) {\n remove(table);\n table.removeChild(table.firstChild);\n table.removeChild(table.childNodes[0]);\n var colGroup = this.parent.createElement(literals.colGroup);\n var findHeaderRow = this.createHeaderContent(tableName);\n this.rows = findHeaderRow.rows;\n table.insertBefore(findHeaderRow.thead, table.firstChild);\n this.updateColGroup(colGroup);\n table.insertBefore(this.setColGroup(colGroup), table.firstChild);\n if (!isVFTable) {\n this.setTable(table);\n }\n this.appendContent(table);\n this.parent.notify(events.colGroupRefresh, {});\n this.widthService.setWidthToColumns();\n this.parent.updateDefaultCursor();\n if (!frzCols || (this.parent.enableColumnVirtualization && frzCols)) {\n this.initializeHeaderDrag();\n }\n var rows = [].slice.call(headerDiv.querySelectorAll('tr.e-columnheader'));\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n var gCells = [].slice.call(row.getElementsByClassName('e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n }\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: frzCols } });\n if (this.parent.enableColumnVirtualization && parentsUntil(table, literals.movableHeader)) {\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false, isXaxis: true } });\n }\n if (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {\n wrap(rows, true);\n }\n }\n };\n HeaderRender.prototype.toggleStackClass = function (div) {\n var column = this.parent.columns;\n var stackedHdr = column.some(function (column) { return !isNullOrUndefined(column.columns); });\n if (stackedHdr) {\n div.classList.add('e-stackedheader');\n }\n else {\n div.classList.remove('e-stackedheader');\n }\n };\n HeaderRender.prototype.appendContent = function (table) {\n this.getPanel().querySelector('.' + literals.headerContent).appendChild(table);\n };\n HeaderRender.prototype.getCellCnt = function (col, cnt) {\n if (col.columns) {\n for (var i = 0, len = col.columns.length; i < len; i++) {\n cnt = this.getCellCnt(col.columns[parseInt(i.toString(), 10)], cnt);\n }\n }\n else {\n if (col.visible) {\n cnt++;\n }\n }\n return cnt;\n };\n HeaderRender.prototype.initializeHeaderDrag = function () {\n var gObj = this.parent;\n if (!(this.parent.allowReordering || (this.parent.allowGrouping && this.parent.groupSettings.showDropArea))) {\n return;\n }\n this.draggable = new Draggable(gObj.getHeaderContent(), {\n dragTarget: '.e-headercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop,\n abort: '.e-rhandler',\n isReplaceDragEle: this.isReplaceDragEle\n });\n this.parent.on(events.destroy, this.droppableDestroy, this);\n };\n HeaderRender.prototype.initializeHeaderDrop = function () {\n var gObj = this.parent;\n this.droppable = new Droppable(gObj.getHeaderContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n this.parent.on(events.destroy, this.droppableDestroy, this);\n };\n HeaderRender.prototype.droppableDestroy = function () {\n if (this.droppable && !this.droppable.isDestroyed) {\n this.droppable.destroy();\n }\n if (this.draggable && !this.draggable.isDestroyed) {\n this.draggable.destroy();\n }\n };\n HeaderRender.prototype.renderCustomToolbar = function () {\n var _this = this;\n var gObj = this.parent;\n if (gObj.rowRenderingMode === 'Vertical' && !gObj.toolbar\n && (gObj.allowSorting || (gObj.allowFiltering && gObj.filterSettings.type !== 'FilterBar'))) {\n var div = gObj.createElement('div', { className: 'e-res-toolbar e-toolbar' });\n var toolbarItems = gObj.createElement('div', { className: 'e-toolbar-items' });\n var toolbarLeft = gObj.createElement('div', { className: 'e-toolbar-left' });\n var count = this.parent.allowFiltering && this.parent.allowSorting ? 2 : 1;\n for (var i = 0; i < count; i++) {\n var toolbarItem = gObj.createElement('div', { className: 'e-toolbar-item e-gridresponsiveicons e-icons e-tbtn-align' });\n var cls = count === 1 ? this.parent.allowSorting ? 'sort'\n : 'filter' : i === 1 ? 'sort' : 'filter';\n var button = gObj.createElement('button', { className: 'e-tbar-btn e-control e-btn e-lib e-icon-btn' });\n var span = gObj.createElement('span', { className: 'e-btn-icon e-res' + cls + '-icon e-icons' });\n button.appendChild(span);\n var btnObj = new Button({\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n btnObj.appendTo(button);\n button.onclick = function (e) {\n if (e.target.classList.contains('e-ressort-btn')\n || e.target.classList.contains('e-ressort-icon')) {\n _this.parent.showResponsiveCustomSort();\n }\n else {\n _this.parent.showResponsiveCustomFilter();\n }\n };\n toolbarItem.appendChild(button);\n toolbarLeft.appendChild(toolbarItem);\n }\n toolbarItems.appendChild(toolbarLeft);\n div.appendChild(toolbarItems);\n gObj.element.insertBefore(div, this.parent.element.querySelector('.' + literals.gridHeader));\n }\n else {\n if (gObj.enableAdaptiveUI && !gObj.toolbar) {\n gObj.getContent().classList.add('e-responsive-header');\n }\n }\n };\n HeaderRender.prototype.updateCustomResponsiveToolbar = function (args) {\n var resToolbar = this.parent.element.querySelector('.e-responsive-toolbar');\n if (args.module === 'toolbar') {\n if (resToolbar) {\n remove(resToolbar);\n }\n else {\n this.renderCustomToolbar();\n }\n }\n };\n return HeaderRender;\n}());\nexport { HeaderRender };\n","import { remove, addClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { doesImplementInterface, setStyleAndAttributes, appendChildren, extendObjWithFn } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { foreignKeyData } from '../base/constant';\nimport { CellType } from '../base/enum';\nimport * as literals from '../base/string-literals';\n/**\n * CellRenderer class which responsible for building cell content.\n *\n * @hidden\n */\nvar CellRenderer = /** @class */ (function () {\n function CellRenderer(parent, locator) {\n this.localizer = locator.getService('localization');\n this.formatter = locator.getService('valueFormatter');\n this.parent = parent;\n this.element = this.parent.createElement('TD', { className: literals.rowCell, attrs: { tabindex: '-1' } });\n this.rowChkBox = this.parent.createElement('input', { className: 'e-checkselect', attrs: { 'type': 'checkbox',\n 'aria-label': this.localizer.getConstant('CheckBoxLabel') } });\n }\n /**\n * Function to return the wrapper for the TD content\n *\n * @returns {string | Element} returns the string\n */\n CellRenderer.prototype.getGui = function () {\n return '';\n };\n /**\n * Function to format the cell value.\n *\n * @param {Column} column - specifies the column\n * @param {Object} value - specifies the value\n * @param {Object} data - specifies the data\n * @returns {string} returns the format\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CellRenderer.prototype.format = function (column, value, data) {\n if (!isNullOrUndefined(column.format)) {\n if (column.type === 'number' && isNaN(parseInt(value, 10))) {\n value = null;\n }\n value = this.formatter.toView(value, column.getFormatter());\n }\n return isNullOrUndefined(value) ? '' : value.toString();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CellRenderer.prototype.evaluate = function (node, cell, data, attributes, fData, isEdit) {\n var _a;\n var result;\n if (cell.column.template) {\n var isReactCompiler = this.parent.isReact && typeof (cell.column.template) !== 'string' && cell.column.template.prototype && !(cell.column.template.prototype).CSPTemplate;\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n var literals_1 = ['index'];\n var dummyData = extendObjWithFn({}, data, (_a = {}, _a[foreignKeyData] = fData, _a.column = cell.column, _a));\n var templateID = this.parent.element.id + cell.column.uid;\n var str = 'isStringTemplate';\n if (isReactCompiler || isReactChild) {\n var copied = { 'index': attributes[literals_1[0]] };\n cell.column.getColumnTemplate()(extend(copied, dummyData), this.parent, 'columnTemplate', templateID, this.parent[\"\" + str], null, node);\n }\n else {\n result = cell.column.getColumnTemplate()(extend({ 'index': attributes[literals_1[0]] }, dummyData), this.parent, 'template', templateID, this.parent[\"\" + str], undefined, undefined, this.parent['root']);\n }\n if (!isReactCompiler && !isReactChild) {\n appendChildren(node, result);\n }\n this.parent.notify('template-result', { template: result });\n result = null;\n node.setAttribute('aria-label', node.innerText + this.localizer.getConstant('TemplateCell') +\n this.localizer.getConstant('ColumnHeader') + cell.column.headerText);\n return false;\n }\n return true;\n };\n /**\n * Function to invoke the custom formatter available in the column object.\n *\n * @param {Column} column - specifies the column\n * @param {Object} value - specifies the value\n * @param {Object} data - specifies the data\n * @returns {Object} returns the object\n */\n CellRenderer.prototype.invokeFormatter = function (column, value, data) {\n if (!isNullOrUndefined(column.formatter)) {\n if (doesImplementInterface(column.formatter, 'getValue')) {\n var formatter = column.formatter;\n value = new formatter().getValue(column, data);\n }\n else if (typeof column.formatter === 'function') {\n value = column.formatter(column, data);\n }\n else {\n value = column.formatter.getValue(column, data);\n }\n }\n return value;\n };\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @param {Object} attributes - specifies the attributes\n * @param {boolean} isExpand - specifies the boolean for expand\n * @param {boolean} isEdit - specifies the boolean for edit\n * @returns {Element} returns the element\n */\n CellRenderer.prototype.render = function (cell, data, attributes, isExpand, isEdit) {\n return this.refreshCell(cell, data, attributes, isEdit);\n };\n /**\n * Function to refresh the cell content based on Column object.\n *\n * @param {Element} td - specifies the element\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @param {Object} attributes - specifies the attribute\n * @returns {void}\n */\n CellRenderer.prototype.refreshTD = function (td, cell, data, attributes) {\n var isEdit = this.parent.editSettings.mode === 'Batch' && td.classList.contains('e-editedbatchcell');\n if (this.parent.isReact) {\n var cellIndex = td.cellIndex;\n var parentRow = td.parentElement;\n remove(td);\n var newTD = this.refreshCell(cell, data, attributes, isEdit);\n this.cloneAttributes(newTD, td);\n if (parentRow.cells.length !== cellIndex - 1) {\n parentRow.insertBefore(newTD, parentRow.cells[parseInt(cellIndex.toString(), 10)]);\n }\n else {\n parentRow.appendChild(newTD);\n }\n }\n else {\n var node = this.refreshCell(cell, data, attributes, isEdit);\n td.innerHTML = '';\n td.setAttribute('aria-label', node.getAttribute('aria-label'));\n var elements = [].slice.call(node.childNodes);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n td.appendChild(elem);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n CellRenderer.prototype.cloneAttributes = function (target, source) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var attrs = source.attributes;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var i = attrs.length;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var attr;\n while (i--) {\n attr = attrs[parseInt(i.toString(), 10)];\n target.setAttribute(attr.name, attr.value);\n }\n };\n CellRenderer.prototype.refreshCell = function (cell, data, attributes, isEdit) {\n var _a;\n var node = this.element.cloneNode();\n var column = cell.column;\n var fData;\n if (cell.isForeignKey) {\n fData = cell.foreignKeyData[0] || (_a = {}, _a[column.foreignKeyValue] = column.format ? null : '', _a);\n }\n //Prepare innerHtml\n var innerHtml = this.getGui();\n var value = cell.isForeignKey ? this.getValue(column.foreignKeyValue, fData, column) :\n this.getValue(column.field, data, column);\n if ((column.type === 'date' || column.type === 'datetime' || column.type === 'dateonly') && !isNullOrUndefined(value)) {\n value = new Date(value);\n }\n value = this.format(column, value, data);\n innerHtml = value.toString();\n if (column.type === 'boolean' && !column.displayAsCheckBox) {\n var localeStr = (value !== 'true' && value !== 'false') ? null : value === 'true' ? 'True' : 'False';\n innerHtml = localeStr ? this.localizer.getConstant(localeStr) : innerHtml;\n }\n var fromFormatter = this.invokeFormatter(column, value, data);\n innerHtml = !isNullOrUndefined(column.formatter) ? isNullOrUndefined(fromFormatter) ? '' : fromFormatter.toString() : innerHtml;\n node.setAttribute('aria-label', innerHtml + this.localizer.getConstant('ColumnHeader') + cell.column.headerText);\n if (this.evaluate(node, cell, data, attributes, fData, isEdit) && column.type !== 'checkbox') {\n this.appendHtml(node, this.parent.sanitize(innerHtml), column.getDomSetter ? column.getDomSetter() : 'innerHTML');\n }\n else if (column.type === 'checkbox') {\n node.classList.add(literals.gridChkBox);\n node.setAttribute('aria-label', this.localizer.getConstant('CheckBoxLabel'));\n if (this.parent.selectionSettings.persistSelection) {\n value = value === 'true';\n }\n else {\n value = false;\n }\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n if (this.parent.cssClass) {\n addClass([checkWrap], [this.parent.cssClass]);\n }\n this.rowChkBox.id = 'checkbox-' + cell.rowID;\n checkWrap.insertBefore(this.rowChkBox.cloneNode(), checkWrap.firstChild);\n node.appendChild(checkWrap);\n }\n if (this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n cell.isSelected = true;\n }\n this.setAttributes(node, cell, attributes);\n if (column.type === 'boolean' && column.displayAsCheckBox) {\n var checked = isNaN(parseInt(value.toString(), 10)) ? value === 'true' : parseInt(value.toString(), 10) > 0;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: checked, label: ' ' });\n node.innerHTML = '';\n node.classList.add('e-gridchkbox-cell');\n checkWrap.classList.add('e-checkbox-disabled');\n if (this.parent.cssClass) {\n addClass([checkWrap], [this.parent.cssClass]);\n }\n node.appendChild(checkWrap);\n node.setAttribute('aria-label', checked + this.localizer.getConstant('ColumnHeader') + cell.column.headerText);\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n *\n * @param {Element} node - specifies the node\n * @param {string|Element} innerHtml - specifies the innerHTML\n * @param {string} property - specifies the element\n * @returns {Element} returns the element\n */\n CellRenderer.prototype.appendHtml = function (node, innerHtml, property) {\n if (property === void 0) { property = 'innerHTML'; }\n node[\"\" + property] = innerHtml;\n return node;\n };\n /**\n * @param {HTMLElement} node - specifies the node\n * @param {cell} cell - specifies the cell\n * @param {Object} attributes - specifies the attributes\n * @returns {void}\n * @hidden\n */\n CellRenderer.prototype.setAttributes = function (node, cell, attributes) {\n var column = cell.column;\n this.buildAttributeFromCell(node, cell, column.type === 'checkbox');\n setStyleAndAttributes(node, attributes);\n setStyleAndAttributes(node, cell.attributes);\n if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (this.parent.rowRenderingMode === 'Vertical') {\n setStyleAndAttributes(node, { 'data-cell': column.headerText });\n }\n if (column.textAlign) {\n node.style.textAlign = column.textAlign;\n }\n if (column.clipMode === 'Clip' || (!column.clipMode && this.parent.clipMode === 'Clip')) {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip' || (!column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip')\n && !(this.parent.allowTextWrap && (this.parent.textWrapSettings.wrapMode === 'Content'\n || this.parent.textWrapSettings.wrapMode === 'Both'))) {\n if (column.type !== 'checkbox') {\n node.classList.add('e-ellipsistooltip');\n }\n }\n };\n CellRenderer.prototype.buildAttributeFromCell = function (node, cell, isCheckBoxType) {\n var attr = {};\n var prop = { 'colindex': literals.dataColIndex };\n var classes = [];\n if (cell.colSpan) {\n attr.colSpan = cell.colSpan;\n }\n if (cell.rowSpan) {\n attr.rowSpan = cell.rowSpan;\n }\n if (cell.isTemplate) {\n classes.push('e-templatecell');\n }\n if (cell.isSelected) {\n classes.push.apply(classes, ['e-selectionbackground', 'e-active']);\n if (isCheckBoxType) {\n node.querySelector('.e-frame').classList.add('e-check');\n }\n }\n if (cell.isColumnSelected) {\n classes.push.apply(classes, ['e-columnselection']);\n }\n if (cell.cellType === CellType.Header) {\n attr[prop.colindex] = cell.colIndex;\n attr[literals.ariaColIndex] = cell.colIndex + 1;\n }\n else if (!isNullOrUndefined(cell.index)) {\n attr[prop.colindex] = cell.index;\n attr[literals.ariaColIndex] = cell.index + 1;\n }\n if (!cell.visible) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(node, attr);\n };\n CellRenderer.prototype.getValue = function (field, data, column) {\n return column.valueAccessor(field, data, column);\n };\n return CellRenderer;\n}());\nexport { CellRenderer };\n","/**\n * AriaService\n *\n * @hidden\n */\nvar AriaService = /** @class */ (function () {\n function AriaService() {\n }\n AriaService.prototype.setOptions = function (target, options) {\n var props = Object.keys(options);\n for (var i = 0; i < props.length; i++) {\n setStateAndProperties(target, config[props[parseInt(i.toString(), 10)]], options[props[parseInt(i.toString(), 10)]]);\n }\n };\n AriaService.prototype.setExpand = function (target, expand) {\n setStateAndProperties(target, config.expand, expand);\n };\n AriaService.prototype.setSort = function (target, direction) {\n setStateAndProperties(target, config.sort, direction, typeof direction === 'boolean');\n };\n AriaService.prototype.setBusy = function (target, isBusy) {\n setStateAndProperties(target, config.busy, isBusy);\n setStateAndProperties(target, config.invalid, null, true);\n };\n AriaService.prototype.setGrabbed = function (target, isGrabbed, remove) {\n setStateAndProperties(target, config.grabbed, isGrabbed, remove);\n };\n AriaService.prototype.setDropTarget = function (target, isTarget) {\n setStateAndProperties(target, config.dropeffect, 'copy', !isTarget);\n };\n return AriaService;\n}());\nexport { AriaService };\n/**\n * @param {HTMLElement} target - specifies the target\n * @param {string} attribute - specifies the attribute\n * @param {ValueType} value - specifies the value\n * @param {boolean} remove - specifies the boolean for remove\n * @returns {void}\n * @hidden\n */\nfunction setStateAndProperties(target, attribute, value, remove) {\n if (remove && target) {\n target.removeAttribute(attribute);\n return;\n }\n if (target) {\n target.setAttribute(attribute, value);\n }\n}\nvar config = {\n expand: 'aria-expanded',\n role: 'role',\n datarole: 'data-role',\n selected: 'aria-selected',\n multiselectable: 'aria-multiselectable',\n sort: 'aria-sort',\n busy: 'aria-busy',\n invalid: 'aria-invalid',\n grabbed: 'aria-grabbed',\n dropeffect: 'aria-dropeffect',\n haspopup: 'aria-haspopup',\n level: 'aria-level',\n colcount: 'aria-colcount',\n rowcount: 'aria-rowcount'\n};\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, extend, addClass } from '@syncfusion/ej2-base';\nimport { attributes } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes, appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { AriaService } from '../services/aria-service';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { headerCellInfo } from '../base/constant';\n/**\n * HeaderCellRenderer class which responsible for building header cell content.\n *\n * @hidden\n */\nvar HeaderCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderCellRenderer, _super);\n function HeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent\n .createElement('TH', { className: 'e-headercell', attrs: { tabindex: '-1' } });\n _this.ariaService = new AriaService();\n _this.hTxtEle = _this.parent.createElement('span', { className: 'e-headertext' });\n _this.sortEle = _this.parent.createElement('div', { className: 'e-sortfilterdiv e-icons', attrs: { 'aria-hidden': 'true' } });\n _this.gui = _this.parent.createElement('div');\n _this.chkAllBox = _this.parent.createElement('input', { className: 'e-checkselectall', attrs: { 'type': 'checkbox', 'aria-label': _this.localizer.getConstant('CheckBoxLabel') } });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n *\n * @returns {string | Element} returns the element\n */\n HeaderCellRenderer.prototype.getGui = function () {\n return this.gui.cloneNode();\n };\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the column\n * @param {Object} data - specifies the data\n * @param {object} attributes - specifies the aattributes\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n HeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var fltrMenuEle = this.parent.createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter', attrs: { 'aria-hidden': 'true' } });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n /**\n * Function to refresh the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the cell\n * @param {Element} node - specifies the noe\n * @returns {Element} returns the element\n */\n HeaderCellRenderer.prototype.refresh = function (cell, node) {\n this.clean(node);\n var fltrMenuEle = this.parent.createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter', attrs: { 'aria-hidden': 'true' } });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n HeaderCellRenderer.prototype.clean = function (node) {\n node.innerHTML = '';\n };\n /* tslint:disable-next-line:max-func-body-length */\n HeaderCellRenderer.prototype.prepareHeader = function (cell, node, fltrMenuEle) {\n var column = cell.column;\n var ariaAttr = {};\n var elementDesc = '';\n //Prepare innerHtml\n var innerDIV = this.getGui();\n var hValueAccer;\n attributes(innerDIV, {\n 'e-mappinguid': column.uid,\n 'class': 'e-headercelldiv'\n });\n if (!isNullOrUndefined(column.headerValueAccessor)) {\n hValueAccer = this.getValue(column.headerText, column);\n }\n if (column.type !== 'checkbox') {\n var value = column.headerText;\n if (!isNullOrUndefined(hValueAccer)) {\n value = hValueAccer;\n }\n var headerText = this.hTxtEle.cloneNode();\n headerText[column.getDomSetter()] = this.parent.sanitize(value);\n innerDIV.appendChild(headerText);\n }\n else {\n column.editType = 'booleanedit';\n var checkAllWrap = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n this.chkAllBox.id = 'checkbox-' + column.uid;\n checkAllWrap.insertBefore(this.chkAllBox.cloneNode(), checkAllWrap.firstChild);\n if (this.parent.cssClass) {\n addClass([checkAllWrap], [this.parent.cssClass]);\n }\n innerDIV.appendChild(checkAllWrap);\n innerDIV.classList.add('e-headerchkcelldiv');\n }\n this.buildAttributeFromCell(node, cell);\n this.appendHtml(node, innerDIV);\n node.appendChild(this.sortEle.cloneNode());\n if ((this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') &&\n (column.allowFiltering && !isNullOrUndefined(column.field)) &&\n !(this.parent.showColumnMenu && column.showColumnMenu)) {\n attributes(fltrMenuEle, {\n 'e-mappinguid': 'e-flmenu-' + column.uid\n });\n elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('FilterDescription') : this.localizer.getConstant('FilterDescription');\n node.classList.add('e-fltr-icon');\n var matchFlColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFlColumns.length) {\n var foreignColumn = this.parent.getForeignKeyColumns();\n for (var index = 0; index < this.parent.columns.length; index++) {\n for (var count = 0; count < this.parent.filterSettings.columns.length; count++) {\n if (this.parent.filterSettings.columns[parseInt(count.toString(), 10)].field === column.field\n || (foreignColumn.length\n && column.foreignKeyValue === this.parent.filterSettings.columns[parseInt(count.toString(), 10)].field)) {\n fltrMenuEle.classList.add('e-filtered');\n matchFlColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.appendChild(fltrMenuEle.cloneNode());\n }\n if (cell.className) {\n node.classList.add(cell.className);\n }\n if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (this.parent.allowSorting && column.allowSorting) {\n ariaAttr.sort = 'none';\n elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('SortDescription') : this.localizer.getConstant('SortDescription');\n }\n if ((this.parent.allowGrouping && column.allowGrouping) || this.parent.allowReordering && column.allowReordering) {\n ariaAttr.grabbed = false;\n elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('GroupDescription') : this.localizer.getConstant('GroupDescription');\n }\n if (this.parent.showColumnMenu) {\n elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('ColumnMenuDescription') : this.localizer.getConstant('ColumnMenuDescription');\n }\n node = this.extendPrepareHeader(column, node);\n var result;\n var gridObj = this.parent;\n var colIndex = gridObj.getColumnIndexByField(column.field);\n if (!isNullOrUndefined(column.headerTemplate)) {\n //need to pass the template id for blazor headertemplate\n var headerTempID = gridObj.element.id + column.uid + 'headerTemplate';\n var str = 'isStringTemplate';\n var col = column;\n var isReactCompiler = this.parent.isReact && typeof (column.headerTemplate) !== 'string';\n var isReactChild_1 = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild_1) {\n var copied = { 'index': colIndex };\n node.firstElementChild.innerHTML = '';\n column.getHeaderTemplate()(extend(copied, col), gridObj, 'headerTemplate', headerTempID, this.parent[\"\" + str], null, node.firstElementChild);\n this.parent.renderTemplates();\n }\n else {\n result = column.getHeaderTemplate()(extend({ 'index': colIndex }, col), gridObj, 'headerTemplate', headerTempID, this.parent[\"\" + str], undefined, undefined, this.parent['root']);\n node.firstElementChild.innerHTML = '';\n appendChildren(node.firstElementChild, result);\n }\n }\n this.ariaService.setOptions(node, ariaAttr);\n if (!isNullOrUndefined(column.headerTextAlign) || !isNullOrUndefined(column.textAlign)) {\n var alignment = column.headerTextAlign || column.textAlign;\n innerDIV.style.textAlign = alignment;\n if (alignment === 'Right' || alignment === 'Left') {\n node.classList.add(alignment === 'Right' ? 'e-rightalign' : 'e-leftalign');\n }\n else if (alignment === 'Center') {\n node.classList.add('e-centeralign');\n }\n }\n if (column.clipMode === 'Clip' || (!column.clipMode && this.parent.clipMode === 'Clip')) {\n node.classList.add('e-gridclip');\n }\n else if ((column.clipMode === 'EllipsisWithTooltip' || (!column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip'))\n && !(gridObj.allowTextWrap && (gridObj.textWrapSettings.wrapMode === 'Header'\n || gridObj.textWrapSettings.wrapMode === 'Both'))) {\n if (column.type !== 'checkbox') {\n node.classList.add('e-ellipsistooltip');\n }\n }\n if (elementDesc) {\n node.setAttribute('aria-description', elementDesc);\n }\n node.setAttribute('aria-rowspan', (!isNullOrUndefined(cell.rowSpan) ? cell.rowSpan : 1).toString());\n node.setAttribute('aria-colspan', '1');\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (((this.parent.isReact && this.parent.requireTemplateRef)\n || (isReactChild && this.parent.parentDetails.parentInstObj.requireTemplateRef))\n && !isNullOrUndefined(column.headerTemplate)) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_1 = this;\n thisRef_1.parent.renderTemplates(function () {\n thisRef_1.parent.trigger(headerCellInfo, { cell: cell, node: node });\n });\n }\n else {\n this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n }\n return node;\n };\n HeaderCellRenderer.prototype.getValue = function (field, column) {\n return column.headerValueAccessor(field, column);\n };\n HeaderCellRenderer.prototype.extendPrepareHeader = function (column, node) {\n if (this.parent.showColumnMenu && column.showColumnMenu && !isNullOrUndefined(column.field)) {\n var element = (this.parent.createElement('div', { className: 'e-icons e-columnmenu', attrs: { 'aria-hidden': 'true' } }));\n var matchFilteredColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFilteredColumns.length) {\n for (var i = 0; i < this.parent.columns.length; i++) {\n for (var j = 0; j < this.parent.filterSettings.columns.length; j++) {\n if (this.parent.filterSettings.columns[parseInt(j.toString(), 10)].field === column.field) {\n element.classList.add('e-filtered');\n matchFilteredColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.classList.add('e-fltr-icon');\n node.appendChild(element);\n }\n if (this.parent.allowResizing) {\n var handler = this.parent.createElement('div');\n handler.className = column.allowResizing ? 'e-rhandler e-rcursor' : 'e-rsuppress';\n node.appendChild(handler);\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n *\n * @param {Element} node - specifies the node\n * @param {string|Element} innerHtml - specifies the innerHtml\n * @returns {Element} returns the element\n */\n HeaderCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n return HeaderCellRenderer;\n}(CellRenderer));\nexport { HeaderCellRenderer };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { headerCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, appendChildren } from '../base/util';\n/**\n * StackedHeaderCellRenderer class which responsible for building stacked header cell content.\n *\n * @hidden\n */\nvar StackedHeaderCellRenderer = /** @class */ (function (_super) {\n __extends(StackedHeaderCellRenderer, _super);\n function StackedHeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', {\n className: 'e-headercell e-stackedheadercell', attrs: {\n tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @param {object} attributes - specifies the attributes\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n StackedHeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var div = this.parent.createElement('div', {\n className: 'e-stackedheadercelldiv',\n attrs: { 'e-mappinguid': cell.column.uid }\n });\n var column = cell.column;\n node.appendChild(div);\n if (!isNullOrUndefined(column.headerTemplate)) {\n appendChildren(div, column.getHeaderTemplate()(column, this.parent, 'headerTemplate'));\n }\n else {\n this.appendHtml(div, this.parent.sanitize(column.headerText), column.getDomSetter());\n }\n if (cell.column.toolTip) {\n node.setAttribute('title', cell.column.toolTip);\n }\n if (column.clipMode === 'Clip' || (!column.clipMode && this.parent.clipMode === 'Clip')) {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip' || (!column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip')) {\n node.classList.add('e-ellipsistooltip');\n }\n if (!isNullOrUndefined(cell.column.textAlign)) {\n div.style.textAlign = cell.column.textAlign;\n }\n if (cell.column.customAttributes) {\n setStyleAndAttributes(node, cell.column.customAttributes);\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-colspan', cell.colSpan.toString());\n node.setAttribute('aria-rowspan', '1');\n if (this.parent.allowResizing) {\n var handler = this.parent.createElement('div');\n handler.className = cell.column.allowResizing ? 'e-rhandler e-rcursor' : 'e-rsuppress';\n node.appendChild(handler);\n }\n if (cell.className) {\n node.classList.add(cell.className);\n }\n this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n return node;\n };\n return StackedHeaderCellRenderer;\n}(CellRenderer));\nexport { StackedHeaderCellRenderer };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * IndentCellRenderer class which responsible for building group indent cell.\n *\n * @hidden\n */\nvar IndentCellRenderer = /** @class */ (function (_super) {\n __extends(IndentCellRenderer, _super);\n function IndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', { className: 'e-indentcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n IndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n setStyleAndAttributes(node, cell.attributes);\n return node;\n };\n return IndentCellRenderer;\n}(CellRenderer));\nexport { IndentCellRenderer };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren, templateCompiler } from '../base/util';\n/**\n * GroupCaptionCellRenderer class which responsible for building group caption cell.\n *\n * @hidden\n */\nvar GroupCaptionCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionCellRenderer, _super);\n function GroupCaptionCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.cellUid = 0;\n _this.element = _this.parent\n .createElement('TD', { className: 'e-groupcaption',\n attrs: { id: _this.parent.element.id + 'captioncell', tabindex: '-1' } });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the GroupedData\n * @returns {Element} returns the element\n */\n GroupCaptionCellRenderer.prototype.render = function (cell, data) {\n this.element.id = this.parent.element.id + 'captioncell' + this.cellUid++;\n var node = this.element.cloneNode();\n var gObj = this.parent;\n var column = cell.column;\n var domSetter = column.getDomSetter ? column.getDomSetter() : 'innerHTML';\n var result;\n var fKeyValue;\n var gTemplateValue;\n data.headerText = cell.column.headerText;\n if (cell.isForeignKey) {\n fKeyValue = this.format(cell.column, cell.column.valueAccessor('foreignKey', data, cell.column));\n }\n var value = cell.isForeignKey ? fKeyValue : cell.column.enableGroupByFormat ? data.key :\n this.format(cell.column, cell.column.valueAccessor('key', data, cell.column));\n for (var j = 0; j < gObj.aggregates.length; j++) {\n for (var i = 0; i < gObj.aggregates[parseInt(j.toString(), 10)].columns.length; i++) {\n if (gObj.getVisibleColumns()[0].field === gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)]\n .field && gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)].groupCaptionTemplate) {\n if (gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)].groupCaptionTemplate.includes('$')) {\n gTemplateValue = gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)]\n .groupCaptionTemplate.split('$')[0] + data[gObj.getVisibleColumns()[0].field][gObj\n .aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)].type] +\n gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)].groupCaptionTemplate.split('}')[1];\n }\n else {\n gTemplateValue = gObj.aggregates[parseInt(j.toString(), 10)]\n .columns[parseInt(i.toString(), 10)].groupCaptionTemplate;\n }\n break;\n }\n }\n }\n if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n var isReactCompiler = this.parent.isReact && typeof (gObj.groupSettings.captionTemplate) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n var tempID = gObj.element.id + 'captionTemplate';\n templateCompiler(gObj.groupSettings.captionTemplate)(data, this.parent, 'captionTemplate', tempID, null, null, node);\n this.parent.renderTemplates();\n }\n else if (this.parent.isVue) {\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data, this.parent);\n }\n else {\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data);\n }\n if (!isReactCompiler && !isReactChild) {\n appendChildren(node, result);\n }\n }\n else {\n if (gObj.groupSettings.enableLazyLoading) {\n node[\"\" + domSetter] = this.parent.sanitize(cell.column.headerText) + ': ' + this.parent.sanitize(value) +\n (gTemplateValue ? ' ' + gTemplateValue : '');\n }\n else {\n node[\"\" + domSetter] = this.parent.sanitize(cell.column.headerText) + ': ' + this.parent.sanitize(value) +\n ' - ' + data.count + ' ' + (data.count < 2 ? this.localizer.getConstant('Item') : this.localizer.getConstant('Items'))\n + (gTemplateValue ? ' ' + gTemplateValue : '');\n }\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-label', node.innerHTML + this.localizer.getConstant('GroupCaption'));\n node.setAttribute('title', node.textContent);\n return node;\n };\n return GroupCaptionCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionCellRenderer };\n/**\n * GroupCaptionEmptyCellRenderer class which responsible for building group caption empty cell.\n *\n * @hidden\n */\nvar GroupCaptionEmptyCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionEmptyCellRenderer, _super);\n function GroupCaptionEmptyCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', { className: 'e-groupcaption' });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the Object\n * @param {string} data.field - Defines the field\n * @param {string} data.key - Defines the key\n * @param {number} data.count - Defines the count\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n GroupCaptionEmptyCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.innerHTML = ' ';\n node.setAttribute('colspan', cell.colSpan.toString());\n return node;\n };\n return GroupCaptionEmptyCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionEmptyCellRenderer };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { IndentCellRenderer } from './indent-cell-renderer';\nimport { CellType } from '../base/enum';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n *\n * @hidden\n */\nvar ExpandCellRenderer = /** @class */ (function (_super) {\n __extends(ExpandCellRenderer, _super);\n function ExpandCellRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Function to render the expand cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @param {string} data.field - Defines the field\n * @param {string} data.key - Defines the key\n * @param {Object} attr - specifies the attribute\n * @param {boolean} isExpand - specifies isexpand\n * @returns {Element} returns the element\n */\n ExpandCellRenderer.prototype.render = function (cell, data, attr, isExpand) {\n var node = this.element.cloneNode();\n node.setAttribute('ej-mappingname', data.field);\n node.setAttribute('ej-mappingvalue', data.key);\n node.setAttribute('aria-expanded', isExpand ? 'true' : 'false');\n node.setAttribute('tabindex', '-1');\n if (this.parent.infiniteScrollSettings && this.parent.infiniteScrollSettings.enableCache) {\n cell.cellType = CellType.Indent;\n node.className = isExpand ? 'e-recordplusexpand e-disablepointer' : 'e-recordpluscollapse e-disablepointer';\n }\n else {\n node.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n node.appendChild(this.parent.createElement('a', {\n className: isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' : 'e-icons e-gnextforward e-icon-grightarrow',\n attrs: { href: '#', 'title': isExpand ? 'expanded' : 'collapsed' }\n }));\n }\n return node;\n };\n return ExpandCellRenderer;\n}(IndentCellRenderer));\nexport { ExpandCellRenderer };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * HeaderIndentCellRenderer class which responsible for building header indent cell.\n *\n * @hidden\n */\nvar HeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderIndentCellRenderer, _super);\n function HeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-grouptopleftcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n HeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(this.parent.createElement('div', { className: 'e-headercelldiv e-emptycell', innerHTML: '' }));\n return node;\n };\n return HeaderIndentCellRenderer;\n}(CellRenderer));\nexport { HeaderIndentCellRenderer };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n *\n * @hidden\n */\nvar DetailHeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(DetailHeaderIndentCellRenderer, _super);\n function DetailHeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-detailheadercell' });\n return _this;\n }\n /**\n * Function to render the detail indent cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DetailHeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(this.parent.createElement('div', { className: 'e-emptycell' }));\n return node;\n };\n return DetailHeaderIndentCellRenderer;\n}(CellRenderer));\nexport { DetailHeaderIndentCellRenderer };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n *\n * @hidden\n */\nvar DetailExpandCellRenderer = /** @class */ (function (_super) {\n __extends(DetailExpandCellRenderer, _super);\n function DetailExpandCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', {\n className: 'e-detailrowcollapse',\n attrs: { 'aria-expanded': 'false', tabindex: '-1' }\n });\n return _this;\n }\n /**\n * Function to render the detail expand cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @param {Object} attributes - specifies the attributes\n * @returns {Element} returns the element\n */\n DetailExpandCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n if (attributes && !isNullOrUndefined(attributes['class'])) {\n node.className = '';\n node.className = attributes['class'];\n node.appendChild(this.parent.createElement('a', { className: 'e-icons e-dtdiagonaldown e-icon-gdownarrow', attrs: {\n href: '#', 'title': this.localizer.getConstant('Expanded')\n } }));\n }\n else {\n node.appendChild(this.parent.createElement('a', { className: 'e-icons e-dtdiagonalright e-icon-grightarrow', attrs: {\n href: '#', 'title': this.localizer.getConstant('Collapsed')\n } }));\n }\n return node;\n };\n return DetailExpandCellRenderer;\n}(CellRenderer));\nexport { DetailExpandCellRenderer };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n *\n * @hidden\n */\nvar RowDragDropRenderer = /** @class */ (function (_super) {\n __extends(RowDragDropRenderer, _super);\n function RowDragDropRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', {\n className: 'e-rowdragdrop e-rowdragdropcell',\n attrs: { tabindex: '-1' }\n });\n return _this;\n }\n /**\n * Function to render the detail expand cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n RowDragDropRenderer.prototype.render = function (cell, data) {\n var nodeElement = this.element.cloneNode();\n nodeElement.appendChild(this.parent.createElement('div', {\n className: 'e-icons e-rowcelldrag e-dtdiagonalright e-icon-rowdragicon',\n attrs: { 'aria-hidden': 'true' }\n }));\n if (cell.isSelected) {\n nodeElement.classList.add('e-selectionbackground');\n nodeElement.classList.add('e-active');\n }\n return nodeElement;\n };\n return RowDragDropRenderer;\n}(CellRenderer));\nexport { RowDragDropRenderer };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n *\n * @hidden\n */\nvar RowDragDropHeaderRenderer = /** @class */ (function (_super) {\n __extends(RowDragDropHeaderRenderer, _super);\n function RowDragDropHeaderRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-rowdragheader' });\n return _this;\n }\n /**\n * Function to render the detail indent cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n RowDragDropHeaderRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(createElement('div', { className: 'e-emptycell' }));\n return node;\n };\n return RowDragDropHeaderRenderer;\n}(CellRenderer));\nexport { RowDragDropHeaderRenderer };\n","import { remove, resetBlazorTemplate, blazorTemplates, getValue } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RenderType, CellType } from '../base/enum';\nimport { Data } from '../actions/data';\nimport { Column } from '../models/column';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport * as events from '../base/constant';\nimport { prepareColumns, setFormatter, isGroupAdaptive, getDatePredicate, getObject, clearReactVueTemplates } from '../base/util';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { HeaderRender } from '../renderer/header-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\nimport { StackedHeaderCellRenderer } from '../renderer/stacked-cell-renderer';\nimport { IndentCellRenderer } from '../renderer/indent-cell-renderer';\nimport { GroupCaptionCellRenderer, GroupCaptionEmptyCellRenderer } from '../renderer/caption-cell-renderer';\nimport { ExpandCellRenderer } from '../renderer/expand-cell-renderer';\nimport { HeaderIndentCellRenderer } from '../renderer/header-indent-renderer';\nimport { DetailHeaderIndentCellRenderer } from '../renderer/detail-header-indent-renderer';\nimport { DetailExpandCellRenderer } from '../renderer/detail-expand-cell-renderer';\nimport { RowDragDropRenderer } from './row-drag-drop-renderer';\nimport { RowDragDropHeaderRenderer } from '../renderer/row-drag-header-indent-render';\nimport * as literals from '../base/string-literals';\n/**\n * Content module is used to render grid content\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} locator - specifies the serviceLocator\n */\n function Render(parent, locator) {\n this.emptyGrid = false;\n this.counter = 0;\n this.parent = parent;\n this.locator = locator;\n this.data = new Data(parent, locator);\n this.l10n = locator.getService('localization');\n this.ariaService = this.locator.getService('ariaService');\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize grid header, content and footer rendering\n *\n * @returns {void}\n */\n Render.prototype.render = function () {\n var gObj = this.parent;\n this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.headerRenderer.renderPanel();\n this.contentRenderer.renderPanel();\n if (gObj.getColumns().length) {\n this.isLayoutRendered = true;\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.emptyRow(false);\n }\n this.parent.scrollModule.setWidth();\n this.parent.scrollModule.setHeight();\n if (this.parent.height !== 'auto') {\n this.parent.scrollModule.setPadding();\n }\n this.refreshDataManager();\n };\n /**\n * Refresh the entire Grid.\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n */\n Render.prototype.refresh = function (e) {\n var _this = this;\n if (e === void 0) { e = { requestType: 'refresh' }; }\n var gObj = this.parent;\n gObj.notify(e.requestType + \"-begin\", e);\n gObj.trigger(events.actionBegin, e, function (args) {\n if (args === void 0) { args = { requestType: 'refresh' }; }\n if (args.cancel) {\n gObj.notify(events.cancelBegin, args);\n return;\n }\n if (gObj.allowSelection && (args.action === 'clearFilter' || (args.requestType === 'searching' && args.searchString === '') ||\n args.action === 'add')) {\n gObj.selectionModule['rmtHdrChkbxClicked'] = false;\n }\n if (gObj.allowPaging && gObj.pageSettings.pageSizes && gObj.pagerModule.pagerObj.isAllPage &&\n (args.action === 'add' && args.requestType === 'save') && gObj.pagerModule.pagerObj.checkAll) {\n gObj.setProperties({ pageSettings: { pageSize: gObj.pageSettings.pageSize + 1 } }, true);\n }\n if (args.requestType === 'delete' && gObj.allowPaging) {\n var dataLength = args.data.length;\n var count = gObj.pageSettings.totalRecordsCount - dataLength;\n var currentViewData = gObj.getCurrentViewRecords().length;\n // eslint-disable-next-line max-len\n if (!(currentViewData - dataLength) && count && ((gObj.pageSettings.currentPage - 1) * gObj.pageSettings.pageSize) === count) {\n gObj.prevPageMoving = true;\n gObj.setProperties({\n pageSettings: {\n totalRecordsCount: count, currentPage: Math.ceil(count / gObj.pageSettings.pageSize)\n }\n }, true);\n gObj.pagerModule.pagerObj.totalRecordsCount = count;\n }\n }\n if (args.requestType === 'reorder' && _this.parent.dataSource && 'result' in _this.parent.dataSource) {\n _this.contentRenderer.refreshContentRows(args);\n }\n else if ((args.requestType === 'paging' || args.requestType === 'columnstate' || args.requestType === 'reorder')\n && _this.parent.groupSettings.enableLazyLoading && _this.parent.groupSettings.columns.length\n && (_this.parent.enableVirtualization ? _this.parent.lazyLoadRender :\n _this.parent.contentModule).getGroupCache()[_this.parent.pageSettings.currentPage]) {\n _this.contentRenderer.refreshContentRows(args);\n }\n else {\n _this.refreshDataManager(args);\n }\n });\n };\n /**\n * @returns {void}\n * @hidden\n */\n Render.prototype.resetTemplates = function () {\n var gObj = this.parent;\n var gridColumns = gObj.getColumns();\n if (gObj.detailTemplate) {\n var detailTemplateID = gObj.element.id + 'detailTemplate';\n blazorTemplates[\"\" + detailTemplateID] = [];\n resetBlazorTemplate(detailTemplateID, 'DetailTemplate');\n }\n if (gObj.groupSettings.captionTemplate) {\n resetBlazorTemplate(gObj.element.id + 'captionTemplate', 'CaptionTemplate');\n }\n if (gObj.rowTemplate) {\n resetBlazorTemplate(gObj.element.id + 'rowTemplate', 'RowTemplate');\n }\n if (gObj.toolbarTemplate) {\n resetBlazorTemplate(gObj.element.id + 'toolbarTemplate', 'ToolbarTemplate');\n }\n if (gObj.pageSettings.template) {\n resetBlazorTemplate(gObj.element.id + '_template', 'pageSettings');\n }\n for (var i = 0; i < gridColumns.length; i++) {\n if (gridColumns[parseInt(i.toString(), 10)].template) {\n blazorTemplates[gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid] = [];\n resetBlazorTemplate(gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid, 'Template');\n }\n if (gridColumns[parseInt(i.toString(), 10)].headerTemplate) {\n resetBlazorTemplate(gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid + 'headerTemplate', 'HeaderTemplate');\n }\n if (gridColumns[parseInt(i.toString(), 10)].filterTemplate) {\n resetBlazorTemplate(gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid + 'filterTemplate', 'FilterTemplate');\n }\n }\n var guid = 'guid';\n for (var k = 0; k < gObj.aggregates.length; k++) {\n for (var j = 0; j < gObj.aggregates[parseInt(k.toString(), 10)].columns.length; j++) {\n if (gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)].footerTemplate) {\n var tempID = gObj.element.id + gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)][\"\" + guid] + 'footerTemplate';\n resetBlazorTemplate(tempID, 'FooterTemplate');\n }\n if (gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)].groupFooterTemplate) {\n var tempID = gObj.element.id + gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)][\"\" + guid] + 'groupFooterTemplate';\n resetBlazorTemplate(tempID, 'GroupFooterTemplate');\n }\n if (gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)].groupCaptionTemplate) {\n var tempID = gObj.element.id + gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)][\"\" + guid] + 'groupCaptionTemplate';\n resetBlazorTemplate(tempID, 'GroupCaptionTemplate');\n }\n }\n }\n };\n Render.prototype.refreshComplete = function (e) {\n this.parent.trigger(events.actionComplete, e);\n };\n /**\n * The function is used to refresh the dataManager\n *\n * @param {NotifyArgs} args - specifies the args\n * @returns {void}\n */\n Render.prototype.refreshDataManager = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n var gObj = this.parent;\n var maskRow = (gObj.loadingIndicator.indicatorType === 'Shimmer' && args.requestType !== 'virtualscroll'\n && args.requestType !== 'infiniteScroll') || ((args.requestType === 'virtualscroll' || args.requestType === 'infiniteScroll')\n && gObj.enableVirtualMaskRow);\n if (args.requestType !== 'virtualscroll' && !args.isCaptionCollapse && !maskRow) {\n this.parent.showSpinner();\n }\n if (maskRow) {\n gObj.showMaskRow(args.requestType === 'virtualscroll' ? args.virtualInfo.sentinelInfo.axis\n : args.requestType === 'infiniteScroll' ? args.direction : undefined);\n }\n this.parent.notify(events.resetInfiniteBlocks, args);\n this.emptyGrid = false;\n var dataManager;\n var isFActon = this.isNeedForeignAction();\n this.ariaService.setBusy(this.parent.getContent().querySelector('.' + literals.content), true);\n if (isFActon) {\n var deffered = new Deferred();\n dataManager = this.getFData(deffered, args);\n }\n if (!dataManager) {\n dataManager = this.data.getData(args, this.data.generateQuery().requiresCount());\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dataManager = dataManager.then(function (e) {\n var query = _this.data.generateQuery().requiresCount();\n if (_this.emptyGrid) {\n var def = new Deferred();\n def.resolve({ result: [], count: 0 });\n return def.promise;\n }\n return _this.data.getData(args, query);\n });\n }\n if (this.parent.getForeignKeyColumns().length && (!isFActon || this.parent.searchSettings.key.length)) {\n var deffered_1 = new Deferred();\n dataManager = dataManager.then(function (e) {\n _this.parent.notify(events.getForeignKeyData, { dataManager: dataManager, result: e, promise: deffered_1, action: args });\n return deffered_1.promise;\n });\n }\n if (this.parent.groupSettings.disablePageWiseAggregates && this.parent.groupSettings.columns.length) {\n dataManager = dataManager.then(function (e) { return _this.validateGroupRecords(e); });\n }\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, args); })\n .catch(function (e) { return _this.dataManagerFailure(e, args); });\n };\n Render.prototype.getFData = function (deferred, args) {\n this.parent.notify(events.getForeignKeyData, { isComplex: true, promise: deferred, action: args });\n return deferred.promise;\n };\n Render.prototype.isNeedForeignAction = function () {\n var gObj = this.parent;\n return !!((gObj.allowFiltering && gObj.filterSettings.columns.length) ||\n (gObj.searchSettings.key.length)) && this.foreignKey(this.parent.getForeignKeyColumns());\n };\n Render.prototype.foreignKey = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n var fbool = false;\n fbool = _this.parent.filterSettings.columns.some(function (value) {\n return col.uid === value.uid;\n });\n return !!(fbool || _this.parent.searchSettings.key.length);\n });\n };\n Render.prototype.sendBulkRequest = function (args) {\n var _this = this;\n args.requestType = 'batchsave';\n var gObj = this.parent;\n if (gObj.allowPaging && gObj.pageSettings.pageSizes && gObj.pagerModule.pagerObj.isAllPage && gObj.pagerModule.pagerObj.checkAll) {\n var dataLength = args['changes'].addedRecords.length;\n if (dataLength) {\n gObj.setProperties({ pageSettings: { pageSize: gObj.pageSettings.pageSize + dataLength } }, true);\n }\n }\n var promise = this.data.saveChanges(args.changes, this.parent.getPrimaryKeyFieldNames()[0], args.original);\n var query = this.data.generateQuery().requiresCount();\n if (this.data.dataManager.dataSource.offline) {\n this.refreshDataManager({ requestType: 'batchsave' });\n return;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n promise.then(function (e) {\n _this.data.getData(args, query)\n .then(function (e) { return _this.dmSuccess(e, args); })\n .catch(function (e) { return _this.dmFailure(e, args); });\n })\n .catch(function (e) { return _this.dmFailure(e, args); });\n }\n };\n Render.prototype.dmSuccess = function (e, args) {\n this.dataManagerSuccess(e, args);\n };\n Render.prototype.dmFailure = function (e, args) {\n this.dataManagerFailure(e, args);\n };\n /**\n * Render empty row to Grid which is used at the time to represent to no records.\n *\n * @returns {void}\n * @hidden\n */\n Render.prototype.renderEmptyRow = function () {\n this.emptyRow(true);\n };\n Render.prototype.emptyRow = function (isTrigger) {\n var gObj = this.parent;\n var tbody = this.contentRenderer.getTable().querySelector(literals.tbody);\n if (!isNullOrUndefined(tbody)) {\n remove(tbody);\n }\n tbody = this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n var spanCount = 0;\n if (gObj.detailTemplate || gObj.childGrid) {\n ++spanCount;\n }\n var tr = this.parent.createElement('tr', { className: 'e-emptyrow' });\n tr.appendChild(this.parent.createElement('td', {\n innerHTML: this.l10n.getConstant('EmptyRecord'),\n attrs: { colspan: (gObj.getVisibleColumns().length + spanCount + gObj.groupSettings.columns.length).toString() }\n }));\n tbody.appendChild(tr);\n this.contentRenderer.renderEmpty(tbody);\n if (isTrigger) {\n this.parent.trigger(events.dataBound, {});\n this.parent.notify(events.onEmpty, { rows: [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })] });\n }\n };\n Render.prototype.dynamicColumnChange = function () {\n if (this.parent.getCurrentViewRecords().length) {\n this.updateColumnType(this.parent.getCurrentViewRecords()[0]);\n }\n };\n Render.prototype.updateColumnType = function (record) {\n var columns = this.parent.getColumns();\n var value;\n var cFormat = 'customFormat';\n var equalTo = 'equalTo';\n var data = record && record.items ? record.items[0] : record;\n var fmtr = this.locator.getService('valueFormatter');\n for (var i = 0, len = columns.length; i < len; i++) {\n value = getObject(columns[parseInt(i.toString(), 10)].field || '', data);\n if (!isNullOrUndefined(columns[parseInt(i.toString(), 10)][\"\" + cFormat])) {\n columns[parseInt(i.toString(), 10)].format = columns[parseInt(i.toString(), 10)][\"\" + cFormat];\n }\n if (!isNullOrUndefined(columns[parseInt(i.toString(), 10)].validationRules)\n && !isNullOrUndefined(columns[parseInt(i.toString(), 10)].validationRules[\"\" + equalTo])) {\n columns[parseInt(i.toString(), 10)].validationRules[\"\" + equalTo][0] = this.parent.element.id + columns[parseInt(i.toString(), 10)].validationRules[\"\" + equalTo][0];\n }\n if (columns[parseInt(i.toString(), 10)].isForeignColumn() && columns[parseInt(i.toString(), 10)].columnData) {\n value = getObject(columns[parseInt(i.toString(), 10)].foreignKeyValue || '', columns[parseInt(i.toString(), 10)].columnData[0]);\n }\n if (!isNullOrUndefined(value)) {\n this.isColTypeDef = true;\n if (!columns[parseInt(i.toString(), 10)].type) {\n columns[parseInt(i.toString(), 10)].type = value.getDay ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n }\n else {\n columns[parseInt(i.toString(), 10)].type = columns[parseInt(i.toString(), 10)].type || null;\n }\n var valueFormatter = new ValueFormatter();\n if (columns[parseInt(i.toString(), 10)].format && (columns[parseInt(i.toString(), 10)].format.skeleton\n || (columns[parseInt(i.toString(), 10)].format.format &&\n typeof columns[parseInt(i.toString(), 10)].format.format === 'string'))) {\n columns[parseInt(i.toString(), 10)].setFormatter(valueFormatter.getFormatFunction(extend({}, columns[parseInt(i.toString(), 10)].format)));\n columns[parseInt(i.toString(), 10)].setParser(valueFormatter.getParserFunction(columns[parseInt(i.toString(), 10)].format));\n }\n if (typeof (columns[parseInt(i.toString(), 10)].format) === 'string') {\n setFormatter(this.locator, columns[parseInt(i.toString(), 10)]);\n }\n else if (!columns[parseInt(i.toString(), 10)].format && columns[parseInt(i.toString(), 10)].type === 'number') {\n columns[parseInt(i.toString(), 10)].setParser(fmtr.getParserFunction({ format: 'n2' }));\n }\n if (columns[parseInt(i.toString(), 10)].type === 'dateonly' && !columns[parseInt(i.toString(), 10)].format) {\n columns[parseInt(i.toString(), 10)].format = 'yMd';\n setFormatter(this.locator, columns[parseInt(i.toString(), 10)]);\n }\n }\n };\n /**\n * @param {ReturnType} e - specifies the return type\n * @param {NotifyArgs} args - specifies the Notifyargs\n * @returns {void}\n * @hidden\n */\n // tslint:disable-next-line:max-func-body-length\n Render.prototype.dataManagerSuccess = function (e, args) {\n var _this = this;\n var gObj = this.parent;\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n e.actionArgs = args;\n var isInfiniteDelete = this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache &&\n !gObj.groupSettings.enableLazyLoading && (args.requestType === 'delete' || (args.requestType === 'save' &&\n this.parent.infiniteScrollModule.requestType === 'add' && !(gObj.sortSettings.columns.length ||\n gObj.filterSettings.columns.length || this.parent.groupSettings.columns.length || gObj.searchSettings.key)));\n // tslint:disable-next-line:max-func-body-length\n gObj.trigger(events.beforeDataBound, e, function (dataArgs) {\n if (dataArgs.cancel) {\n return;\n }\n dataArgs.result = isNullOrUndefined(dataArgs.result) ? [] : dataArgs.result;\n var len = Object.keys(dataArgs.result).length;\n if (_this.parent.isDestroyed) {\n return;\n }\n if ((!gObj.getColumns().length && !len) && !(gObj.columns.length && gObj.columns[0] instanceof Column)) {\n gObj.hideSpinner();\n return;\n }\n if (_this.isInfiniteEnd(args) && !len) {\n _this.parent.notify(events.infiniteEditHandler, { e: args, result: e.result, count: e.count, agg: e.aggregates });\n return;\n }\n _this.parent.isEdit = false;\n _this.parent.notify(events.editReset, {});\n _this.parent.notify(events.tooltipDestroy, {});\n if (args && args.requestType !== 'infiniteScroll') {\n _this.parent.notify(events.commandColumnDestroy, { type: 'refreshCommandColumn' });\n }\n _this.contentRenderer.prevCurrentView = _this.parent.currentViewData.slice();\n gObj.currentViewData = dataArgs.result;\n gObj.notify(events.refreshInfiniteCurrentViewData, { args: args, data: dataArgs.result });\n if (dataArgs.count && !gObj.allowPaging && (gObj.enableVirtualization || gObj.enableInfiniteScrolling)) {\n gObj.totalDataRecordsCount = dataArgs.count;\n }\n if (!len && dataArgs.count && gObj.allowPaging && args && args.requestType !== 'delete') {\n if (_this.parent.groupSettings.enableLazyLoading\n && (args.requestType === 'grouping' || args.requestType === 'ungrouping')) {\n _this.parent.notify(events.groupComplete, args);\n }\n gObj.prevPageMoving = true;\n gObj.pageSettings.totalRecordsCount = dataArgs.count;\n if (args.requestType !== 'paging') {\n gObj.pageSettings.currentPage = Math.ceil(dataArgs.count / gObj.pageSettings.pageSize);\n }\n gObj.dataBind();\n return;\n }\n if ((!gObj.getColumns().length && len || !_this.isLayoutRendered) && !isGroupAdaptive(gObj)) {\n gObj.removeMaskRow();\n _this.updatesOnInitialRender(dataArgs);\n }\n if (!_this.isColTypeDef && gObj.getCurrentViewRecords()) {\n if (_this.data.dataManager.dataSource.offline && gObj.dataSource && gObj.dataSource.length) {\n _this.updateColumnType(gObj.dataSource[0]);\n }\n else {\n _this.updateColumnType(gObj.getCurrentViewRecords()[0]);\n }\n }\n if (!_this.parent.isInitialLoad && _this.parent.groupSettings.disablePageWiseAggregates &&\n !_this.parent.groupSettings.columns.length) {\n dataArgs.result = _this.parent.dataSource instanceof Array ? _this.parent.dataSource : _this.parent.currentViewData;\n }\n if ((_this.parent.isReact || _this.parent.isVue) && !isNullOrUndefined(args) && args.requestType !== 'infiniteScroll' && !args.isFrozen) {\n clearReactVueTemplates(_this.parent, ['footerTemplate']);\n }\n if (_this.parent.isAngular && _this.parent.allowGrouping && _this.parent.groupSettings.captionTemplate\n && !(!isNullOrUndefined(args) && args.requestType === 'infiniteScroll')) {\n _this.parent.destroyTemplate(['groupSettings_captionTemplate']);\n }\n _this.parent.notify(events.dataReady, extend({ count: dataArgs.count, result: dataArgs.result, aggregates: dataArgs.aggregates }, args));\n if ((gObj.groupSettings.columns.length || (args && args.requestType === 'ungrouping'))\n && (args && args.requestType !== 'filtering')) {\n _this.headerRenderer.refreshUI();\n }\n if (len) {\n if (isGroupAdaptive(gObj)) {\n var content = 'content';\n args.scrollTop = { top: _this.contentRenderer[\"\" + content].scrollTop };\n }\n if (!isInfiniteDelete) {\n if (_this.parent.enableImmutableMode) {\n _this.contentRenderer.immutableModeRendering(args);\n }\n else {\n _this.contentRenderer.refreshContentRows(args);\n }\n }\n else {\n _this.parent.notify(events.infiniteEditHandler, { e: args, result: e.result, count: e.count, agg: e.aggregates });\n }\n }\n else {\n if (args && args.isCaptionCollapse) {\n return;\n }\n if (!gObj.getColumns().length) {\n gObj.element.innerHTML = '';\n alert(_this.l10n.getConstant('EmptyDataSourceError')); //ToDO: change this alert as dialog\n return;\n }\n _this.contentRenderer.setRowElements([]);\n _this.contentRenderer.setRowObjects([]);\n _this.ariaService.setBusy(_this.parent.getContent().querySelector('.' + literals.content), false);\n gObj.removeMaskRow();\n _this.renderEmptyRow();\n if (gObj.enableColumnVirtualization && !len) {\n _this.parent.notify(events.contentReady, { rows: gObj.getRowsObject(), args: {} });\n }\n if (args) {\n var action = (args.requestType || '').toLowerCase() + '-complete';\n _this.parent.notify(action, args);\n if (args.requestType === 'batchsave') {\n args.cancel = false;\n args.rows = [];\n args.isFrozen = _this.parent.getFrozenColumns() !== 0 && !args.isFrozen;\n _this.parent.trigger(events.actionComplete, args);\n }\n }\n if (_this.parent.autoFit) {\n _this.parent.preventAdjustColumns();\n }\n _this.parent.hideSpinner();\n }\n _this.parent.notify(events.toolbarRefresh, {});\n _this.setRowCount(_this.parent.getCurrentViewRecords().length);\n if ('query' in e) {\n _this.parent.getDataModule().isQueryInvokedFromData = false;\n }\n });\n };\n /**\n * @param {object} e - specifies the object\n * @param {Object[]} e.result - specifies the result\n * @param {NotifyArgs} args - specifies the args\n * @returns {void}\n * @hidden\n */\n Render.prototype.dataManagerFailure = function (e, args) {\n if (!isNullOrUndefined(this.parent.contentModule)) {\n this.ariaService.setOptions(this.parent.getContent().querySelector('.' + literals.content), { busy: false, invalid: true });\n this.setRowCount(1);\n }\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\n this.parent.removeMaskRow();\n if (args.requestType === 'save' || args.requestType === 'delete'\n || args.name === 'bulk-save') {\n return;\n }\n this.parent.currentViewData = [];\n this.renderEmptyRow();\n if (!this.parent.isInitialLoad) {\n this.parent.focusModule.setFirstFocusableTabIndex();\n }\n this.parent.log('actionfailure', { error: e });\n };\n Render.prototype.setRowCount = function (dataRowCount) {\n this.ariaService.setOptions(this.parent.getHeaderTable(), {\n rowcount: dataRowCount ? dataRowCount.toString() : '1'\n });\n };\n Render.prototype.isInfiniteEnd = function (args) {\n return this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache && args.requestType === 'delete';\n };\n Render.prototype.updatesOnInitialRender = function (e) {\n this.isLayoutRendered = true;\n if (this.parent.columns.length < 1) {\n this.buildColumns(e.result[0]);\n }\n prepareColumns(this.parent.columns, null, this.parent);\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.parent.isAutoGen = true;\n this.parent.notify(events.autoCol, {});\n };\n Render.prototype.iterateComplexColumns = function (obj, field, split) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n var childKeys = typeof obj[keys[parseInt(i.toString(), 10)]] === 'object'\n && obj[keys[parseInt(i.toString(), 10)]] && !(obj[keys[parseInt(i.toString(), 10)]] instanceof Date) ?\n Object.keys(obj[keys[parseInt(i.toString(), 10)]]) : [];\n if (childKeys.length) {\n this.iterateComplexColumns(obj[keys[parseInt(i.toString(), 10)]], field + (keys[parseInt(i.toString(), 10)] + '.'), split);\n }\n else {\n split[this.counter] = field + keys[parseInt(i.toString(), 10)];\n this.counter++;\n }\n }\n };\n Render.prototype.buildColumns = function (record) {\n var cols = [];\n var complexCols = {};\n this.iterateComplexColumns(record, '', complexCols);\n var columns = Object.keys(complexCols).filter(function (e) { return complexCols[\"\" + e] !== 'BlazId'; }).\n map(function (field) { return complexCols[\"\" + field]; });\n for (var i = 0, len = columns.length; i < len; i++) {\n cols[parseInt(i.toString(), 10)] = { 'field': columns[parseInt(i.toString(), 10)] };\n if (this.parent.enableColumnVirtualization) {\n cols[parseInt(i.toString(), 10)].width = !isNullOrUndefined(cols[parseInt(i.toString(), 10)].width) ?\n cols[parseInt(i.toString(), 10)].width : 200;\n }\n }\n this.parent.setProperties({ 'columns': cols }, true);\n };\n Render.prototype.instantiateRenderer = function () {\n this.renderer.addRenderer(RenderType.Header, new HeaderRender(this.parent, this.locator));\n this.renderer.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n var cellrender = this.locator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Header, new HeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Data, new CellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Indent, new IndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaption, new GroupCaptionCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaptionEmpty, new GroupCaptionEmptyCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Expand, new ExpandCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.HeaderIndent, new HeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailHeader, new DetailHeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.RowDragHIcon, new RowDragDropHeaderRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailExpand, new DetailExpandCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailFooterIntent, new IndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.RowDragIcon, new RowDragDropRenderer(this.parent, this.locator));\n };\n Render.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on('refreshdataSource', this.dataManagerSuccess, this);\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.refreshComplete, this.refreshComplete, this);\n this.parent.on(events.bulkSave, this.sendBulkRequest, this);\n this.parent.on(events.showEmptyGrid, function () { _this.emptyGrid = true; }, this);\n this.parent.on(events.autoCol, this.dynamicColumnChange, this);\n };\n /**\n * @param {ReturnType} e - specifies the Return type\n * @returns {Promise} returns the object\n * @hidden\n */\n Render.prototype.validateGroupRecords = function (e) {\n var _this = this;\n var index = e.result.length - 1;\n if (index < 0) {\n return Promise.resolve(e);\n }\n var group0 = e.result[0];\n var groupN = e.result[parseInt(index.toString(), 10)];\n var predicate = [];\n var addWhere = function (input) {\n var groups = [group0, groupN];\n for (var i = 0; i < groups.length; i++) {\n predicate.push(new Predicate('field', '==', groups[parseInt(i.toString(), 10)].field).and(_this.getPredicate('key', 'equal', groups[parseInt(i.toString(), 10)].key)));\n }\n input.where(Predicate.or(predicate));\n };\n var query = new Query();\n addWhere(query);\n var curDm = new DataManager(e.result);\n var curFilter = curDm.executeLocal(query);\n var newQuery = this.data.generateQuery(true);\n var rPredicate = [];\n if (this.data.isRemote()) {\n var groups = [group0, groupN];\n for (var i = 0; i < groups.length; i++) {\n rPredicate.push(this.getPredicate(groups[parseInt(i.toString(), 10)].field, 'equal', groups[parseInt(i.toString(), 10)].key));\n }\n newQuery.where(Predicate.or(rPredicate));\n }\n else {\n addWhere(newQuery);\n }\n var deferred = new Deferred();\n this.data.getData({}, newQuery).then(function (r) {\n _this.updateGroupInfo(curFilter, r.result);\n deferred.resolve(e);\n }).catch(function (e) { return deferred.reject(e); });\n return deferred.promise;\n };\n Render.prototype.getPredicate = function (key, operator, value) {\n if (value instanceof Date) {\n return getDatePredicate({ field: key, operator: operator, value: value });\n }\n return new Predicate(key, operator, value);\n };\n Render.prototype.updateGroupInfo = function (current, untouched) {\n var dm = new DataManager(untouched);\n var elements = current;\n for (var i = 0; i < elements.length; i++) {\n var uGroup = dm.executeLocal(new Query()\n .where(new Predicate('field', '==', elements[parseInt(i.toString(), 10)].field).and(this.getPredicate('key', 'equal', elements[parseInt(i.toString(), 10)].key))))[0];\n elements[parseInt(i.toString(), 10)].count = uGroup.count;\n var itemGroup = elements[parseInt(i.toString(), 10)].items;\n var uGroupItem = uGroup.items;\n if (itemGroup.GroupGuid) {\n elements[parseInt(i.toString(), 10)].items =\n this.updateGroupInfo(elements[parseInt(i.toString(), 10)].items, uGroup.items);\n }\n var rows = this.parent.aggregates;\n for (var j = 0; j < rows.length; j++) {\n var row = rows[parseInt(j.toString(), 10)];\n for (var k = 0; k < row.columns.length; k++) {\n var types = row.columns[parseInt(k.toString(), 10)].type instanceof Array ?\n (row.columns[parseInt(k.toString(), 10)].type) :\n [(row.columns[parseInt(k.toString(), 10)].type)];\n for (var l = 0; l < types.length; l++) {\n var key = row.columns[parseInt(k.toString(), 10)].field + ' - ' + types[parseInt(l.toString(), 10)].toLowerCase();\n var data = itemGroup.level ? uGroupItem.records : uGroup.items;\n var context = this.parent;\n if (types[parseInt(l.toString(), 10)] === 'Custom') {\n var data_1 = itemGroup.level ? uGroupItem : uGroup;\n var temp = row.columns[parseInt(k.toString(), 10)]\n .customAggregate;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n elements[parseInt(i.toString(), 10)].aggregates[\"\" + key] = temp ? temp.call(context, data_1, row.columns[parseInt(k.toString(), 10)]) : '';\n }\n else {\n elements[parseInt(i.toString(), 10)].aggregates[\"\" + key] = DataUtil.aggregates[types[parseInt(l.toString(), 10)].toLowerCase()](data, row.columns[parseInt(k.toString(), 10)].field);\n }\n }\n }\n }\n }\n return current;\n };\n return Render;\n}());\nexport { Render };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\n/**\n * CellRendererFactory\n *\n * @hidden\n */\nvar CellRendererFactory = /** @class */ (function () {\n function CellRendererFactory() {\n this.cellRenderMap = {};\n }\n CellRendererFactory.prototype.addCellRenderer = function (name, type) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[\"\" + name])) {\n this.cellRenderMap[\"\" + name] = type;\n }\n };\n CellRendererFactory.prototype.getCellRenderer = function (name) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[\"\" + name])) {\n // eslint-disable-next-line no-throw-literal\n throw \"The cellRenderer \" + name + \" is not found\";\n }\n else {\n return this.cellRenderMap[\"\" + name];\n }\n };\n return CellRendererFactory;\n}());\nexport { CellRendererFactory };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { EventHandler, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { parentsUntil, addBiggerDialog, addRemoveEventListener } from '../base/util';\nimport * as events from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { ResponsiveDialogAction } from '../base/enum';\n/**\n *\n * The `ResponsiveDialogRenderer` module is used to render the responsive dialogs.\n */\nvar ResponsiveDialogRenderer = /** @class */ (function () {\n function ResponsiveDialogRenderer(parent, serviceLocator) {\n this.sortedCols = [];\n this.sortPredicate = [];\n /** @hidden */\n this.isCustomDialog = false;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n ResponsiveDialogRenderer.prototype.addEventListener = function () {\n this.evtHandlers = [{ event: events.filterDialogClose, handler: this.closeCustomDialog },\n { event: events.refreshCustomFilterOkBtn, handler: this.refreshCustomFilterOkBtn },\n { event: events.renderResponsiveCmenu, handler: this.renderResponsiveContextMenu },\n { event: events.filterCmenuSelect, handler: this.renderCustomFilterDiv },\n { event: events.customFilterClose, handler: this.customExFilterClose },\n { event: events.refreshCustomFilterClearBtn, handler: this.refreshCustomFilterClearBtn }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n this.onActionCompleteFn = this.editComplate.bind(this);\n this.parent.addEventListener(events.actionComplete, this.onActionCompleteFn);\n };\n ResponsiveDialogRenderer.prototype.customExFilterClose = function () {\n this.isCustomDlgRender = false;\n };\n ResponsiveDialogRenderer.prototype.renderCustomFilterDiv = function () {\n var header = this.customResponsiveDlg.element.querySelector('.e-dlg-header-content');\n var title = header.querySelector('.e-dlg-custom-header');\n var closeBtn = header.querySelector('.e-dlg-closeicon-btn');\n this.isCustomDlgRender = true;\n this.parent.filterModule.filterModule.closeDialog();\n this.saveBtn.element.style.display = '';\n this.refreshCustomFilterOkBtn({ disabled: false });\n this.backBtn.element.style.display = 'none';\n closeBtn.style.display = '';\n title.innerHTML = this.parent.localeObj.getConstant('CustomFilter');\n var content = this.customResponsiveDlg.element.querySelector('.e-dlg-content');\n this.customExcelFilterParent = this.parent.createElement('div', { className: 'e-xl-customfilterdiv e-default-filter' });\n content.appendChild(this.customExcelFilterParent);\n };\n ResponsiveDialogRenderer.prototype.renderResponsiveContextMenu = function (args) {\n if (this.action === ResponsiveDialogAction.isFilter) {\n var content = this.customResponsiveDlg.element.querySelector('.e-dlg-content');\n var header = this.customResponsiveDlg.element.querySelector('.e-dlg-header-content');\n var closeBtn = header.querySelector('.e-dlg-closeicon-btn');\n var text = header.querySelector('.e-dlg-custom-header');\n if (args.isOpen) {\n content.firstChild.style.display = 'none';\n content.appendChild(args.target);\n closeBtn.style.display = 'none';\n this.saveBtn.element.style.display = 'none';\n this.filterClearBtn.element.style.display = 'none';\n text.innerHTML = args.header;\n var backBtn = this.parent.createElement('button');\n var span = this.parent.createElement('span', { className: 'e-btn-icon e-resfilterback e-icons' });\n backBtn.appendChild(span);\n this.backBtn = new Button({\n cssClass: this.parent.cssClass ? 'e-res-back-btn' + ' ' + this.parent.cssClass : 'e-res-back-btn'\n });\n this.backBtn.appendTo(backBtn);\n text.parentElement.insertBefore(backBtn, text);\n }\n else if (this.backBtn && !this.isCustomDlgRender) {\n content.firstChild.style.display = '';\n remove(this.backBtn.element);\n closeBtn.style.display = '';\n this.saveBtn.element.style.display = '';\n if (this.isFiltered) {\n this.filterClearBtn.element.style.display = '';\n }\n text.innerHTML = this.getHeaderTitle({ action: ResponsiveDialogAction.isFilter }, args.col);\n }\n }\n };\n ResponsiveDialogRenderer.prototype.refreshCustomFilterClearBtn = function (args) {\n if (this.filterClearBtn) {\n this.isFiltered = args.isFiltered;\n this.filterClearBtn.element.style.display = args.isFiltered ? '' : 'none';\n }\n };\n ResponsiveDialogRenderer.prototype.refreshCustomFilterOkBtn = function (args) {\n if (this.saveBtn) {\n this.saveBtn.disabled = args.disabled;\n }\n };\n ResponsiveDialogRenderer.prototype.renderResponsiveContent = function (col) {\n var _this = this;\n var gObj = this.parent;\n if (col) {\n this.filterParent = this.parent.createElement('div', { className: 'e-mainfilterdiv e-default-filter', id: col.uid + '-main-filter' });\n return this.filterParent;\n }\n else {\n var cols = gObj.getColumns();\n this.customColumnDiv = gObj.createElement('div', { className: 'columndiv', styles: 'width: 100%' });\n var sortBtnParent = gObj.createElement('div', { className: 'e-ressortbutton-parent' });\n var filteredCols = [];\n var isSort = this.action === ResponsiveDialogAction.isSort;\n var isFilter = this.action === ResponsiveDialogAction.isFilter;\n if (isFilter) {\n for (var i = 0; i < gObj.filterSettings.columns.length; i++) {\n filteredCols.push(gObj.filterSettings.columns[parseInt(i.toString(), 10)].field);\n }\n }\n for (var i = 0; i < cols.length; i++) {\n if (!cols[parseInt(i.toString(), 10)].visible || (!cols[parseInt(i.toString(), 10)].allowSorting && isSort)\n || (!cols[parseInt(i.toString(), 10)].allowFiltering && isFilter)) {\n continue;\n }\n var cDiv = gObj.createElement('div', { className: 'e-responsivecoldiv' });\n cDiv.setAttribute('data-e-mappingname', cols[parseInt(i.toString(), 10)].field);\n cDiv.setAttribute('data-e-mappinguid', cols[parseInt(i.toString(), 10)].uid);\n var span = gObj.createElement('span', { innerHTML: cols[parseInt(i.toString(), 10)].headerText, className: 'e-res-header-text' });\n cDiv.appendChild(span);\n this.customColumnDiv.appendChild(cDiv);\n if (isSort) {\n var fields = this.getSortedFieldsAndDirections('field');\n var index = fields.indexOf(cols[parseInt(i.toString(), 10)].field);\n var button = gObj.createElement('button', { id: gObj.element.id + cols[parseInt(i.toString(), 10)].field + 'sortbutton' });\n var clone = sortBtnParent.cloneNode();\n clone.appendChild(button);\n cDiv.appendChild(clone);\n var btnObj = new Button({\n cssClass: this.parent.cssClass ? 'e-ressortbutton' + ' ' + this.parent.cssClass : 'e-ressortbutton'\n });\n btnObj.appendTo(button);\n var buttonInnerText = void 0;\n if ((!isNullOrUndefined(this.parent.sortSettings.columns[parseInt(index.toString(), 10)]))) {\n buttonInnerText = (this.parent.sortSettings.columns[parseInt(index.toString(), 10)].direction === 'Ascending') ?\n this.parent.localeObj.getConstant('AscendingText') : this.parent.localeObj.getConstant('DescendingText');\n }\n button.innerHTML = index > -1 ? buttonInnerText : this.parent.localeObj.getConstant('NoneText');\n button.onclick = function (e) {\n _this.sortButtonClickHandler(e.target);\n };\n }\n if (isFilter && filteredCols.indexOf(cols[parseInt(i.toString(), 10)].field) > -1) {\n var divIcon = gObj.createElement('div', { className: 'e-icons e-res-icon e-filtersetdiv' });\n var iconSpan = gObj.createElement('span', { className: 'e-icons e-res-icon e-filterset' });\n iconSpan.setAttribute('colType', cols[parseInt(i.toString(), 10)].type);\n divIcon.appendChild(iconSpan);\n cDiv.appendChild(divIcon);\n }\n }\n EventHandler.add(this.customColumnDiv, 'click', this.customFilterColumnClickHandler, this);\n return this.customColumnDiv;\n }\n };\n ResponsiveDialogRenderer.prototype.getSortedFieldsAndDirections = function (name) {\n var fields = [];\n for (var i = 0; i < this.parent.sortSettings.columns.length; i++) {\n fields.push(this.parent.sortSettings.columns[parseInt(i.toString(), 10)][\"\" + name]);\n }\n return fields;\n };\n ResponsiveDialogRenderer.prototype.sortButtonClickHandler = function (target) {\n if (target) {\n var columndiv = parentsUntil(target, 'e-responsivecoldiv');\n var field = columndiv.getAttribute('data-e-mappingname');\n if (!this.parent.allowMultiSorting) {\n this.sortPredicate = [];\n this.sortedCols = [];\n this.isSortApplied = false;\n this.resetSortButtons(target);\n }\n var txt = target.textContent;\n var directionTxt = txt === this.parent.localeObj.getConstant('NoneText') ? this.parent.localeObj.getConstant('AscendingText')\n : txt === this.parent.localeObj.getConstant('AscendingText') ? this.parent.localeObj.getConstant('DescendingText')\n : this.parent.localeObj.getConstant('NoneText');\n var direction = directionTxt === this.parent.localeObj.getConstant('AscendingText') ? 'Ascending'\n : directionTxt === this.parent.localeObj.getConstant('DescendingText') ? 'Descending' : 'None';\n target.innerHTML = directionTxt;\n this.setSortedCols(field, direction);\n }\n };\n ResponsiveDialogRenderer.prototype.resetSortButtons = function (target) {\n var buttons = [].slice.call(this.customColumnDiv.getElementsByClassName('e-ressortbutton'));\n for (var i = 0; i < buttons.length; i++) {\n if (buttons[parseInt(i.toString(), 10)] !== target) {\n buttons[parseInt(i.toString(), 10)].innerHTML = 'None';\n }\n }\n };\n ResponsiveDialogRenderer.prototype.setSortedCols = function (field, direction) {\n var fields = this.getCurrentSortedFields();\n var index = fields.indexOf(field);\n if (this.parent.allowMultiSorting && index > -1) {\n this.sortedCols.splice(index, 1);\n this.sortPredicate.splice(index, 1);\n }\n this.isSortApplied = true;\n if (direction !== 'None') {\n this.sortedCols.push(field);\n this.sortPredicate.push({ field: field, direction: direction });\n }\n };\n ResponsiveDialogRenderer.prototype.getCurrentSortedFields = function () {\n var fields = [];\n for (var i = 0; i < this.sortedCols.length; i++) {\n fields.push(this.sortedCols[parseInt(i.toString(), 10)]);\n }\n return fields;\n };\n ResponsiveDialogRenderer.prototype.customFilterColumnClickHandler = function (e) {\n if (this.action !== ResponsiveDialogAction.isFilter) {\n return;\n }\n var gObj = this.parent;\n var target = e.target;\n if (gObj.filterSettings.type !== 'FilterBar') {\n if (target.classList.contains('e-responsivecoldiv') || target.parentElement.classList.contains('e-responsivecoldiv')) {\n var field = target.getAttribute('data-e-mappingname');\n if (!field) {\n field = target.parentElement.getAttribute('data-e-mappingname');\n }\n if (field) {\n var col = gObj.getColumnByField(field);\n this.isRowResponsive = true;\n this.showResponsiveDialog(col);\n }\n }\n else if (target.classList.contains('e-filterset') || target.parentElement.classList.contains('e-filtersetdiv')) {\n var colDiv = parentsUntil(target, 'e-responsivecoldiv');\n if (colDiv) {\n var field = colDiv.getAttribute('data-e-mappingname');\n var col = gObj.getColumnByField(field);\n if (col.filter.type === 'Menu' || (!col.filter.type && gObj.filterSettings.type === 'Menu')) {\n this.isDialogClose = true;\n }\n this.parent.filterModule.filterModule.clearCustomFilter(col);\n this.removeCustomDlgFilterEle(target);\n }\n }\n }\n };\n /**\n * Function to show the responsive dialog\n *\n * @param {Column} col - specifies the column\n * @returns {void}\n */\n ResponsiveDialogRenderer.prototype.showResponsiveDialog = function (col) {\n if (this.isCustomDialog && this.action === ResponsiveDialogAction.isFilter && !this.isRowResponsive) {\n this.renderCustomFilterDialog();\n }\n else {\n this.filteredCol = col;\n this.renderResponsiveDialog(col);\n if (this.parent.enableAdaptiveUI && col) {\n this.parent.filterModule.setFilterModel(col);\n this.parent.filterModule.filterModule.openDialog(this.parent.filterModule.createOptions(col, undefined));\n }\n if (this.action === ResponsiveDialogAction.isSort) {\n var args = {\n cancel: false, dialogObj: this.customResponsiveDlg, requestType: 'beforeOpenAptiveSortDialog'\n };\n this.parent.trigger(events.beforeOpenAdaptiveDialog, args);\n if (args.cancel) {\n return;\n }\n }\n this.customResponsiveDlg.show(true);\n this.customResponsiveDlg.element.style.maxHeight = '100%';\n this.setTopToChildDialog(this.customResponsiveDlg.element);\n }\n };\n ResponsiveDialogRenderer.prototype.setTopToChildDialog = function (dialogEle) {\n var child = dialogEle.querySelector('.e-dialog');\n if (child) {\n var top_1 = dialogEle.querySelector('.e-dlg-header-content').getBoundingClientRect().height;\n child.style.top = top_1 + 'px';\n }\n };\n ResponsiveDialogRenderer.prototype.renderCustomFilterDialog = function (col) {\n var gObj = this.parent;\n if (this.action === ResponsiveDialogAction.isFilter && gObj.filterSettings.type === 'FilterBar') {\n return;\n }\n var outerDiv = this.parent.createElement('div', {\n id: gObj.element.id + 'customfilter',\n className: this.parent.cssClass ?\n 'e-customfilterdiv e-responsive-dialog ' + this.parent.cssClass : 'e-customfilterdiv e-responsive-dialog'\n });\n this.parent.element.appendChild(outerDiv);\n this.customFilterDlg = this.getDialogOptions(col, true);\n var args = {\n cancel: false, dialogObj: this.customFilterDlg, requestType: 'beforeOpenAptiveFilterDialog'\n };\n this.parent.trigger(events.beforeOpenAdaptiveDialog, args);\n if (args.cancel) {\n return;\n }\n this.customFilterDlg.appendTo(outerDiv);\n this.customFilterDlg.show(true);\n this.customFilterDlg.element.style.maxHeight = '100%';\n };\n ResponsiveDialogRenderer.prototype.getDialogOptions = function (col, isCustomFilter, id) {\n var options = new Dialog({\n isModal: true,\n showCloseIcon: true,\n closeOnEscape: false,\n locale: this.parent.locale,\n target: this.parent.adaptiveDlgTarget ? this.parent.adaptiveDlgTarget : document.body,\n visible: false,\n enableRtl: this.parent.enableRtl,\n content: this.renderResponsiveContent(col),\n open: this.dialogOpen.bind(this),\n created: this.dialogCreated.bind(this),\n close: this.beforeDialogClose.bind(this),\n width: '100%',\n height: '100%',\n animationSettings: { effect: 'None' },\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n var isStringTemplate = 'isStringTemplate';\n options[\"\" + isStringTemplate] = true;\n if (isCustomFilter) {\n options.header = this.renderResponsiveHeader(col, undefined, true);\n options.cssClass = 'e-customfilter';\n }\n else {\n options.header = this.renderResponsiveHeader(col);\n options.cssClass = this.parent.rowRenderingMode === 'Vertical' && this.action === ResponsiveDialogAction.isFilter\n ? 'e-res' + id + ' e-row-responsive-filter' : 'e-res' + id;\n }\n return options;\n };\n ResponsiveDialogRenderer.prototype.renderResponsiveDialog = function (col) {\n var gObj = this.parent;\n if (this.action === ResponsiveDialogAction.isFilter && gObj.filterSettings.type === 'FilterBar') {\n return;\n }\n var id = this.action === ResponsiveDialogAction.isFilter ? 'filter' : 'sort';\n var outerDiv = this.parent.createElement('div', {\n id: gObj.element.id + 'responsive' + id,\n className: this.parent.cssClass ?\n 'e-res' + id + 'div e-responsive-dialog ' + this.parent.cssClass : 'e-res' + id + 'div e-responsive-dialog'\n });\n this.parent.element.appendChild(outerDiv);\n this.customResponsiveDlg = this.getDialogOptions(col, false, id);\n this.customResponsiveDlg.appendTo(outerDiv);\n };\n ResponsiveDialogRenderer.prototype.dialogCreated = function () {\n addBiggerDialog(this.parent);\n };\n ResponsiveDialogRenderer.prototype.dialogOpen = function () {\n if (this.action === ResponsiveDialogAction.isSort && this.parent.allowMultiSorting) {\n for (var i = 0; i < this.parent.sortSettings.columns.length; i++) {\n this.sortedCols.push(this.parent.sortSettings.columns[parseInt(i.toString(), 10)].field);\n var sortField = this.parent.sortSettings.columns[parseInt(i.toString(), 10)].field;\n var sortDirection = this.parent.sortSettings.columns[parseInt(i.toString(), 10)].direction;\n this.sortPredicate.push({ field: sortField, direction: sortDirection });\n }\n }\n };\n ResponsiveDialogRenderer.prototype.beforeDialogClose = function (args) {\n this.isDialogClose = args.element && !args.element.querySelector('.e-xl-customfilterdiv')\n && args.element.classList.contains('e-resfilterdiv');\n if (this.action === ResponsiveDialogAction.isFilter) {\n if (args.element.classList.contains('e-resfilterdiv')) {\n this.parent.filterModule.filterModule.closeResponsiveDialog(this.isCustomDlgRender);\n }\n else if (args.element.classList.contains('e-customfilterdiv')) {\n this.closeCustomFilter();\n }\n }\n else if (this.action === ResponsiveDialogAction.isSort) {\n this.closeCustomDialog();\n }\n this.parent.off(events.enterKeyHandler, this.keyHandler);\n };\n ResponsiveDialogRenderer.prototype.sortColumn = function () {\n if (!this.isSortApplied) {\n this.closeCustomDialog();\n return;\n }\n if (this.sortPredicate.length) {\n this.parent.setProperties({ sortSettings: { columns: [] } }, true);\n }\n for (var i = 0; i < this.sortPredicate.length; i++) {\n this.parent.sortColumn(this.sortPredicate[parseInt(i.toString(), 10)].field, this.sortPredicate[parseInt(i.toString(), 10)].direction, this.parent.allowMultiSorting);\n }\n if (!this.sortPredicate.length) {\n this.parent.clearSorting();\n }\n this.closeCustomDialog();\n };\n ResponsiveDialogRenderer.prototype.getHeaderTitle = function (args, col) {\n var gObj = this.parent;\n var title;\n if (this.action === ResponsiveDialogAction.isEdit) {\n title = gObj.localeObj.getConstant('EditFormTitle') + args.primaryKeyValue[0];\n }\n else if (this.action === ResponsiveDialogAction.isAdd) {\n title = gObj.localeObj.getConstant('AddFormTitle');\n }\n else if (this.action === ResponsiveDialogAction.isFilter) {\n title = col ? col.headerText || col.field : gObj.localeObj.getConstant('FilterButton');\n }\n else if (this.action === ResponsiveDialogAction.isSort) {\n title = gObj.localeObj.getConstant('Sort');\n }\n return title;\n };\n ResponsiveDialogRenderer.prototype.getDialogName = function (action) {\n var name;\n if (action === ResponsiveDialogAction.isAdd || action === ResponsiveDialogAction.isEdit) {\n name = 'dialogEdit_wrapper_title';\n }\n else if (action === ResponsiveDialogAction.isFilter) {\n name = 'responsive_filter_dialog_wrapper';\n }\n return name;\n };\n ResponsiveDialogRenderer.prototype.getButtonText = function (action) {\n var text;\n if (action === ResponsiveDialogAction.isAdd || action === ResponsiveDialogAction.isEdit) {\n text = 'Save';\n }\n else if (action === ResponsiveDialogAction.isFilter || this.action === ResponsiveDialogAction.isSort) {\n text = 'OKButton';\n }\n return text;\n };\n /**\n * Function to render the responsive header\n *\n * @param {Column} col - specifies the column\n * @param {ResponsiveDialogArgs} args - specifies the responsive dialog arguments\n * @param {boolean} isCustomFilter - specifies whether it is custom filter or not\n * @returns {HTMLElement | string} returns the html element or string\n */\n ResponsiveDialogRenderer.prototype.renderResponsiveHeader = function (col, args, isCustomFilter) {\n var _this = this;\n var gObj = this.parent;\n gObj.on(events.enterKeyHandler, this.keyHandler, this);\n var id = gObj.element.id + this.getDialogName(this.action);\n var header = gObj.createElement('div', { className: 'e-res-custom-element' });\n var titleDiv = gObj.createElement('div', { className: 'e-dlg-custom-header', id: id });\n titleDiv.innerHTML = this.getHeaderTitle(args, col);\n header.appendChild(titleDiv);\n var saveBtn = gObj.createElement('button');\n if (!isCustomFilter) {\n this.saveBtn = new Button({\n cssClass: this.parent.cssClass ?\n 'e-primary e-flat e-res-apply-btn' + ' ' + this.parent.cssClass : 'e-primary e-flat e-res-apply-btn'\n });\n saveBtn.innerHTML = gObj.localeObj.getConstant(this.getButtonText(this.action));\n this.saveBtn.appendTo(saveBtn);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n saveBtn.onclick = function (e) {\n _this.dialogHdrBtnClickHandler();\n };\n }\n var isSort = this.action === ResponsiveDialogAction.isSort;\n var isFilter = this.action === ResponsiveDialogAction.isFilter;\n if (isFilter || isSort) {\n var id_1 = isSort ? 'sort' : 'filter';\n var clearBtn = gObj.createElement('button');\n this.filterClearBtn = new Button({\n cssClass: this.parent.cssClass ? 'e-primary e-flat e-res-' + id_1 + '-clear-btn' + ' ' + this.parent.cssClass\n : 'e-primary e-flat e-res-' + id_1 + '-clear-btn'\n });\n if (isFilter) {\n var span = gObj.createElement('span', { className: 'e-btn-icon e-icon-filter-clear e-icons' });\n clearBtn.appendChild(span);\n }\n else {\n clearBtn.innerHTML = gObj.localeObj.getConstant('Clear');\n }\n header.appendChild(clearBtn);\n this.filterClearBtn.appendTo(clearBtn);\n clearBtn.onclick = function (e) {\n if ((parentsUntil(e.target, 'e-customfilter'))) {\n _this.parent.filterModule.clearFiltering();\n _this.removeCustomDlgFilterEle();\n }\n else {\n if (isFilter) {\n _this.filterClear();\n }\n else {\n _this.resetSortButtons();\n _this.sortedCols = [];\n _this.sortPredicate = [];\n _this.isSortApplied = true;\n }\n }\n };\n header.appendChild(clearBtn);\n }\n if (!isCustomFilter) {\n header.appendChild(saveBtn);\n }\n return header;\n };\n ResponsiveDialogRenderer.prototype.filterClear = function () {\n this.parent.filterModule.filterModule.clearCustomFilter(this.filteredCol);\n this.parent.filterModule.filterModule.closeResponsiveDialog();\n };\n ResponsiveDialogRenderer.prototype.dialogHdrBtnClickHandler = function () {\n if (this.action === ResponsiveDialogAction.isEdit || this.action === ResponsiveDialogAction.isAdd) {\n this.parent.endEdit();\n }\n else if (this.action === ResponsiveDialogAction.isFilter) {\n this.parent.filterModule.filterModule.applyCustomFilter({ col: this.filteredCol, isCustomFilter: this.isCustomDlgRender });\n }\n else if (this.action === ResponsiveDialogAction.isSort) {\n this.sortColumn();\n }\n };\n ResponsiveDialogRenderer.prototype.closeCustomDialog = function () {\n if (this.isCustomDlgRender) {\n var mainfilterdiv = this.customResponsiveDlg.element.querySelector('.e-mainfilterdiv');\n remove(mainfilterdiv);\n return;\n }\n this.isRowResponsive = false;\n this.isCustomDlgRender = false;\n this.destroyCustomFilterDialog();\n };\n ResponsiveDialogRenderer.prototype.destroyCustomFilterDialog = function () {\n if (!this.customResponsiveDlg) {\n return;\n }\n var elem = document.getElementById(this.customResponsiveDlg.element.id);\n if (this.customResponsiveDlg && !this.customResponsiveDlg.isDestroyed && elem) {\n this.customResponsiveDlg.destroy();\n remove(elem);\n }\n this.closeCustomFilter();\n if (this.action === ResponsiveDialogAction.isSort) {\n this.sortPredicate = [];\n this.sortedCols = [];\n this.isSortApplied = false;\n }\n };\n ResponsiveDialogRenderer.prototype.closeCustomFilter = function () {\n if (!this.isDialogClose && this.customFilterDlg) {\n var customEle = document.getElementById(this.customFilterDlg.element.id);\n if (this.customFilterDlg && !this.customFilterDlg.isDestroyed && customEle) {\n this.customFilterDlg.destroy();\n remove(customEle);\n }\n }\n this.isCustomDialog = false;\n this.isDialogClose = false;\n };\n ResponsiveDialogRenderer.prototype.removeCustomDlgFilterEle = function (target) {\n if (target) {\n if (target.parentElement.classList.contains('e-filtersetdiv')) {\n remove(target.parentElement);\n }\n else {\n remove(target);\n }\n }\n else {\n var child = this.customColumnDiv.children;\n for (var i = 0; i < child.length; i++) {\n target = child[parseInt(i.toString(), 10)].querySelector('.e-filtersetdiv');\n if (target) {\n remove(target);\n i--;\n }\n }\n }\n };\n ResponsiveDialogRenderer.prototype.keyHandler = function (e) {\n if (e.keyCode === 13 && ((this.action === ResponsiveDialogAction.isFilter\n && e.target.classList.contains('e-searchinput'))\n || (this.action === ResponsiveDialogAction.isEdit || this.action === ResponsiveDialogAction.isAdd))) {\n this.dialogHdrBtnClickHandler();\n }\n };\n ResponsiveDialogRenderer.prototype.editComplate = function (args) {\n if (args.requestType === 'save' || args.requestType === 'cancel') {\n this.parent.off(events.enterKeyHandler, this.keyHandler);\n }\n };\n ResponsiveDialogRenderer.prototype.removeEventListener = function () {\n if (this.customColumnDiv) {\n EventHandler.remove(this.customColumnDiv, 'click', this.customFilterColumnClickHandler);\n }\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n this.parent.removeEventListener(events.actionComplete, this.onActionCompleteFn);\n };\n return ResponsiveDialogRenderer;\n}());\nexport { ResponsiveDialogRenderer };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ResponsiveDialogRenderer } from '../renderer/responsive-dialog-renderer';\n/**\n * ServiceLocator\n *\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[\"\" + name])) {\n this.services[\"\" + name] = type;\n }\n };\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[\"\" + name])) {\n // eslint-disable-next-line no-throw-literal\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[\"\" + name];\n };\n ServiceLocator.prototype.registerAdaptiveService = function (type, isAdaptiveUI, action) {\n if (isAdaptiveUI) {\n type.responsiveDialogRenderer = new ResponsiveDialogRenderer(type.parent, type.serviceLocator);\n type.responsiveDialogRenderer.action = action;\n }\n else {\n if (type.responsiveDialogRenderer) {\n type.responsiveDialogRenderer.removeEventListener();\n type.responsiveDialogRenderer = undefined;\n }\n }\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n *\n * @hidden\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[\"\" + rName])) {\n this.rendererMap[\"\" + rName] = type;\n }\n };\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[\"\" + rName])) {\n // eslint-disable-next-line no-throw-literal\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[\"\" + rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { columnWidthChanged, preventFrozenScrollRefresh } from '../base/constant';\nimport { Column } from '../models/column';\nimport { parentsUntil, ispercentageWidth, getScrollBarWidth } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * ColumnWidthService\n *\n * @hidden\n */\nvar ColumnWidthService = /** @class */ (function () {\n function ColumnWidthService(parent) {\n this.parent = parent;\n }\n ColumnWidthService.prototype.setWidthToColumns = function () {\n var i = 0;\n var indexes = this.parent.getColumnIndexesInView();\n var wFlag = true;\n var totalColumnsWidth = 0;\n if (this.parent.allowGrouping) {\n for (var len = this.parent.groupSettings.columns.length; i < len; i++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n wFlag = false;\n continue;\n }\n this.setColumnWidth(new Column({ width: '30px' }), i);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }), i);\n i++;\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n this.setColumnWidth(new Column({ width: '30px' }), i);\n i++;\n }\n var columns = this.parent.getColumns();\n for (var j = 0; j < columns.length; j++) {\n this.setColumnWidth(columns[parseInt(j.toString(), 10)], wFlag && this.parent.enableColumnVirtualization ? undefined : j + i);\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n this.setColumnWidth(new Column({ width: '30px' }), columns.length);\n }\n totalColumnsWidth = this.getTableWidth(this.parent.getColumns());\n if (this.parent.width !== 'auto' && this.parent.width.toString().indexOf('%') === -1) {\n this.setMinwidthBycalculation(totalColumnsWidth);\n }\n };\n ColumnWidthService.prototype.setMinwidthBycalculation = function (tWidth) {\n var difference = 0;\n var collection = this.parent.getColumns().filter(function (a) {\n return isNullOrUndefined(a.width) || a.width === 'auto';\n });\n if (collection.length) {\n if (!isNullOrUndefined(this.parent.width) && this.parent.width !== 'auto' &&\n typeof (this.parent.width) === 'string' && this.parent.width.indexOf('%') === -1) {\n difference = (typeof this.parent.width === 'string' ? parseInt(this.parent.width, 10) : this.parent.width) - tWidth;\n }\n else {\n difference = this.parent.element.getBoundingClientRect().width - tWidth;\n }\n var tmWidth = 0;\n for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\n var cols = collection_1[_i];\n tmWidth += !isNullOrUndefined(cols.minWidth) ?\n ((typeof cols.minWidth === 'string' ? parseInt(cols.minWidth, 10) : cols.minWidth)) : 0;\n }\n for (var i = 0; i < collection.length; i++) {\n if (tWidth === 0 && this.parent.allowResizing && this.isWidthUndefined() && (i !== collection.length - 1)) {\n this.setUndefinedColumnWidth(collection);\n }\n var index = this.parent.getColumnIndexByField(collection[parseInt(i.toString(), 10)].field) + this.parent.getIndentCount();\n if (tWidth !== 0 && difference < tmWidth) {\n this.setWidth(collection[parseInt(i.toString(), 10)].minWidth, index);\n }\n else if (tWidth !== 0 && difference > tmWidth) {\n this.setWidth('', index, true);\n }\n }\n }\n };\n ColumnWidthService.prototype.setUndefinedColumnWidth = function (collection) {\n for (var k = 0; k < collection.length; k++) {\n if (k !== collection.length - 1) {\n collection[parseInt(k.toString(), 10)].width = 200;\n this.setWidth(200, this.parent.getColumnIndexByField(collection[parseInt(k.toString(), 10)].field));\n }\n }\n };\n ColumnWidthService.prototype.setColumnWidth = function (column, index, module) {\n if (this.parent.getColumns().length < 1) {\n return;\n }\n var columnIndex = isNullOrUndefined(index) ? this.parent.getNormalizedColumnIndex(column.uid) : index;\n var cWidth = this.getWidth(column);\n var tgridWidth = this.getTableWidth(this.parent.getColumns());\n if (cWidth !== null) {\n this.setWidth(cWidth, columnIndex);\n if (this.parent.width !== 'auto' && this.parent.width.toString().indexOf('%') === -1) {\n this.setMinwidthBycalculation(tgridWidth);\n }\n if ((this.parent.allowResizing && module === 'resize') || (this.parent.getFrozenColumns() && this.parent.allowResizing)) {\n this.setWidthToTable();\n }\n this.parent.notify(columnWidthChanged, { index: columnIndex, width: cWidth, column: column, module: module });\n }\n };\n ColumnWidthService.prototype.setWidth = function (width, index, clear) {\n if (this.parent.groupSettings.columns.length > index && ispercentageWidth(this.parent)) {\n var elementWidth = this.parent.element.offsetWidth;\n width = (30 / elementWidth * 100).toFixed(1) + '%';\n }\n var header = this.parent.getHeaderTable();\n var content = this.parent.getContentTable();\n var fWidth = formatUnit(width);\n var headerCol;\n var frzCols = this.parent.getFrozenColumns();\n var isDraggable = this.parent.isRowDragable();\n frzCols = frzCols && isDraggable ? frzCols + 1 : frzCols;\n var mHdr = this.parent.getHeaderContent().querySelector('.' + literals.movableHeader);\n var mCont = this.parent.getContent().querySelector('.' + literals.movableContent);\n var freezeLeft = this.parent.getFrozenLeftColumnsCount();\n var freezeRight = this.parent.getFrozenRightColumnsCount();\n var movableCount = this.parent.getMovableColumnsCount();\n var isColFrozen = freezeLeft !== 0 || freezeRight !== 0;\n if (frzCols && index >= frzCols) {\n if (!mHdr || !mHdr.querySelector(literals.colGroup)) {\n return;\n }\n headerCol = mHdr\n .querySelector(literals.colGroup + ':not(.e-masked-colgroup)').children[index - frzCols];\n }\n else if (this.parent.enableColumnVirtualization && frzCols && this.parent.contentModule.isXaxis()\n && mHdr.scrollLeft > 0) {\n var colGroup = mHdr.querySelector(literals.colGroup);\n headerCol = colGroup.children[(colGroup.children.length - 1) - index];\n }\n else if (isColFrozen) {\n var target = void 0;\n if (freezeLeft && !freezeRight) {\n index = isDraggable ? index - 1 : index;\n target = index < freezeLeft ? header : mHdr;\n }\n else if (!freezeLeft && freezeRight) {\n target = index >= movableCount ? header : mHdr;\n }\n else if (freezeLeft && freezeRight) {\n index = isDraggable ? index - 1 : index;\n var frHdr = this.parent.getFrozenRightHeader();\n target = index < freezeLeft ? header : index < (freezeLeft + movableCount) ? mHdr : frHdr;\n }\n headerCol = this.getColumnLevelFrozenColgroup(index, freezeLeft, movableCount, target);\n if (!headerCol) {\n return;\n }\n }\n else {\n headerCol = header.querySelector(literals.colGroup).children[parseInt(index.toString(), 10)];\n }\n if (headerCol && !clear) {\n headerCol.style.width = fWidth;\n }\n else if (headerCol && clear) {\n headerCol.style.width = '';\n }\n var contentCol;\n if (frzCols && index >= frzCols) {\n contentCol = this.parent.getContent().querySelector('.' + literals.movableContent)\n .querySelector(literals.colGroup + ':not(.e-masked-colgroup)').children[index - frzCols];\n }\n else if (this.parent.enableColumnVirtualization && frzCols && this.parent.contentModule.isXaxis()\n && mCont.scrollLeft > 0) {\n var colGroup = this.parent.getContent().querySelector('.' + literals.movableContent)\n .querySelector(literals.colGroup);\n contentCol = colGroup.children[(colGroup.children.length - 1) - index];\n }\n else if (isColFrozen) {\n var target = void 0;\n if (freezeLeft && !freezeRight) {\n target = index < freezeLeft ? content : mCont;\n }\n if (!freezeLeft && freezeRight) {\n target = index >= movableCount ? content : mCont;\n }\n if (freezeLeft && freezeRight) {\n var frCont = this.parent.getContent().querySelector('.e-frozen-right-content');\n target = index < freezeLeft ? content : index < (freezeLeft + movableCount) ? mCont : frCont;\n }\n contentCol = this.getColumnLevelFrozenColgroup(index, freezeLeft, movableCount, target);\n }\n else {\n contentCol = content.querySelector(literals.colGroup).children[parseInt(index.toString(), 10)];\n }\n if (contentCol && !clear) {\n if (contentCol.style.width !== headerCol.style.width && this.parent.isFrozenGrid() && this.parent['reorderModule'] &&\n this.parent['reorderModule'].element && this.parent['reorderModule'].destElement) {\n contentCol.style.display = this.parent.getColumnByIndex(index).visible ? '' : 'none';\n }\n contentCol.style.width = fWidth;\n }\n else if (contentCol && clear) {\n contentCol.style.width = '';\n }\n if (!this.parent.enableColumnVirtualization) {\n var edit = this.parent.element.querySelectorAll('.e-table.e-inline-edit');\n var editTableCol = [];\n for (var i = 0; i < edit.length; i++) {\n if (parentsUntil(edit[parseInt(i.toString(), 10)], 'e-grid').id === this.parent.element.id) {\n for (var j = 0; j < edit[parseInt(i.toString(), 10)].querySelector('colgroup').children.length; j++) {\n editTableCol.push(edit[parseInt(i.toString(), 10)].querySelector('colgroup').children[parseInt(j.toString(), 10)]);\n }\n }\n }\n if (edit.length && editTableCol.length) {\n editTableCol[parseInt(index.toString(), 10)].style.width = fWidth;\n }\n }\n if (this.parent.isFrozenGrid()) {\n this.refreshFrozenScrollbar();\n }\n };\n ColumnWidthService.prototype.getColumnLevelFrozenColgroup = function (index, left, movable, ele) {\n if (!ele || !ele.querySelector(literals.colGroup)) {\n return null;\n }\n var columns = this.parent.getColumns();\n var isDrag = this.parent.isRowDragable();\n var frzMode = this.parent.getFrozenMode();\n var headerCol;\n var colGroup = [].slice.call(ele.querySelector(literals.colGroup + ':not(.e-masked-colgroup)').children);\n if (frzMode === 'Right' && isDrag && index === (movable + this.parent.getFrozenRightColumnsCount())) {\n headerCol = colGroup[colGroup.length - 1];\n }\n else if (isDrag && index === -1) {\n headerCol = colGroup[0];\n }\n else if (columns[parseInt(index.toString(), 10)].freeze === 'Left') {\n headerCol = colGroup[isDrag ? (index + 1) : index];\n }\n else if (columns[parseInt(index.toString(), 10)].freeze === 'Right') {\n headerCol = colGroup[index - (left + movable)];\n }\n else {\n headerCol = colGroup[index - left];\n }\n return headerCol;\n };\n /**\n * @returns {void}\n * @hidden\n */\n ColumnWidthService.prototype.refreshFrozenScrollbar = function () {\n var args = { cancel: false };\n this.parent.notify(preventFrozenScrollRefresh, args);\n if (args.cancel) {\n return;\n }\n var scrollWidth = getScrollBarWidth();\n var frozenScrollbar = this.parent.element.querySelector('.e-frozenscrollbar');\n var movableScrollbar = this.parent.element.querySelector('.e-movablescrollbar');\n var frozencontent = this.parent.getContent().querySelector('.' + literals.frozenContent);\n var movableContent = this.parent.getContent().querySelector('.' + literals.movableContent);\n var frozenWidth = frozencontent.firstElementChild.getBoundingClientRect().width;\n var movableWidth = movableContent.firstElementChild.getBoundingClientRect().width;\n if (this.parent.getFrozenMode() === 'Right') {\n frozenWidth = frozenWidth + scrollWidth;\n }\n frozenScrollbar.style.width = frozenWidth + 'px';\n if (this.parent.getFrozenMode() === literals.leftRight) {\n var frozenRightScrollbar = this.parent.element.querySelector('.e-frozen-right-scrollbar');\n var frozenRightWidth = this.parent.getContent().querySelector('.e-frozen-right-content')\n .firstElementChild.getBoundingClientRect().width;\n if (this.parent.height !== 'auto') {\n frozenRightWidth = frozenRightWidth + scrollWidth;\n }\n frozenRightScrollbar.style.width = frozenRightWidth + 'px';\n }\n else {\n if (this.parent.enableColumnVirtualization) {\n var placeHolder = this.parent.getMovableVirtualContent().querySelector('.e-virtualtrack');\n if (placeHolder) {\n movableWidth = placeHolder.scrollWidth;\n }\n }\n if (this.parent.getFrozenMode() !== 'Right' && this.parent.height !== 'auto') {\n movableWidth = movableWidth + scrollWidth;\n }\n }\n movableScrollbar.firstElementChild.style.width = movableWidth + 'px';\n };\n ColumnWidthService.prototype.getSiblingsHeight = function (element) {\n var previous = this.getHeightFromDirection(element, 'previous');\n var next = this.getHeightFromDirection(element, 'next');\n return previous + next;\n };\n ColumnWidthService.prototype.getHeightFromDirection = function (element, direction) {\n var sibling = element[direction + 'ElementSibling'];\n var result = 0;\n var classList = [literals.gridHeader, literals.gridFooter, 'e-groupdroparea', 'e-gridpager', 'e-toolbar', 'e-temp-toolbar'];\n while (sibling) {\n if (classList.some(function (value) { return sibling.classList.contains(value); })) {\n result += sibling.offsetHeight;\n }\n sibling = sibling[direction + 'ElementSibling'];\n }\n return result;\n };\n ColumnWidthService.prototype.isWidthUndefined = function () {\n var isWidUndefCount = this.parent.getColumns().filter(function (col) {\n return isNullOrUndefined(col.width) && isNullOrUndefined(col.minWidth);\n }).length;\n return (this.parent.getColumns().length === isWidUndefCount);\n };\n ColumnWidthService.prototype.getWidth = function (column) {\n if (isNullOrUndefined(column.width) && this.parent.allowResizing\n && isNullOrUndefined(column.minWidth) && !this.isWidthUndefined()) {\n column.width = 200;\n }\n if (this.parent.isFrozenGrid() && isNullOrUndefined(column.width) &&\n (column.getFreezeTableName() === literals.frozenLeft || column.getFreezeTableName() === literals.frozenRight)) {\n column.width = 200;\n }\n if (!column.width) {\n return null;\n }\n var width = parseInt(column.width.toString(), 10);\n if (column.minWidth && width < parseInt(column.minWidth.toString(), 10)) {\n return column.minWidth;\n }\n else if ((column.maxWidth && width > parseInt(column.maxWidth.toString(), 10))) {\n return column.maxWidth;\n }\n else {\n return column.width;\n }\n };\n ColumnWidthService.prototype.getTableWidth = function (columns) {\n var tWidth = 0;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n var cWidth = this.getWidth(column);\n if (column.width === 'auto') {\n cWidth = 0;\n }\n if (column.visible !== false && cWidth !== null) {\n tWidth += parseInt(cWidth.toString(), 10);\n }\n }\n return tWidth;\n };\n ColumnWidthService.prototype.calcMovableOrFreezeColWidth = function (tableType) {\n var columns = this.parent.getColumns().slice();\n var left = this.parent.getFrozenLeftColumnsCount() || this.parent.getFrozenColumns();\n var movable = this.parent.getMovableColumnsCount();\n var right = this.parent.getFrozenRightColumnsCount();\n if (tableType === 'movable') {\n if (right) {\n columns.splice(left + movable, columns.length);\n }\n if (left) {\n columns.splice(0, left);\n }\n }\n else if (tableType === 'freeze-left') {\n columns.splice(left, columns.length);\n }\n else if (tableType === 'freeze-right') {\n columns.splice(0, left + movable);\n }\n return formatUnit(this.getTableWidth(columns));\n };\n ColumnWidthService.prototype.setWidthToFrozenRightTable = function () {\n var freezeWidth = this.calcMovableOrFreezeColWidth('freeze-right');\n freezeWidth = this.isAutoResize() ? '100%' : freezeWidth;\n var headerTbl = this.parent.getHeaderContent().querySelector('.e-frozen-right-header')\n .querySelector('.' + literals.table + ':not(.e-masked-table)');\n var cntTbl = this.parent.getContent().querySelector('.e-frozen-right-content')\n .querySelector('.' + literals.table + ':not(.e-masked-table)');\n headerTbl.style.width = freezeWidth;\n cntTbl.style.width = freezeWidth;\n };\n ColumnWidthService.prototype.setWidthToFrozenLeftTable = function () {\n var freezeWidth = this.calcMovableOrFreezeColWidth('freeze-left');\n freezeWidth = this.isAutoResize() ? '100%' : freezeWidth;\n this.parent.getHeaderTable().style.width = freezeWidth;\n this.parent.getContentTable().style.width = freezeWidth;\n };\n ColumnWidthService.prototype.setWidthToMovableTable = function () {\n var movableWidth = '';\n var isColUndefined = this.parent.getColumns().filter(function (a) { return isNullOrUndefined(a.width); }).length >= 1;\n var isWidthAuto = this.parent.getColumns().filter(function (a) { return (a.width === 'auto'); }).length >= 1;\n var movableHeader = this.parent.getHeaderContent().querySelector('.' + literals.movableHeader);\n var movableContent = this.parent.getContent().querySelector('.' + literals.movableContent);\n if (typeof this.parent.width === 'number' && !isColUndefined && !isWidthAuto && !this.parent.resizeModule.resizeProcess) {\n movableWidth = formatUnit(this.parent.width - parseInt(this.calcMovableOrFreezeColWidth('freeze').split('px')[0], 10) - 5);\n }\n else if (!isColUndefined && !isWidthAuto) {\n movableWidth = this.calcMovableOrFreezeColWidth('movable');\n }\n movableWidth = this.isAutoResize() ? '100%' : movableWidth;\n if (movableHeader.firstElementChild) {\n if (movableHeader.firstElementChild.classList.contains('e-masked-table')) {\n movableHeader.childNodes[1].style.width = movableWidth;\n }\n else {\n movableHeader.firstElementChild.style.width = movableWidth;\n }\n }\n if (movableContent.firstElementChild.classList.contains('e-masked-table')) {\n movableContent.childNodes[1].style.width = movableWidth;\n }\n else {\n movableContent.firstElementChild.style.width = movableWidth;\n }\n };\n ColumnWidthService.prototype.setWidthToFrozenEditTable = function () {\n var freezeWidth = this.calcMovableOrFreezeColWidth('freeze');\n freezeWidth = this.isAutoResize() ? '100%' : freezeWidth;\n this.parent.element.querySelectorAll('.e-table.e-inline-edit')[0].style.width = freezeWidth;\n };\n ColumnWidthService.prototype.setWidthToMovableEditTable = function () {\n var movableWidth = this.calcMovableOrFreezeColWidth('movable');\n movableWidth = this.isAutoResize() ? '100%' : movableWidth;\n this.parent.element.querySelectorAll('.e-table.e-inline-edit')[1].style.width = movableWidth;\n };\n ColumnWidthService.prototype.setWidthToTable = function () {\n var tWidth = formatUnit(this.getTableWidth(this.parent.getColumns()));\n if (this.parent.isFrozenGrid()) {\n if (this.parent.getFrozenColumns() || this.parent.getFrozenLeftColumnsCount()) {\n this.setWidthToFrozenLeftTable();\n }\n this.setWidthToMovableTable();\n if (this.parent.getFrozenRightColumnsCount()) {\n this.setWidthToFrozenRightTable();\n }\n }\n else {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }));\n }\n tWidth = this.isAutoResize() ? '100%' : tWidth;\n this.parent.getHeaderTable().style.width = tWidth;\n this.parent.getContentTable().style.width = tWidth;\n }\n var edit = this.parent.element.querySelector('.e-table.e-inline-edit');\n if (edit && this.parent.getFrozenColumns()) {\n this.setWidthToFrozenEditTable();\n this.setWidthToMovableEditTable();\n }\n else if (edit) {\n edit.style.width = tWidth;\n }\n };\n ColumnWidthService.prototype.isAutoResize = function () {\n return this.parent.allowResizing && this.parent.resizeSettings.mode === 'Auto';\n };\n return ColumnWidthService;\n}());\nexport { ColumnWidthService };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, getValue, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, extend, Browser } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport * as event from '../base/constant';\nimport { Row } from '../models/row';\nimport { RowModelGenerator } from './row-model-generator';\nimport { parentsUntil, addRemoveEventListener, findCellIndex } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * FocusStrategy class\n *\n * @hidden\n */\nvar FocusStrategy = /** @class */ (function () {\n function FocusStrategy(parent) {\n this.currentInfo = {};\n this.oneTime = true;\n this.swap = {};\n /** @hidden */\n this.isInfiniteScroll = false;\n this.forget = false;\n this.skipFocus = true;\n this.focusByClick = false;\n this.firstHeaderCellClick = false;\n this.prevIndexes = {};\n this.refMatrix = this.refreshMatrix(true);\n this.actions = ['downArrow', 'upArrow'];\n this.isVirtualScroll = false;\n this.parent = parent;\n this.rowModelGen = new RowModelGenerator(this.parent);\n this.addEventListener();\n }\n FocusStrategy.prototype.focusCheck = function (e) {\n var target = e.target;\n this.focusByClick = true;\n this.firstHeaderCellClick = true;\n this.skipFocus = target.classList.contains('e-grid');\n };\n FocusStrategy.prototype.onFocus = function (e) {\n if (this.parent.isDestroyed || Browser.isDevice || this.parent.enableVirtualization\n || this.parent.element.querySelector('.e-masked-table') || (!this.parent.isInitialLoad && e\n && e.target === this.parent.element && this.parent.element.querySelector('.e-spin-show'))) {\n return;\n }\n this.setActive(!this.parent.enableHeaderFocus && this.parent.frozenRows === 0, this.parent.isFrozenGrid());\n if (!this.parent.enableHeaderFocus && !this.parent.getCurrentViewRecords().length && ((this.parent.editSettings.mode !== 'Batch')\n || (this.parent.editSettings.mode === 'Batch' && this.parent.editModule && !this.parent.editModule.getBatchChanges()[literals.addedRecords].length))) {\n this.getContent().matrix.\n generate(this.rowModelGen.generateRows({ rows: [new Row({ isDataRow: true })] }), this.getContent().selector, false);\n }\n var current = this.getContent().matrix.get(0, -1, [0, 1], null, this.getContent().validator());\n this.getContent().matrix.select(current[0], current[1]);\n if (this.skipFocus && !(e && e.target === this.parent.element)) {\n this.focus(e);\n this.skipFocus = false;\n }\n };\n FocusStrategy.prototype.passiveFocus = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n var firstHeaderCell = this.parent.getHeaderContent().querySelector('.e-headercell');\n var lastRowCell = this.parent.getContentTable().querySelector('tr:last-child td:last-child');\n if ((e.target === firstHeaderCell || lastRowCell) && e.relatedTarget && !parentsUntil(e.relatedTarget, 'e-grid')\n && !this.firstHeaderCellClick) {\n this.currentInfo.element = e.target;\n this.currentInfo.elementToFocus = e.target;\n addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n }\n this.firstHeaderCellClick = false;\n if (e.target && e.target.classList.contains('e-detailcell')) {\n this.currentInfo.skipAction = false;\n addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n }\n };\n FocusStrategy.prototype.onBlur = function (e) {\n // The below boolean condition for gantt team focus fix.\n var isGantt = parentsUntil(e.target, 'e-gantt') && e.target.classList.contains('e-rowcell')\n && (!isNullOrUndefined(e.target.nextElementSibling)\n && e.target.nextElementSibling.classList.contains('e-rowcell')) ? true : false;\n if ((this.parent.isEdit || e && (!e.relatedTarget || closest(e.relatedTarget, '.e-grid'))\n && !(this.parent.element.classList.contains('e-childgrid') && !this.parent.element.matches(':focus-within')))\n && !(!isGantt && isNullOrUndefined(e.relatedTarget) && parseInt(e.target.getAttribute('data-colindex'), 10) === 0\n && parseInt(e.target.getAttribute('index'), 10) === 0) && !(!isGantt && isNullOrUndefined(e.relatedTarget)\n && !closest(document.activeElement, '.e-grid') && !isNullOrUndefined(e['sourceCapabilities']))) {\n return;\n }\n this.removeFocus();\n this.skipFocus = true;\n this.currentInfo.skipAction = false;\n this.setLastContentCellTabIndex();\n this.setFirstFocusableTabIndex();\n this.firstHeaderCellClick = false;\n };\n /**\n * @returns {void}\n * @hidden */\n FocusStrategy.prototype.setFirstFocusableTabIndex = function () {\n var gObj = this.parent;\n gObj.element.tabIndex = -1;\n if (gObj.allowGrouping && gObj.groupSettings.showDropArea) {\n var groupModule = gObj.groupModule;\n var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n if (focusableGroupedItems.length > 0) {\n groupModule.element.tabIndex = -1;\n focusableGroupedItems[0].tabIndex = 0;\n }\n else {\n groupModule.element.tabIndex = 0;\n }\n return;\n }\n if (gObj.toolbar || gObj.toolbarTemplate) {\n var toolbarElement = gObj.toolbarModule.element;\n var focusableToolbarItems = this.parent.toolbarModule.getFocusableToolbarItems();\n if (focusableToolbarItems.length > 0 && focusableToolbarItems[0].querySelector('.e-toolbar-item-focus,.e-btn,.e-input')) {\n toolbarElement.tabIndex = -1;\n focusableToolbarItems[0].querySelector('.e-toolbar-item-focus,.e-btn,.e-input').tabIndex = 0;\n }\n else {\n toolbarElement.tabIndex = 0;\n }\n return;\n }\n if (gObj.getColumns().length) {\n var firstHeaderCell = gObj.getHeaderContent().querySelector('.e-headercell');\n firstHeaderCell.tabIndex = 0;\n if (this.parent.isFrozenGrid() && (this.parent.getFrozenMode() === 'Left'\n || this.parent.getFrozenMode() === literals.leftRight)) {\n this.setActive(false, true);\n }\n else {\n this.setActive(false);\n }\n if (!isNullOrUndefined(this.active) && (isNullOrUndefined(this.active.target) || !this.active.target.classList.contains('e-columnmenu'))) {\n var firstHeaderCellIndex = [0, 0];\n if (this.active.matrix.matrix[firstHeaderCellIndex[0]][firstHeaderCellIndex[1]] === 0) {\n firstHeaderCellIndex = findCellIndex(this.active.matrix.matrix, firstHeaderCellIndex, true);\n }\n this.active.matrix.current = firstHeaderCellIndex;\n }\n return;\n }\n };\n FocusStrategy.prototype.setLastContentCellTabIndex = function () {\n var contentTable = this.parent.getContentTable();\n if (contentTable.rows[contentTable.rows.length - 1]) {\n var lastCell = contentTable.rows[contentTable.rows.length - 1].lastElementChild;\n lastCell.tabIndex = 0;\n }\n };\n FocusStrategy.prototype.onClick = function (e, force) {\n if (parentsUntil(e.target, 'e-filterbarcell') && (parentsUntil(e.target, 'e-multiselect') ||\n e.target.classList.contains('e-input-group-icon'))) {\n return;\n }\n var isContent = !isNullOrUndefined(closest(e.target, '.' + literals.gridContent));\n var isHeader = !isNullOrUndefined(closest(e.target, '.' + literals.gridHeader));\n isContent = isContent && isHeader ? !isContent : isContent;\n var isFrozen = !isNullOrUndefined(closest(e.target, '.' + literals.frozenContent)) ||\n !isNullOrUndefined(closest(e.target, '.' + literals.frozenHeader));\n var isFrozenRight = false;\n if (this.parent.getFrozenMode() === literals.leftRight) {\n isFrozenRight = !isNullOrUndefined(closest(e.target, '.e-frozen-right-content')) ||\n !isNullOrUndefined(closest(e.target, '.e-frozen-right-header'));\n isFrozen = isFrozen && !isFrozenRight;\n }\n if (!isContent && isNullOrUndefined(closest(e.target, '.' + literals.gridHeader)) ||\n e.target.classList.contains(literals.content) ||\n !isNullOrUndefined(closest(e.target, '.e-unboundcell'))) {\n return;\n }\n this.setActive(isContent, isFrozen, isFrozenRight);\n if (!isContent && isNullOrUndefined(closest(e.target, '.' + literals.gridHeader))) {\n this.clearOutline();\n return;\n }\n var beforeArgs = { cancel: false, byKey: false, byClick: !isNullOrUndefined(e.target), clickArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel || closest(e.target, '.e-inline-edit')) {\n return;\n }\n this.setActive(isContent, isFrozen, isFrozenRight);\n if (this.getContent()) {\n var returnVal = this.getContent().onClick(e, force);\n if (returnVal === false) {\n return;\n }\n if (this.parent.isFrozenGrid() && isHeader && e.target === this.parent.getHeaderContent().firstChild\n && this.active.matrix.current[0] === -1 && this.active.matrix.current[1] === this.active.matrix.columns) {\n this.active.matrix.current = [0, 0];\n }\n this.focus();\n if (this.currentInfo.element.classList.contains('e-rowcell')) {\n addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n }\n }\n };\n FocusStrategy.prototype.onKeyPress = function (e) {\n var isFrozenGrid = this.parent.isFrozenGrid();\n if (this.parent.allowPaging) {\n var pagerElement = this.parent.pagerModule.pagerObj.element;\n var focusablePagerElements = this.parent.pagerModule.pagerObj.getFocusablePagerElements(pagerElement, []);\n if (this.parent.childGrid && this.allowToPaging(e) && focusablePagerElements.length) {\n focusablePagerElements[0].tabIndex = 0;\n }\n if (this.parent.pagerModule.pagerObj.checkPagerHasFocus()) {\n if (e.action === 'shiftTab' && focusablePagerElements.length && focusablePagerElements[0] === e.target) {\n this.setActive(true);\n var lastHeaderCellIndex = [this.active.matrix.matrix.length - 1,\n this.active.matrix.matrix[this.active.matrix.matrix.length - 1].length - 1];\n if (this.active.matrix.matrix[lastHeaderCellIndex[0]][lastHeaderCellIndex[1]] === 0) {\n lastHeaderCellIndex = findCellIndex(this.active.matrix.matrix, lastHeaderCellIndex, false);\n }\n this.active.matrix.current = this.parent.editSettings.mode === 'Batch' ?\n this.isValidBatchEditCell(lastHeaderCellIndex) ? lastHeaderCellIndex :\n this.findBatchEditCell(lastHeaderCellIndex, false) : lastHeaderCellIndex;\n e.preventDefault();\n this.focus(e);\n return;\n }\n if (!(e.action === 'tab' && this.parent.element.classList.contains('e-childgrid')\n && ((!this.parent.pageSettings.pageSizes && focusablePagerElements.length\n && focusablePagerElements[focusablePagerElements.length - 1] === e.target)\n || (this.parent.pagerModule.pagerObj.getDropDownPage() === e.target)))) {\n this.parent.pagerModule.pagerObj.changePagerFocus(e);\n return;\n }\n else {\n var parentCell = parentsUntil(this.parent.element, 'e-detailcell');\n removeClass([this.parent.element], ['e-focus']);\n removeClass([parentCell], ['e-focused']);\n parentCell.tabIndex = -1;\n }\n }\n if (this.parent.pagerModule.pagerObj.element.tabIndex === 0 && (e.keyCode === 38 || (e.shiftKey && e.keyCode === 9))) {\n e.preventDefault();\n this.focus(e);\n return;\n }\n else if (this.parent.pagerModule.pagerObj.element.tabIndex === 0 && e.keyCode === 9) {\n e.preventDefault();\n this.parent.pagerModule.pagerObj.setPagerFocus();\n return;\n }\n if (this.parent.pagerModule.pagerObj.checkFirstPagerFocus()) {\n var lastRow = this.getContent().matrix.rows;\n var lastColumn = this.getContent().matrix.columns;\n this.getContent().matrix.current = [lastRow, lastColumn];\n }\n }\n if (this.skipOn(e)) {\n return;\n }\n if (e.target && parentsUntil(e.target, 'e-gridcontent') && !isFrozenGrid) {\n var rows = [].slice.call(this.parent.getContentTable().rows);\n var lastCell = rows[rows.length - 1].lastElementChild;\n if (e.target === lastCell) {\n this.setActive(true);\n this.setLastContentCellActive();\n }\n }\n if (e.action === 'shiftTab' && e.target && (e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n || parentsUntil(e.target, 'e-groupdroparea'))) {\n if (e.target === this.parent.element) {\n if (this.parent.element.classList.contains('e-childgrid')) {\n this.focusOutFromChildGrid(e);\n }\n return;\n }\n if (parentsUntil(e.target, 'e-groupdroparea')) {\n if (this.parent.element.classList.contains('e-childgrid')) {\n e.preventDefault();\n this.parent.element.focus();\n }\n return;\n }\n if (parentsUntil(e.target, 'e-toolbar')) {\n if (this.parent.allowGrouping && this.parent.groupSettings.showDropArea) {\n var groupModule = this.parent.groupModule;\n var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n e.preventDefault();\n if (focusableGroupedItems.length > 0) {\n focusableGroupedItems[focusableGroupedItems.length - 1].focus();\n }\n else {\n groupModule.element.focus();\n }\n }\n else if (this.parent.element.classList.contains('e-childgrid')) {\n e.preventDefault();\n this.parent.element.focus();\n }\n return;\n }\n }\n var focusFirstHeaderCell = false;\n if (e.action === 'tab' && e.target && (e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n || parentsUntil(e.target, 'e-groupdroparea'))) {\n if (this.parent.allowGrouping && this.parent.groupSettings.showDropArea\n && (e.target === this.parent.element || e.target.classList.contains('e-groupdroparea'))) {\n var groupModule = this.parent.groupModule;\n var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n if (focusableGroupedItems.length > 0) {\n e.preventDefault();\n focusableGroupedItems[0].focus();\n return;\n }\n if (!e.target.classList.contains('e-groupdroparea')) {\n e.preventDefault();\n groupModule.element.focus();\n return;\n }\n }\n if ((this.parent.toolbar || this.parent.toolbarTemplate) && (e.target === this.parent.element\n || parentsUntil(e.target, 'e-groupdroparea')\n || e.target.classList.contains('e-toolbar'))) {\n var toolbarElement = this.parent.toolbarModule.element;\n var focusableToolbarItems = this.parent.toolbarModule.getFocusableToolbarItems();\n if (focusableToolbarItems.length > 0) {\n e.preventDefault();\n focusableToolbarItems[0].querySelector('.e-toolbar-item-focus,.e-btn,.e-input').focus();\n return;\n }\n if (!e.target.classList.contains('e-toolbar')) {\n e.preventDefault();\n toolbarElement.focus();\n return;\n }\n }\n if (e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n || parentsUntil(e.target, 'e-groupdroparea')) {\n focusFirstHeaderCell = true;\n }\n }\n if (focusFirstHeaderCell) {\n if (isFrozenGrid && (this.parent.getFrozenMode() === 'Left'\n || this.parent.getFrozenMode() === literals.leftRight)) {\n this.setActive(false, true);\n }\n else if (this.parent.allowGrouping && this.parent.groupSettings.columns.length === this.parent.columns.length) {\n this.setActive(true);\n }\n else {\n this.setActive(false);\n }\n this.active.matrix.current = [0, -1];\n }\n this.activeKey = e.action;\n var beforeArgs = { cancel: false, byKey: true, byClick: false, keyArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel) {\n return;\n }\n var bValue = this.getContent().matrix.current;\n var prevActiveName = this.getActiveName();\n var prevBatchValue = this.active && this.active.matrix.current ?\n [this.active.matrix.current[0], this.active.matrix.current[1]] : undefined;\n this.currentInfo.outline = true;\n var swapInfo = this.getContent().jump(e.action, bValue);\n this.swap = swapInfo;\n if (swapInfo.swap && !(isFrozenGrid && this.parent.editSettings.mode === 'Batch'\n && (e.action === 'tab' || e.action === 'shiftTab'))) {\n this.setActive(!swapInfo.toHeader, swapInfo.toFrozen, swapInfo.toFrozenRight);\n this.getContent().matrix.current = this.getContent().getNextCurrent(bValue, swapInfo, this.active, e.action);\n this.prevIndexes = {};\n }\n this.setActiveByKey(e.action, this.getContent());\n var returnVal = isFrozenGrid && this.parent.editSettings.mode === 'Batch' && e.target && (e.action === 'tab'\n || e.action === 'shiftTab') && (parentsUntil(e.target, 'e-gridheader')\n || parentsUntil(e.target, 'e-gridcontent')) ? undefined\n : this.content.lastIdxCell ? false : this.getContent().onKeyPress(e);\n if (e.target && parentsUntil(e.target, 'e-gridheader')) {\n if (!isFrozenGrid) {\n if (e.action === 'tab' && bValue.toString() === this.active.matrix.current.toString()) {\n var nextHeaderCellIndex = findCellIndex(this.active.matrix.matrix, this.active.matrix.current, true);\n var lastHeaderCellIndex = [this.active.matrix.matrix.length - 1,\n this.active.matrix.matrix[this.active.matrix.matrix.length - 1].length - 1];\n if (this.active.matrix.matrix[lastHeaderCellIndex[0]][lastHeaderCellIndex[1]] === 0) {\n lastHeaderCellIndex = findCellIndex(this.active.matrix.matrix, lastHeaderCellIndex, false);\n }\n if (this.active.matrix.current.toString() === lastHeaderCellIndex.toString()) {\n returnVal = true;\n this.setActive(true);\n var firstContentCellIndex = [0, 0];\n if (this.active.matrix.matrix[firstContentCellIndex[0]][firstContentCellIndex[1]] === 0) {\n firstContentCellIndex = findCellIndex(this.active.matrix.matrix, [0, 0], true);\n }\n this.active.matrix.current = this.parent.editSettings.mode === 'Batch' ?\n this.isValidBatchEditCell(firstContentCellIndex) ? firstContentCellIndex :\n this.findBatchEditCell(firstContentCellIndex, true) : firstContentCellIndex;\n }\n else if (this.active.matrix.current.toString() !== nextHeaderCellIndex.toString()) {\n this.active.matrix.current = nextHeaderCellIndex;\n }\n }\n if (e.action === 'shiftTab' && bValue.toString() === this.active.matrix.current.toString()) {\n var previousCellIndex = findCellIndex(this.active.matrix.matrix, this.active.matrix.current, false);\n if (previousCellIndex.toString() === this.active.matrix.current.toString()) {\n this.focusOutFromHeader(e);\n return;\n }\n if (this.active.matrix.current.toString() !== previousCellIndex.toString() && !returnVal) {\n returnVal = true;\n this.active.matrix.current = previousCellIndex;\n }\n }\n }\n else {\n if (this.parent.editSettings.mode === 'Batch' && (e.action === 'tab' || e.action === 'shiftTab')) {\n this.setFrozenBatchEditCell(prevActiveName, prevBatchValue, e.action === 'tab' ? true : false);\n }\n if (e.action === 'shiftTab' && bValue.toString() === this.active.matrix.current.toString() && !swapInfo.swap\n && !(this.parent.editSettings.mode === 'Batch' && !(this.getActiveName() === prevActiveName))) {\n this.focusOutFromHeader(e);\n return;\n }\n }\n }\n if (e.target && parentsUntil(e.target, 'e-gridcontent')) {\n if (!isFrozenGrid) {\n if (this.parent.editSettings.mode === 'Batch' && (e.action === 'tab' || e.action === 'shiftTab')) {\n this.active.matrix.current = this.findBatchEditCell(prevBatchValue, e.action === 'tab' ? true : false);\n if (e.action === 'tab' && prevBatchValue.toString() === this.active.matrix.current.toString()) {\n this.parent.editModule.editModule.addBatchRow = true;\n }\n }\n if (e.action === 'shiftTab' && bValue.toString() === this.active.matrix.current.toString()) {\n if (this.parent.allowGrouping && this.parent.groupSettings.columns.length === this.parent.columns.length) {\n this.focusOutFromHeader(e);\n return;\n }\n var firstContentCellIndex = [0, 0];\n if (this.active.matrix.matrix[firstContentCellIndex[0]][firstContentCellIndex[1]] === 0) {\n firstContentCellIndex = findCellIndex(this.active.matrix.matrix, [0, 0], true);\n }\n if (!returnVal && (firstContentCellIndex.toString() === this.active.matrix.current.toString()\n || (this.parent.editSettings.mode === 'Batch'\n && prevBatchValue.toString() === this.active.matrix.current.toString()))) {\n returnVal = true;\n this.setActive(false);\n this.setLastContentCellActive();\n }\n }\n }\n else {\n if (this.parent.editSettings.mode === 'Batch' && (e.action === 'tab' || e.action === 'shiftTab')) {\n this.setFrozenBatchEditCell(prevActiveName, prevBatchValue, e.action === 'tab' ? true : false);\n if (e.action === 'tab' && prevBatchValue.toString() === this.active.matrix.current.toString()\n && this.getActiveName() === prevActiveName) {\n this.parent.editModule.editModule.addBatchRow = true;\n }\n }\n }\n }\n if (returnVal === false) {\n this.clearIndicator();\n if (e.action === 'shiftTab' && bValue.toString() === [0, 0].toString()) {\n this.parent.element.tabIndex = -1;\n }\n if (this.parent.allowPaging && !this.parent.pagerModule.pagerObj.checkPagerHasFocus() && this.allowToPaging(e)\n && bValue.toString() !== [0, 0].toString()) {\n e.preventDefault();\n if (e.keyCode === 40) {\n this.parent.pagerModule.pagerObj.setPagerContainerFocus();\n return;\n }\n else if (e.keyCode === 9) {\n this.parent.pagerModule.pagerObj.setPagerFocus();\n return;\n }\n }\n if (this.parent.element.classList.contains('e-childgrid')) {\n this.focusOutFromChildGrid(e);\n }\n return;\n }\n e.preventDefault();\n this.focus(e);\n };\n FocusStrategy.prototype.isValidBatchEditCell = function (cellIndex) {\n var cell = this.active.getTable().rows[cellIndex[0]].cells[cellIndex[1]];\n var tr = closest(cell, 'tr');\n var cellColIndex = parseInt(cell.getAttribute('data-colindex'), 10);\n var cellCol = this.parent.getColumns()[parseInt(cellColIndex.toString(), 10)];\n if (this.active.matrix.matrix[cellIndex[0]][cellIndex[1]] === 1\n && (!tr.classList.contains('e-row') || (tr.classList.contains('e-insertedrow') || !cellCol.isPrimaryKey) && cellCol.allowEditing)) {\n return true;\n }\n return false;\n };\n FocusStrategy.prototype.findBatchEditCell = function (currentCellIndex, next, limitRow) {\n var cellIndex = currentCellIndex;\n var tempCellIndex = currentCellIndex;\n var cellIndexObtain = false;\n while (!cellIndexObtain) {\n var prevTempCellIndex = tempCellIndex;\n tempCellIndex = findCellIndex(this.active.matrix.matrix, tempCellIndex, next);\n if ((prevTempCellIndex.toString() === tempCellIndex.toString())\n || (limitRow && prevTempCellIndex[0] !== tempCellIndex[0])) {\n cellIndexObtain = true;\n continue;\n }\n if (this.isValidBatchEditCell(tempCellIndex)) {\n cellIndex = tempCellIndex;\n cellIndexObtain = true;\n }\n }\n return cellIndex;\n };\n FocusStrategy.prototype.setFrozenBatchEditCell = function (currentActiveName, currentCellIndex, next, nextRow) {\n var gObj = this.parent;\n var nextCell;\n var nextSection = false;\n if (nextRow !== undefined) {\n nextCell = [nextRow, next ? 0 : this.active.matrix.matrix[parseInt(nextRow.toString(), 10)].length - 1];\n }\n else {\n nextCell = next ? [currentCellIndex[0], currentCellIndex[1] + 1] : [currentCellIndex[0], currentCellIndex[1] - 1];\n }\n if (this.active.matrix.matrix[nextCell[0]] && this.active.matrix.matrix[nextCell[0]][nextCell[1]]) {\n if (this.isValidBatchEditCell(nextCell)) {\n this.active.matrix.current = nextCell;\n }\n else {\n var prevNextCell = nextCell;\n nextCell = this.findBatchEditCell(nextCell, next, true);\n if (prevNextCell.toString() === nextCell.toString()) {\n nextSection = true;\n }\n else {\n this.active.matrix.current = nextCell;\n }\n }\n }\n else {\n nextSection = true;\n }\n if (nextSection) {\n var activeName = this.getActiveName();\n var frozenMode = gObj.getFrozenMode();\n var rowIndex = nextCell[0];\n var rowDec = rowIndex - 1;\n var rowInc = rowIndex + 1;\n var notPrev = !next && rowDec === -1;\n var notNext = next && rowInc > this.active.matrix.matrix.length - 1;\n var returnCurrentActiveName = ((activeName === 'FrozenLeftHeader' || (activeName === 'Movableheader'\n && frozenMode === 'Right')) && notPrev) || ((activeName === 'FrozenRightContent' || (activeName === 'MovableContent'\n && frozenMode === 'Left')) && notNext);\n if (returnCurrentActiveName) {\n this.setActiveByName(currentActiveName);\n this.active.matrix.current = currentCellIndex;\n }\n else {\n var frozenLeftRightPrev = frozenMode === 'Left-Right' && !next;\n var frozenLeftRightNext = frozenMode === 'Left-Right' && next;\n var frozenLeftNotNext = frozenMode === 'Left' && notNext;\n var frozenLeftNext = frozenMode === 'Left' && next;\n var frozenRightPrev = frozenMode === 'Right' && !next;\n var frozenRightNotPrev = frozenMode === 'Right' && notPrev;\n var content = (activeName === 'Movableheader' && frozenLeftNotNext) || (activeName === 'FrozenRightHeader'\n && notNext) || (activeName === 'FrozenLeftContent' && !notPrev) || (activeName === 'MovableContent'\n && !frozenRightNotPrev) || activeName === 'FrozenRightContent';\n var frozenContent = ((activeName === 'Movableheader' || activeName === 'MovableContent')\n && !frozenLeftRightNext) || ((activeName === 'FrozenRightHeader' || activeName === 'FrozenRightContent')\n && frozenLeftRightNext);\n var frozenRightContent = ((activeName === 'FrozenLeftHeader' || activeName === 'FrozenLeftContent')\n && frozenLeftRightPrev) || ((activeName === 'Movableheader' || activeName === 'MovableContent')\n && frozenLeftRightNext);\n this.setActive(content, frozenContent, frozenRightContent);\n var nextIndex = (activeName === 'Movableheader' && frozenLeftNotNext)\n || (activeName === 'FrozenRightHeader' && notNext) ? 0\n : ((activeName === 'Movableheader' || activeName === 'MovableContent') && frozenLeftNext)\n || ((activeName === 'FrozenRightHeader' || activeName === 'FrozenRightContent') && next) ? rowInc\n : (activeName === 'FrozenLeftContent' && notPrev)\n || (activeName === 'MovableContent' && frozenRightNotPrev) ? this.active.matrix.matrix.length - 1\n : ((activeName === 'FrozenLeftHeader' || activeName === 'FrozenLeftContent') && !next)\n || ((activeName === 'Movableheader' || activeName === 'MovableContent') && frozenRightPrev) ? rowDec\n : rowIndex;\n this.setFrozenBatchEditCell(currentActiveName, currentCellIndex, next, nextIndex);\n }\n }\n };\n FocusStrategy.prototype.getActiveName = function () {\n var activeName;\n if (this.active) {\n var activeTable = this.active.getTable();\n activeName = parentsUntil(activeTable, 'e-frozen-left-header') ? 'FrozenLeftHeader' :\n parentsUntil(activeTable, 'e-movableheader') ? 'Movableheader' :\n parentsUntil(activeTable, 'e-frozen-right-header') ? 'FrozenRightHeader' :\n parentsUntil(activeTable, 'e-frozen-left-content') ? 'FrozenLeftContent' :\n parentsUntil(activeTable, 'e-movablecontent') ? 'MovableContent' :\n parentsUntil(activeTable, 'e-frozen-right-content') ? 'FrozenRightContent' :\n undefined;\n }\n return activeName;\n };\n FocusStrategy.prototype.setActiveByName = function (activeName) {\n var frozenMode = this.parent.getFrozenMode();\n switch (activeName) {\n case 'FrozenLeftHeader':\n this.setActive(false, true);\n break;\n case 'Movableheader':\n this.setActive(false);\n break;\n case 'FrozenRightHeader':\n this.setActive(false, frozenMode === 'Right' ? true : false, frozenMode === 'Right' ? false : true);\n break;\n case 'FrozenLeftContent':\n this.setActive(true, true);\n break;\n case 'MovableContent':\n this.setActive(true);\n break;\n case 'FrozenRightContent':\n this.setActive(true, frozenMode === 'Right' ? true : false, frozenMode === 'Right' ? false : true);\n break;\n }\n };\n FocusStrategy.prototype.setLastContentCellActive = function () {\n var lastContentCellIndex = [this.active.matrix.matrix.length - 1,\n this.active.matrix.matrix[this.active.matrix.matrix.length - 1].length - 1];\n if (this.active.matrix.matrix[lastContentCellIndex[0]][lastContentCellIndex[1]] === 0) {\n lastContentCellIndex = findCellIndex(this.active.matrix.matrix, lastContentCellIndex, false);\n }\n this.active.matrix.current = lastContentCellIndex;\n };\n FocusStrategy.prototype.focusOutFromChildGrid = function (e) {\n var parentTable = parentsUntil(this.parent.element, 'e-table');\n var parentGrid = parentsUntil(parentTable, 'e-grid').ej2_instances[0];\n var parentCell = parentsUntil(this.parent.element, 'e-detailcell');\n var uid = parentsUntil(this.parent.element, 'e-detailrow').getAttribute('data-uid');\n var parentRows = [].slice.call(parentGrid.getContentTable().rows);\n var parentRowIndex = parentRows.map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n if (e.action === 'tab' && parentRowIndex >= parentRows.length - 1) {\n return;\n }\n removeClass([this.parent.element], ['e-focus']);\n removeClass([parentCell], ['e-focused']);\n parentCell.tabIndex = -1;\n e.preventDefault();\n var nextFocusCell;\n parentGrid.focusModule.removeFocus();\n if (e.action === 'shiftTab') {\n var previousRow = parentRows[parentRowIndex - 1];\n var rowCells = previousRow.cells;\n for (var i = rowCells.length - 1; i >= 0; i--) {\n nextFocusCell = rowCells[parseInt(i.toString(), 10)];\n if (!nextFocusCell.classList.contains('e-hide')) {\n parentGrid.focusModule.active.matrix.current = [parentRowIndex - 1, i];\n break;\n }\n }\n }\n else {\n nextFocusCell = parentRows[parentRowIndex + 1].cells[0];\n parentGrid.focusModule.active.matrix.current = [parentRowIndex + 1, 0];\n }\n parentGrid.focusModule.currentInfo.element = nextFocusCell;\n parentGrid.focusModule.currentInfo.elementToFocus = nextFocusCell;\n addClass([nextFocusCell], ['e-focused', 'e-focus']);\n nextFocusCell.tabIndex = 0;\n nextFocusCell.focus();\n };\n FocusStrategy.prototype.focusOutFromHeader = function (e) {\n this.removeFocus();\n if (this.parent.toolbar || this.parent.toolbarTemplate) {\n var toolbarElement = this.parent.toolbarModule.element;\n var focusableToolbarItems = this.parent.toolbarModule.getFocusableToolbarItems();\n e.preventDefault();\n if (focusableToolbarItems.length > 0) {\n focusableToolbarItems[focusableToolbarItems.length - 1].querySelector('.e-toolbar-item-focus,.e-btn,.e-input').focus();\n }\n else {\n toolbarElement.focus();\n }\n return;\n }\n if (this.parent.allowGrouping && this.parent.groupSettings.showDropArea) {\n var groupModule = this.parent.groupModule;\n var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n e.preventDefault();\n if (focusableGroupedItems.length > 0) {\n focusableGroupedItems[focusableGroupedItems.length - 1].focus();\n }\n else {\n groupModule.element.focus();\n }\n return;\n }\n if (this.parent.element.classList.contains('e-childgrid')) {\n e.preventDefault();\n this.parent.element.focus();\n }\n };\n FocusStrategy.prototype.allowToPaging = function (e) {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.allowAdding && e.keyCode !== 40) {\n return false;\n }\n return true;\n };\n FocusStrategy.prototype.skipOn = function (e) {\n var target = e.target;\n if (!target) {\n return false;\n }\n if (this.currentInfo.skipAction) {\n this.clearIndicator();\n return true;\n }\n if (['pageUp', 'pageDown', 'altDownArrow'].indexOf(e.action) > -1) {\n this.clearIndicator();\n return true;\n }\n if (this.parent.allowGrouping) {\n var focusableGroupedItems = this.parent.groupModule.getFocusableGroupedItems();\n if (parentsUntil(e.target, 'e-groupheadercell')\n && !((e.target === focusableGroupedItems[0] && e.action === 'shiftTab')\n || (e.target === focusableGroupedItems[focusableGroupedItems.length - 1] && e.action === 'tab'))) {\n return true;\n }\n }\n if (this.parent.toolbar || this.parent.toolbarTemplate) {\n var toolbarElement = this.parent.toolbarModule.element;\n var focusableToolbarItems = toolbarElement\n .querySelectorAll('.e-toolbar-item:not(.e-overlay):not(.e-hidden)');\n if (parentsUntil(e.target, 'e-toolbar-item')\n && !(focusableToolbarItems.length > 0 && ((parentsUntil(e.target, 'e-toolbar-item') === focusableToolbarItems[0] && e.action === 'shiftTab')\n || (parentsUntil(e.target, 'e-toolbar-item') === focusableToolbarItems[focusableToolbarItems.length - 1] && e.action === 'tab')))) {\n return true;\n }\n }\n var th = closest(target, 'th') && !closest(target, 'th').tabIndex;\n if (e.target.classList.contains('e-filterbaroperator') && (e.keyCode === 13 || e.keyCode === 27)) {\n var inputTarget = closest(e.target, '.e-filterbarcell');\n inputTarget.querySelector('input').focus();\n }\n if (th && closest(document.activeElement, '.e-filterbarcell') !== null) {\n this.removeFocus();\n }\n var filterCell = closest(document.activeElement, '.e-filterbarcell') !== null;\n if (this.parent.enableHeaderFocus && filterCell) {\n var matrix = this.active.matrix;\n var current = matrix.current;\n filterCell = matrix.matrix[current[0]].lastIndexOf(1) !== current[1];\n }\n return (e.action === 'delete'\n || (this.parent.editSettings.mode !== 'Batch' && (this.parent.isEdit || ['insert', 'f2'].indexOf(e.action) > -1))\n || ((filterCell && this.parent.enableHeaderFocus) || (filterCell && e.action !== 'tab' && e.action !== 'shiftTab') ||\n closest(document.activeElement, '#' + this.parent.element.id + '_searchbar') !== null\n && ['enter', 'leftArrow', 'rightArrow',\n 'shiftLeft', 'shiftRight', 'ctrlPlusA'].indexOf(e.action) > -1)\n || (closest(target, '.' + literals.gridContent) === null && closest(target, '.' + literals.gridHeader) === null\n && !(e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n || parentsUntil(e.target, 'e-groupdroparea')))\n || (e.action === 'space' && (!target.classList.contains(literals.gridChkBox) && closest(target, '.' + literals.gridChkBox) === null\n && closest(target, '.e-headerchkcelldiv') === null))) || closest(target, '.e-filter-popup') !== null;\n };\n FocusStrategy.prototype.focusVirtualElement = function (e) {\n var _this = this;\n if (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) {\n var data = { virtualData: {}, isAdd: false, isCancel: false };\n this.parent.notify(event.getVirtualData, data);\n var isKeyFocus = this.actions.some(function (value) { return value === _this.activeKey; });\n var isSelected = this.parent.contentModule ?\n this.parent.contentModule.selectedRowIndex > -1 : false;\n if (data.isAdd || Object.keys(data.virtualData).length || isKeyFocus || data.isCancel || isSelected) {\n this.parent.notify(event.resetVirtualFocus, { isCancel: false });\n data.isCancel = false;\n this.parent.contentModule.selectedRowIndex = -1;\n if (isKeyFocus) {\n this.activeKey = this.empty;\n this.parent.notify('virtaul-key-handler', e);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.currentInfo.elementToFocus.focus({ preventScroll: true });\n }\n else {\n if (this.isVirtualScroll || this.isInfiniteScroll) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.currentInfo.elementToFocus.focus({ preventScroll: true });\n }\n else {\n this.currentInfo.elementToFocus.focus();\n }\n }\n }\n this.isVirtualScroll = this.isInfiniteScroll = false;\n };\n FocusStrategy.prototype.getFocusedElement = function () {\n return this.currentInfo.elementToFocus;\n };\n FocusStrategy.prototype.getContent = function () {\n return this.active || this.content;\n };\n FocusStrategy.prototype.setActive = function (content, isFrozen, isFrozenRight) {\n this.active = content ? isFrozen ? this.fContent : isFrozenRight ? this.frContent : this.content :\n isFrozen ? this.fHeader : isFrozenRight ? this.frHeader : this.header;\n };\n FocusStrategy.prototype.setFocusedElement = function (element, e) {\n var _this = this;\n this.currentInfo.elementToFocus = element;\n setTimeout(function () {\n if (!isNullOrUndefined(_this.currentInfo.elementToFocus)) {\n if (_this.parent.enableVirtualization || _this.parent.enableInfiniteScrolling) {\n _this.focusVirtualElement(e);\n }\n else {\n _this.currentInfo.elementToFocus.focus();\n }\n }\n }, 0);\n };\n FocusStrategy.prototype.focus = function (e) {\n this.parent.notify(event.virtaulCellFocus, e);\n this.removeFocus();\n this.addFocus(this.getContent().getFocusInfo(), e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FocusStrategy.prototype.removeFocus = function (e) {\n if (!this.currentInfo.element) {\n return;\n }\n if (this.parent.isReact && this.currentInfo.element.classList.contains('e-rowcell') && !this.currentInfo.element.parentElement) {\n this.currentInfo.element = this.parent.getCellFromIndex(this.prevIndexes.rowIndex, this.prevIndexes.cellIndex);\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n this.currentInfo.element.tabIndex = -1;\n };\n /**\n * @returns {void}\n * @hidden */\n FocusStrategy.prototype.addOutline = function () {\n var info = this.getContent().getFocusInfo();\n if (info.element) {\n addClass([info.element], ['e-focused']);\n addClass([info.elementToFocus], ['e-focus']);\n }\n };\n /**\n * @returns {void}\n * @hidden */\n FocusStrategy.prototype.focusHeader = function () {\n this.setActive(false, this.parent.isFrozenGrid());\n this.resetFocus();\n };\n /**\n * @returns {void}\n * @hidden */\n FocusStrategy.prototype.focusContent = function () {\n this.setActive(true, this.parent.isFrozenGrid());\n this.resetFocus();\n };\n FocusStrategy.prototype.resetFocus = function () {\n var current = this.getContent().matrix.get(0, -1, [0, 1], null, this.getContent().validator());\n this.getContent().matrix.select(current[0], current[1]);\n this.focus();\n };\n FocusStrategy.prototype.addFocus = function (info, e) {\n this.currentInfo = info;\n this.currentInfo.outline = info.outline && (!isNullOrUndefined(e) || this.isVirtualScroll);\n if (this.isInfiniteScroll) {\n this.currentInfo.outline = true;\n }\n if (!info.element) {\n return;\n }\n var isFocused = info.elementToFocus.classList.contains('e-focus');\n if (isFocused) {\n return;\n }\n if (this.currentInfo.outline) {\n addClass([info.element], ['e-focused']);\n }\n addClass([info.elementToFocus], ['e-focus']);\n info.element.tabIndex = 0;\n if (!isFocused) {\n this.setFocusedElement(info.elementToFocus, e);\n }\n this.parent.notify(event.cellFocused, {\n element: info.elementToFocus,\n parent: info.element,\n indexes: this.getContent().matrix.current,\n byKey: !isNullOrUndefined(e),\n byClick: isNullOrUndefined(e),\n keyArgs: e,\n isJump: this.swap.swap,\n container: this.getContent().getInfo(e),\n outline: !isNullOrUndefined(e),\n swapInfo: this.swap\n });\n var _a = this.getContent().matrix.current, rowIndex = _a[0], cellIndex = _a[1];\n this.prevIndexes = { rowIndex: rowIndex, cellIndex: cellIndex };\n this.focusedColumnUid = this.parent.getColumnByIndex(cellIndex).uid;\n this.focusByClick = false;\n };\n FocusStrategy.prototype.refreshMatrix = function (content) {\n var _this = this;\n return function (e) {\n if (content && (e.args && e.args.isFrozen) && !_this.fContent) {\n _this.fContent = new FixedContentFocus(_this.parent);\n }\n else if (content && !_this.frContent && (e.args && e.args.renderFrozenRightContent)) {\n _this.frContent = new FixedRightContentFocus(_this.parent);\n }\n else if (content && !_this.content) {\n _this.content = new ContentFocus(_this.parent);\n }\n if (!content && (e.args && e.args.isFrozen) && !_this.fHeader) {\n _this.fHeader = new FixedHeaderFocus(_this.parent);\n }\n else if (!content && (e.args && e.args.renderFrozenRightContent) && !_this.frHeader) {\n _this.frHeader = new FixedRightHeaderFocus(_this.parent);\n }\n else if (!content && !_this.header) {\n _this.header = new HeaderFocus(_this.parent);\n }\n var cFocus = content ? (e.args && e.args.isFrozen) ? _this.fContent : (e.args && e.args.renderFrozenRightContent)\n ? _this.frContent : _this.content : (e.args && e.args.isFrozen) ? _this.fHeader : (e.args && e.args.renderFrozenRightContent)\n ? _this.frHeader : _this.header;\n var rows = content ? e.rows.slice(_this.parent.frozenRows) : e.rows;\n var updateRow = content ? e.rows.slice(0, _this.parent.frozenRows) : e.rows;\n if (_this.parent.isCollapseStateEnabled() && content) {\n rows = rows.filter(function (x) { return x.visible !== false; });\n }\n var isRowTemplate = !isNullOrUndefined(_this.parent.rowTemplate);\n var matrix = cFocus.matrix.generate(updateRow, cFocus.selector, isRowTemplate);\n if (e.name === 'batchAdd' && _this.parent.isFrozenGrid()) {\n var mRows = _this.parent.getMovableRowsObject().slice(_this.parent.frozenRows);\n var newMovableRows = mRows.map(function (row) { return row.clone(); });\n var newFrozenRows = rows.map(function (row) { return row.clone(); });\n _this.fContent.matrix.generate(newFrozenRows, _this.fContent.selector, isRowTemplate);\n _this.content.matrix.generate(newMovableRows, _this.content.selector, isRowTemplate);\n if (_this.parent.getFrozenMode() === literals.leftRight) {\n var frRows = _this.parent.getFrozenRightRowsObject().slice(_this.parent.frozenRows);\n var newfrRows = frRows.map(function (row) { return row.clone(); });\n _this.frContent.matrix.generate(newfrRows, _this.frContent.selector, isRowTemplate);\n }\n }\n else {\n cFocus.matrix.generate(rows, cFocus.selector, isRowTemplate);\n }\n if (!(_this.parent.isFrozenGrid() && ((e.args && (e.args.requestType === 'sorting'\n || e.args.requestType === 'batchsave' || e.args.requestType === 'paging'))\n || e.name === 'batchAdd' || e.name === 'batchCancel'))) {\n cFocus.generateRows(updateRow, {\n matrix: matrix, handlerInstance: (e.args && e.args.isFrozen) ? _this.fHeader\n : (e.args && e.args.renderFrozenRightContent) ? _this.frHeader : _this.header\n });\n }\n if (!Browser.isDevice && e && e.args) {\n if (!_this.focusByClick && e.args.requestType === 'paging' && !_this.parent.pagerModule.pagerObj.checkPagerHasFocus()) {\n _this.skipFocus = false;\n _this.parent.element.focus();\n }\n if (e.args.requestType === 'grouping') {\n _this.skipFocus = true;\n }\n }\n if (e && e.args && e.args.requestType === 'virtualscroll') {\n if (_this.currentInfo.uid) {\n var index_1;\n var bool = e.rows.some(function (row, i) {\n index_1 = i;\n return row.uid === _this.currentInfo.uid;\n });\n if (bool) {\n _this.content.matrix.current[0] = index_1;\n _this.content.matrix.current[1] = _this.parent.getColumnIndexByUid(_this.focusedColumnUid) || 0;\n var focusElement = _this.getContent().getFocusInfo().elementToFocus;\n if (focusElement) {\n var cellPosition = focusElement.getBoundingClientRect();\n var gridPosition = _this.parent.element.getBoundingClientRect();\n if (cellPosition.top >= 0 && cellPosition.left >= 0 &&\n cellPosition.right <= Math.min(gridPosition.right, window.innerWidth ||\n document.documentElement.clientWidth) &&\n cellPosition.bottom <= Math.min(gridPosition.bottom, window.innerHeight ||\n document.documentElement.clientHeight)) {\n _this.isVirtualScroll = true;\n _this.focus();\n }\n }\n }\n }\n else if (e.args.focusElement && e.args.focusElement.classList.contains('e-filtertext')) {\n var focusElement = _this.parent.element.querySelector('#' + e.args.focusElement.id);\n if (focusElement) {\n focusElement.focus();\n }\n }\n }\n if (e && e.args && e.args.requestType === 'infiniteScroll') {\n _this.isInfiniteScroll = true;\n }\n };\n };\n FocusStrategy.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.add(this.parent.element, 'mousedown', this.focusCheck, this);\n EventHandler.add(this.parent.element, 'touchstart', this.focusCheck, this);\n EventHandler.add(this.parent.element, 'focus', this.onFocus, this);\n this.parent.element.addEventListener('focus', this.passiveHandler = function (e) { return _this.passiveFocus(e); }, true);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n this.evtHandlers = [{ event: event.keyPressed, handler: this.onKeyPress },\n { event: event.click, handler: this.onClick },\n { event: event.contentReady, handler: this.refMatrix },\n { event: event.partialRefresh, handler: this.refMatrix },\n { event: event.refreshExpandandCollapse, handler: this.refMatrix },\n { event: event.headerRefreshed, handler: this.refreshMatrix() },\n { event: event.closeEdit, handler: this.restoreFocus },\n { event: event.restoreFocus, handler: this.restoreFocus },\n { event: 'start-edit', handler: this.clearIndicator },\n { event: 'start-add', handler: this.clearIndicator },\n { event: 'sorting-complete', handler: this.restoreFocus },\n { event: 'filtering-complete', handler: this.filterfocus },\n { event: 'grouping-complete', handler: this.restoreFocusWithAction },\n { event: 'ungrouping-complete', handler: this.restoreFocusWithAction },\n { event: event.batchAdd, handler: this.refMatrix },\n { event: event.batchCancel, handler: this.refMatrix },\n { event: event.batchDelete, handler: this.refMatrix },\n { event: event.detailDataBound, handler: this.refMatrix },\n { event: event.onEmpty, handler: this.refMatrix },\n { event: event.cellFocused, handler: this.internalCellFocus }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n };\n FocusStrategy.prototype.filterfocus = function () {\n if (this.parent.filterSettings.type !== 'FilterBar') {\n this.restoreFocus();\n }\n };\n FocusStrategy.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, 'mousedown', this.focusCheck);\n EventHandler.remove(this.parent.element, 'touchstart', this.focusCheck);\n EventHandler.remove(this.parent.element, 'focus', this.onFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n this.parent.element.removeEventListener('focus', this.passiveHandler, true);\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n };\n FocusStrategy.prototype.destroy = function () {\n this.removeEventListener();\n };\n FocusStrategy.prototype.restoreFocus = function () {\n var groupModule = this.parent.groupModule;\n if (this.parent.allowGrouping && groupModule && (groupModule.groupSortFocus || groupModule.groupTextFocus)) {\n groupModule.groupSortFocus = false;\n groupModule.groupTextFocus = false;\n return;\n }\n this.firstHeaderCellClick = true;\n this.addFocus(this.getContent().getFocusInfo());\n };\n FocusStrategy.prototype.restoreFocusWithAction = function (e) {\n if (!this.parent.enableInfiniteScrolling) {\n var matrix = this.getContent().matrix;\n var current = matrix.current;\n switch (e.requestType) {\n case 'grouping':\n case 'ungrouping':\n current[1] = current.length &&\n !this.parent.groupSettings.showGroupedColumn && !isNullOrUndefined(matrix.matrix[current[0]]) ?\n matrix.matrix[current[0]].indexOf(1) : e.requestType === 'grouping' ? current[1] + 1 : current[1] - 1;\n break;\n }\n this.getContent().matrix.current = current;\n var groupModule = this.parent.groupModule;\n if (this.parent.allowGrouping && groupModule && groupModule.groupCancelFocus) {\n var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n if (focusableGroupedItems.length) {\n if (focusableGroupedItems[0].parentElement.getAttribute('ej-mappingname') === e.columnName) {\n focusableGroupedItems[3].focus();\n }\n else {\n focusableGroupedItems[0].focus();\n }\n }\n else {\n groupModule.element.focus();\n }\n groupModule.groupCancelFocus = false;\n return;\n }\n this.addFocus(this.getContent().getFocusInfo());\n }\n };\n FocusStrategy.prototype.clearOutline = function () {\n this.getContent().matrix.current = this.getContent().matrix.get(0, -1, [0, 1], 'downArrow', this.getContent().validator());\n this.clearIndicator();\n };\n FocusStrategy.prototype.clearIndicator = function () {\n if (!this.currentInfo.element || !this.currentInfo.elementToFocus) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focus', 'e-focused']);\n };\n FocusStrategy.prototype.getPrevIndexes = function () {\n var forget = this.forget;\n this.forget = false;\n return forget || !Object.keys(this.prevIndexes).length ? { rowIndex: null, cellIndex: null } : this.prevIndexes;\n };\n FocusStrategy.prototype.forgetPrevious = function () {\n this.forget = true;\n };\n FocusStrategy.prototype.setActiveByKey = function (action, active) {\n var _this = this;\n if (!this.parent.isFrozenGrid() && this.parent.frozenRows === 0) {\n return;\n }\n // eslint-disable-next-line prefer-const\n var info;\n var actions = {\n 'home': function () { return ({ toHeader: !info.isContent, toFrozen: true }); },\n 'end': function () { return ({ toHeader: !info.isContent, toFrozen: false }); },\n 'ctrlHome': function () { return ({ toHeader: true, toFrozen: _this.parent.isFrozenGrid() }); },\n 'ctrlEnd': function () { return ({ toHeader: false, toFrozen: false }); }\n };\n if (!(action in actions)) {\n return;\n }\n info = active.getInfo();\n var swap = actions[\"\" + action]();\n this.setActive(!swap.toHeader, swap.toFrozen);\n this.getContent().matrix.current = active.matrix.current;\n };\n FocusStrategy.prototype.internalCellFocus = function (e) {\n if (!(e.byKey && e.container.isContent && e.keyArgs.action === 'enter'\n && (e.parent.classList.contains('e-detailcell') ||\n e.parent.classList.contains('e-unboundcell')))) {\n return;\n }\n this.clearIndicator();\n var focusEle = this.getContent().getFocusable(this.getFocusedElement());\n this.setFocusedElement(focusEle);\n this.currentInfo.skipAction = true;\n };\n return FocusStrategy;\n}());\nexport { FocusStrategy };\n/**\n * Create matrix from row collection which act as mental model for cell navigation\n *\n * @hidden\n */\nvar Matrix = /** @class */ (function () {\n function Matrix() {\n this.matrix = [];\n this.current = [];\n }\n Matrix.prototype.set = function (rowIndex, columnIndex, allow) {\n rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex, this.columns));\n this.matrix[parseInt(rowIndex.toString(), 10)] = this.matrix[parseInt(rowIndex.toString(), 10)] || [];\n this.matrix[parseInt(rowIndex.toString(), 10)][parseInt(columnIndex.toString(), 10)] = allow ? 1 : 0;\n };\n Matrix.prototype.get = function (rowIndex, columnIndex, navigator, action, validator) {\n var tmp = columnIndex;\n if (rowIndex + navigator[0] < 0) {\n return [rowIndex, columnIndex];\n }\n rowIndex = Math.max(0, Math.min(rowIndex + navigator[0], this.rows));\n var emptyTable = true;\n if (isNullOrUndefined(this.matrix[parseInt(rowIndex.toString(), 10)])) {\n return null;\n }\n columnIndex = Math.max(0, Math.min(columnIndex + navigator[1], this.matrix[parseInt(rowIndex.toString(), 10)].length - 1));\n if (tmp + navigator[1] > this.matrix[parseInt(rowIndex.toString(), 10)].length - 1\n && validator(rowIndex, columnIndex, action)) {\n return [rowIndex, tmp];\n }\n var first = this.first(this.matrix[parseInt(rowIndex.toString(), 10)], columnIndex, navigator, true, action);\n columnIndex = first === null ? tmp : first;\n var val = getValue(rowIndex + \".\" + columnIndex, this.matrix);\n if (rowIndex === this.rows && (action === 'downArrow' || action === 'enter')) {\n navigator[0] = -1;\n }\n if (first === null) {\n for (var i = 0; i < this.rows; i++) {\n if (this.matrix[parseInt(i.toString(), 10)].some(function (v) { return v === 1; })) {\n emptyTable = false;\n break;\n }\n }\n if (emptyTable) {\n rowIndex = this.current.length ? this.current[0] : 0;\n return [rowIndex, columnIndex];\n }\n }\n return this.inValid(val) || !validator(rowIndex, columnIndex, action) ?\n this.get(rowIndex, tmp, navigator, action, validator) : [rowIndex, columnIndex];\n };\n Matrix.prototype.first = function (vector, index, navigator, moveTo, action) {\n if (((index < 0 || index === vector.length) && this.inValid(vector[parseInt(index.toString(), 10)])\n && (action !== 'upArrow' && action !== 'downArrow')) || !vector.some(function (v) { return v === 1; })) {\n return null;\n }\n return !this.inValid(vector[parseInt(index.toString(), 10)]) ? index :\n this.first(vector, (['upArrow', 'downArrow', 'shiftUp', 'shiftDown'].indexOf(action) !== -1) ? moveTo ? 0 : ++index : index + navigator[1], navigator, false, action);\n };\n Matrix.prototype.select = function (rowIndex, columnIndex) {\n rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex, this.matrix[parseInt(rowIndex.toString(), 10)].length - 1));\n this.current = [rowIndex, columnIndex];\n };\n Matrix.prototype.generate = function (rows, selector, isRowTemplate) {\n this.rows = rows.length - 1;\n this.matrix = [];\n for (var i = 0; i < rows.length; i++) {\n var cells = rows[parseInt(i.toString(), 10)].cells.filter(function (c) { return c.isSpanned !== true; });\n this.columns = Math.max(cells.length - 1, this.columns | 0);\n var incrementNumber = 0;\n for (var j = 0; j < cells.length; j++) {\n if (cells[parseInt(j.toString(), 10)].column && cells[parseInt(j.toString(), 10)].column.columns) {\n incrementNumber = this.columnsCount(cells[parseInt(j.toString(), 10)].column.columns, incrementNumber);\n }\n else {\n incrementNumber++;\n }\n this.set(i, j, rows[parseInt(i.toString(), 10)].visible === false ?\n false : selector(rows[parseInt(i.toString(), 10)], cells[parseInt(j.toString(), 10)], isRowTemplate));\n }\n this.columns = Math.max(incrementNumber - 1, this.columns | 0);\n }\n return this.matrix;\n };\n Matrix.prototype.columnsCount = function (rowColumns, currentColumnCount) {\n var columns = rowColumns;\n var incrementNumber = currentColumnCount;\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n incrementNumber = this.columnsCount(columns[parseInt(i.toString(), 10)].columns, incrementNumber);\n }\n else {\n incrementNumber++;\n }\n }\n return incrementNumber;\n };\n Matrix.prototype.inValid = function (value) {\n return value === 0 || value === undefined;\n };\n return Matrix;\n}());\nexport { Matrix };\n/**\n * @hidden\n */\nvar ContentFocus = /** @class */ (function () {\n function ContentFocus(parent) {\n var _this = this;\n this.matrix = new Matrix();\n this.lastIdxCell = false;\n this.parent = parent;\n this.keyActions = {\n 'rightArrow': [0, 1],\n 'tab': [0, 1],\n 'leftArrow': [0, -1],\n 'shiftTab': [0, -1],\n 'upArrow': [-1, 0],\n 'downArrow': [1, 0],\n 'shiftUp': [-1, 0],\n 'shiftDown': [1, 0],\n 'shiftRight': [0, 1],\n 'shiftLeft': [0, -1],\n 'enter': [1, 0],\n 'shiftEnter': [-1, 0]\n };\n this.indexesByKey = function (action) {\n var opt = {\n 'home': [_this.matrix.current[0], -1, 0, 1],\n 'end': [_this.matrix.current[0], _this.matrix.columns + 1, 0, -1],\n 'ctrlHome': [0, -1, 0, 1],\n 'ctrlEnd': [_this.matrix.rows, _this.matrix.columns + 1, 0, -1]\n };\n return opt[\"\" + action] || null;\n };\n }\n ContentFocus.prototype.getTable = function () {\n return (this.parent.isFrozenGrid() ?\n this.parent.getContent().querySelector('.e-movablecontent .e-table') :\n this.parent.getContentTable());\n };\n ContentFocus.prototype.onKeyPress = function (e) {\n var navigator = this.keyActions[e.action];\n var current = this.getCurrentFromAction(e.action, navigator, e.action in this.keyActions, e);\n if (!current) {\n return;\n }\n if (((['tab', 'shiftTab'].indexOf(e.action) > -1 && this.matrix.current || []).toString() === current.toString())\n || (this.parent.allowPaging && !this.parent.pagerModule.pagerObj.checkPagerHasFocus()\n && this.matrix.current[0] === this.matrix.rows && ((this.parent.editSettings.mode === 'Batch'\n && this.parent.editSettings.allowAdding && e.keyCode === 40) || (e.keyCode === 40)))) {\n if (current.toString() === [this.matrix.rows, this.matrix.columns].toString() ||\n current.toString() === [0, 0].toString() || (this.matrix.current[0] === this.matrix.rows &&\n this.matrix.current.toString() === current.toString()) || (this.parent.allowGrouping &&\n this.parent.infiniteScrollSettings.enableCache && current.toString() === [0, 1].toString())) {\n return false;\n }\n else {\n current = this.editNextRow(current[0], current[1], e.action);\n }\n }\n this.matrix.select(current[0], current[1]);\n };\n ContentFocus.prototype.editNextRow = function (rowIndex, cellIndex, action) {\n var gObj = this.parent;\n var editNextRow = gObj.editSettings.allowNextRowEdit && (gObj.isEdit || gObj.isLastCellPrimaryKey);\n var visibleIndex = gObj.getColumnIndexByField(gObj.getVisibleColumns()[0].field);\n var cell = this.getTable().rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)];\n if (action === 'tab' && editNextRow) {\n rowIndex++;\n var index = (this.getTable().rows[parseInt(rowIndex.toString(), 10)].getElementsByClassName('e-indentcell').length +\n this.getTable().rows[parseInt(rowIndex.toString(), 10)].getElementsByClassName('e-detailrowcollapse').length);\n cellIndex = visibleIndex + index;\n }\n if (action === 'shiftTab' && editNextRow) {\n rowIndex--;\n cellIndex = gObj.getColumnIndexByField(gObj.getVisibleColumns()[gObj.getVisibleColumns().length - 1].field);\n }\n return !cell.classList.contains(literals.rowCell) && !cell.classList.contains('e-headercell') &&\n !cell.classList.contains('e-groupcaption') && !cell.classList.contains('e-filterbarcell') ?\n this.editNextRow(rowIndex, cellIndex, action) : [rowIndex, cellIndex];\n };\n ContentFocus.prototype.getCurrentFromAction = function (action, navigator, isPresent, e) {\n if (navigator === void 0) { navigator = [0, 0]; }\n if (!isPresent && !this.indexesByKey(action) || (this.matrix.current.length === 0)) {\n return null;\n }\n if (!this.shouldFocusChange(e)) {\n return this.matrix.current;\n }\n // eslint-disable-next-line\n var _a = this.indexesByKey(action) || this.matrix.current.concat(navigator), rowIndex = _a[0], cellIndex = _a[1], rN = _a[2], cN = _a[3];\n if (this.parent.allowGrouping && this.parent.groupSettings.columns.length && this.parent.aggregates.length && action === 'enter') {\n for (var i = rowIndex; i < this.matrix.matrix.length; i++) {\n var row = this.getTable().rows[i + 1];\n if (row && row.cells[parseInt(cellIndex.toString(), 10)] && row.cells[parseInt(cellIndex.toString(), 10)].classList.contains('e-rowcell')) {\n return [i + 1, cellIndex];\n }\n if (i === this.matrix.matrix.length - 1) {\n return [rowIndex, cellIndex];\n }\n }\n }\n if (action === 'ctrlEnd' || action === 'end') {\n var lastContentCellIndex = [this.matrix.matrix.length - 1,\n this.matrix.matrix[this.matrix.matrix.length - 1].length - 1];\n if (action === 'end') {\n lastContentCellIndex = [rowIndex, this.matrix.matrix[parseInt(rowIndex.toString(), 10)].length - 1];\n }\n if (this.matrix.matrix[lastContentCellIndex[0]][lastContentCellIndex[1]] === 0) {\n lastContentCellIndex = findCellIndex(this.matrix.matrix, lastContentCellIndex, false);\n }\n rowIndex = lastContentCellIndex[0];\n cellIndex = lastContentCellIndex[1] + 1;\n }\n var current = this.matrix.get(rowIndex, cellIndex, [rN, cN], action, this.validator());\n return current;\n };\n ContentFocus.prototype.onClick = function (e, force) {\n var target = e.target;\n this.target = target;\n target = (target.classList.contains(literals.rowCell) ? target : closest(target, 'td'));\n target = target ? target : closest(e.target, 'td.e-detailrowcollapse')\n || closest(e.target, 'td.e-detailrowexpand');\n target = closest(e.target, 'td.e-detailcell') ?\n isNullOrUndefined(closest(closest(e.target, '.e-grid'), 'td.e-detailcell')) ? null : target : target;\n target = target && closest(target, 'table').classList.contains(literals.table) ? target : null;\n if (!target) {\n return false;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var _b = this.matrix.current, oRowIndex = _b[0], oCellIndex = _b[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val) || (!force && oRowIndex === rowIndex && oCellIndex === cellIndex) ||\n (!parentsUntil(e.target, literals.rowCell) && !parentsUntil(e.target, 'e-groupcaption')\n && !parentsUntil(e.target, 'e-recordpluscollapse') && !parentsUntil(e.target, 'e-recordplusexpand')\n && !parentsUntil(e.target, 'e-detailrowcollapse') && !parentsUntil(e.target, 'e-detailrowexpand')\n && !parentsUntil(e.target, 'e-templatecell'))) {\n return false;\n }\n this.matrix.select(rowIndex, cellIndex);\n };\n ContentFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n this.matrix.current = [rowIndex, cellIndex];\n info.element = !isNullOrUndefined(this.getTable().rows[parseInt(rowIndex.toString(), 10)]) ?\n this.getTable().rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)] : null;\n if (!info.element) {\n return info;\n }\n info.elementToFocus = !info.element.classList.contains('e-unboundcell') && !info.element.classList.contains('e-detailcell')\n ? this.getFocusable(info.element) : info.element;\n info.elementToFocus = info.element.classList.contains('e-detailcell') && info.element.querySelector('.e-childgrid')\n ? info.element.querySelector('.e-childgrid') : info.elementToFocus;\n info.outline = true;\n info.uid = info.element.parentElement.getAttribute('data-uid');\n return info;\n };\n ContentFocus.prototype.getFocusable = function (element) {\n var query = 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n var isTemplate = !isNullOrUndefined(closest(element, '.e-templatecell'));\n if (this.parent.isEdit) {\n query = 'input:not([type=\"hidden\"]), select:not([aria-hidden=\"true\"]), textarea';\n }\n var child = [].slice.call(element.querySelectorAll(query));\n /* Select the first focusable child element\n * if no child found then select the cell itself.\n * if Grid is in editable state, check for editable control inside child.\n */\n return child.length ? isTemplate && child.length > 1 ? this.target ? this.target : element : child[0] : element;\n };\n ContentFocus.prototype.selector = function (row, cell, isRowTemplate) {\n var types = [CellType.Expand, CellType.GroupCaption, CellType.CaptionSummary, CellType.GroupSummary];\n return ((row.isDataRow && cell.visible && (cell.isDataCell || cell.isTemplate))\n || (row.isDataRow && cell.cellType === CellType.DetailExpand && isNullOrUndefined(cell.visible))\n || (!row.isDataRow && types.indexOf(cell.cellType) > -1\n && !((cell.cellType === CellType.GroupSummary || cell.cellType === CellType.CaptionSummary)\n && !(cell.isDataCell && cell.visible)))\n || (cell.column && cell.visible && cell.column.type === 'checkbox')\n || (cell.cellType === CellType.CommandColumn)\n || (row.isDataRow && isRowTemplate))\n && !(row.edit === 'delete' && row.isDirty);\n };\n ContentFocus.prototype.nextRowFocusValidate = function (index) {\n var lastIndex = index;\n for (var i = index, len = this.matrix.rows; i <= len; i++) {\n if (this.matrix.matrix[parseInt(index.toString(), 10)].indexOf(1) === -1) {\n index = index + 1;\n }\n else {\n return index;\n }\n }\n this.lastIdxCell = true;\n return lastIndex;\n };\n ContentFocus.prototype.previousRowFocusValidate = function (index) {\n var firstIndex = index;\n for (var i = index, len = 0; i >= len; i--) {\n if (this.matrix.matrix[parseInt(index.toString(), 10)].indexOf(1) === -1) {\n index = index - 1;\n if (index < 0) {\n this.lastIdxCell = true;\n return firstIndex;\n }\n }\n else {\n return index;\n }\n }\n return firstIndex;\n };\n ContentFocus.prototype.jump = function (action, current) {\n var frozenSwap = (this.parent.getFrozenLeftCount() &&\n ((action === 'leftArrow' || action === 'shiftTab') && current[1] === 0))\n || (current[0] < this.matrix.matrix.length - 1 && action === 'tab' && this.parent.getFrozenMode() === 'Left'\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1));\n var right = ((action === 'rightArrow' || action === 'tab')\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1))\n || (action === 'shiftTab' && this.parent.getFrozenMode() === 'Right'\n && current[1] === this.matrix.matrix[current[0]].indexOf(1));\n var frSwap = this.parent.getFrozenMode() === literals.leftRight && right;\n if (this.parent.getFrozenMode() === 'Right') {\n frozenSwap = right;\n }\n this.lastIdxCell = false;\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n var headerSwap = ((action === 'upArrow' || enterFrozen) && current[0] === 0)\n || (action === 'shiftTab' && this.parent.getFrozenMode() === 'Right' && current[0] === 0\n && current[1] === this.matrix.matrix[current[0]].indexOf(1));\n if (!this.parent.isFrozenGrid() && action === 'tab' &&\n current[1] === this.matrix.matrix[current[0]].lastIndexOf(1) && this.matrix.matrix.length - 1 !== current[0]) {\n this.matrix.current[0] = this.nextRowFocusValidate(this.matrix.current[0] + 1);\n this.matrix.current[1] = -1;\n frozenSwap = this.parent.isFrozenGrid();\n }\n if (!this.parent.isFrozenGrid() && action === 'shiftTab' &&\n current[0] !== 0 && this.matrix.matrix[current[0]].indexOf(1) === current[1]) {\n this.matrix.current[0] = this.previousRowFocusValidate(this.matrix.current[0] - 1);\n this.matrix.current[1] = this.matrix.matrix[current[0]].length;\n }\n var isHeaderFocus = false;\n var row = document.activeElement.parentElement;\n if ((this.parent.enableVirtualization || this.parent.infiniteScrollSettings.enableCache)\n && row.classList.contains(literals.row)) {\n var rowIndex = parseInt(row.getAttribute(literals.dataRowIndex), 10);\n isHeaderFocus = rowIndex > 0;\n }\n if (action === 'shiftTab' && this.parent.getFrozenMode() === 'Right' && current[0] === 0\n && current[1] === this.matrix.matrix[current[0]].indexOf(1)) {\n this.matrix.current[0] = -1;\n }\n var info = {\n swap: !isHeaderFocus ? ((action === 'upArrow' || enterFrozen) && current[0] === 0) || frozenSwap || frSwap : false,\n toHeader: headerSwap,\n toFrozen: frozenSwap,\n toFrozenRight: frSwap\n };\n return info;\n };\n ContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current = [];\n if (this.parent.getFrozenMode() === 'Right' || this.parent.getFrozenMode() === literals.leftRight) {\n if (action === 'leftArrow' || action === 'shiftTab') {\n current[0] = previous[0];\n current[1] = this.matrix.matrix[current[0]].length;\n }\n if (this.parent.getFrozenMode() === literals.leftRight && (action === 'rightArrow' || action === 'tab')) {\n current[0] = previous[0];\n current[1] = -1;\n }\n if (this.parent.getFrozenMode() === 'Right' && action === 'tab') {\n current[0] = previous[0] + 1;\n current[1] = -1;\n }\n }\n else if (action === 'rightArrow' || action === 'tab') {\n current[0] = previous[0];\n current[1] = -1;\n }\n if (action === 'downArrow' || action === 'enter') {\n current[0] = -1;\n current[1] = previous[1];\n }\n if (action === 'shiftTab' && this.parent.getFrozenMode() === 'Left') {\n current[0] = previous[0] - 1;\n current[1] = this.matrix.matrix[current[0]].length;\n }\n return current;\n };\n ContentFocus.prototype.generateRows = function (rows, optionals) {\n var _a;\n var matrix = optionals.matrix, handlerInstance = optionals.handlerInstance;\n var len = handlerInstance.matrix.matrix.length;\n var defaultLen = this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar' ? len + 1 : len;\n handlerInstance.matrix.matrix = handlerInstance.matrix.matrix.slice(0, defaultLen); //Header matrix update.\n handlerInstance.matrix.rows = defaultLen;\n (_a = handlerInstance.matrix.matrix).push.apply(_a, matrix);\n handlerInstance.matrix.rows += matrix.length;\n };\n ContentFocus.prototype.getInfo = function (e) {\n var info = this.getFocusInfo();\n var _a = this.matrix.current, rIndex = _a[0], cIndex = _a[1];\n var isData = info.element.classList.contains(literals.rowCell);\n var isSelectable = isData || (e && e.action !== 'enter' && (info.element.classList.contains('e-detailrowcollapse')\n || info.element.classList.contains('e-detailrowexpand')));\n // eslint-disable-next-line\n var _b = [Math.min(parseInt(info.element.parentElement.getAttribute(literals.dataRowIndex), 10), rIndex),\n Math.min(parseInt(info.element.getAttribute(literals.dataColIndex), 10), cIndex)], rowIndex = _b[0], cellIndex = _b[1];\n if (this.parent.allowGrouping && this.parent.groupSettings.enableLazyLoading && isData) {\n rowIndex = this.parent.getDataRows().indexOf(info.element.parentElement);\n }\n return { isContent: true, isDataCell: isData, indexes: [rowIndex, cellIndex], isSelectable: isSelectable };\n };\n ContentFocus.prototype.validator = function () {\n var table = this.getTable();\n return function (rowIndex, cellIndex, action) {\n if (!isNullOrUndefined(table.rows[parseInt(rowIndex.toString(), 10)])) {\n var cell = void 0;\n cellIndex = table.querySelector('.e-emptyrow') ? 0 : cellIndex;\n if (table.rows[parseInt(rowIndex.toString(), 10)].cells[0].classList.contains('e-editcell')) {\n cell = table.rows[parseInt(rowIndex.toString(), 10)].cells[0].querySelectorAll('td')[parseInt(cellIndex.toString(), 10)];\n }\n else {\n cell = table.rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)];\n }\n var isCellWidth = cell.getBoundingClientRect().width !== 0;\n if (action === 'enter' || action === 'shiftEnter') {\n return isCellWidth && cell.classList.contains(literals.rowCell);\n }\n if ((action === 'shiftUp' || action === 'shiftDown') && cell.classList.contains(literals.rowCell)) {\n return isCellWidth;\n }\n else if (action !== 'shiftUp' && action !== 'shiftDown') {\n return isCellWidth;\n }\n }\n return false;\n };\n };\n ContentFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, _b = _a[0], rIndex = _b === void 0 ? -1 : _b, _c = _a[1], cIndex = _c === void 0 ? -1 : _c;\n if (rIndex < 0 || cIndex < 0) {\n return true;\n }\n var cell = getValue(rIndex + \".cells.\" + cIndex, this.getTable().rows);\n if (!cell) {\n return true;\n }\n return e.action === 'enter' || e.action === 'shiftEnter' ?\n cell.classList.contains(literals.rowCell) && !cell.classList.contains('e-unboundcell')\n || cell.classList.contains('e-editedbatchcell') && !cell.classList.contains('e-detailcell') : true;\n };\n ContentFocus.prototype.getGridSeletion = function () {\n return this.parent.allowSelection && this.parent.selectionSettings.allowColumnSelection;\n };\n return ContentFocus;\n}());\nexport { ContentFocus };\n/**\n * @hidden\n */\nvar HeaderFocus = /** @class */ (function (_super) {\n __extends(HeaderFocus, _super);\n function HeaderFocus(parent) {\n return _super.call(this, parent) || this;\n }\n HeaderFocus.prototype.getTable = function () {\n return (this.parent.isFrozenGrid() ?\n this.parent.getHeaderContent().querySelector('.e-movableheader .e-table') :\n this.parent.getHeaderTable());\n };\n HeaderFocus.prototype.onClick = function (e) {\n var target = e.target;\n this.target = target;\n target = (target.classList.contains('e-headercell') ? target : closest(target, 'th'));\n if (!target && this.parent.frozenRows !== 0) {\n target = (e.target.classList.contains(literals.rowCell) ? e.target :\n closest(e.target, 'td'));\n }\n if (e.target.classList.contains('e-columnheader') ||\n e.target.querySelector('.e-stackedheadercell')) {\n return false;\n }\n if (!target) {\n return;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val)) {\n return false;\n }\n this.matrix.select(target.parentElement.rowIndex, target.cellIndex);\n };\n HeaderFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n info.element = this.getTable().rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)];\n if (!isNullOrUndefined(info.element)) {\n info.elementToFocus = this.getFocusable(info.element);\n info.outline = !info.element.classList.contains('e-filterbarcell');\n }\n return info;\n };\n HeaderFocus.prototype.selector = function (row, cell) {\n return (cell.visible && (cell.column.field !== undefined || cell.isTemplate || !isNullOrUndefined(cell.column.template)\n || !isNullOrUndefined(cell.column.commands))) || cell.column.type === 'checkbox' || cell.cellType === CellType.StackedHeader;\n };\n HeaderFocus.prototype.jump = function (action, current) {\n var frozenSwap = (this.parent.getFrozenLeftCount() &&\n (action === 'leftArrow' || (action === 'shiftLeft' && this.getGridSeletion()) || action === 'shiftTab') && (current[1] === 0\n || current[1] === this.matrix.matrix[current[0]].indexOf(1))) || (this.parent.getFrozenMode() === 'Left' && action === 'tab'\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1));\n var right = ((action === 'rightArrow' || (action === 'shiftRight' && this.getGridSeletion())\n || action === 'tab') && (current[1] === this.matrix.columns || current[1] === this.matrix.matrix[current[0]].lastIndexOf(1)))\n || (current[0] > 0 && action === 'shiftTab' && this.parent.getFrozenMode() === 'Right'\n && current[1] === this.matrix.matrix[current[0]].indexOf(1));\n var frSwap = this.parent.getFrozenMode() === literals.leftRight && right;\n if (this.parent.getFrozenMode() === 'Right') {\n frozenSwap = right;\n }\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n var isLastCell;\n var lastRow;\n var headerSwap = frozenSwap && !(this.parent.getFrozenMode() === 'Left' && action === 'tab'\n && current[0] === this.matrix.matrix.length - 1) || frSwap;\n var fMatrix = this.parent.focusModule.fHeader && this.parent.focusModule.fHeader.matrix.matrix;\n var isPresent = fMatrix && !isNullOrUndefined(fMatrix[current[0]]);\n if (this.parent.enableHeaderFocus && action === 'tab') {\n lastRow = this.matrix.matrix.length - 1 === current[0];\n isLastCell = current[1] === this.matrix.matrix[current[0]].lastIndexOf(1);\n if (isLastCell) {\n if (!lastRow) {\n this.matrix.current[0] = this.matrix.current[0] + 1;\n }\n else {\n this.matrix.current[0] = 0;\n }\n this.matrix.current[1] = -1;\n }\n if (this.parent.isFrozenGrid() && lastRow && isLastCell) {\n frozenSwap = true;\n headerSwap = false;\n }\n }\n if (action === 'tab' && this.parent.getFrozenMode() === 'Left' && current[0] === this.matrix.matrix.length - 1\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1)) {\n this.matrix.current[0] = -1;\n }\n return {\n swap: ((action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1) ||\n (isPresent && (frozenSwap || frSwap)) || (action === 'tab' && lastRow && isLastCell),\n toHeader: headerSwap,\n toFrozen: frozenSwap,\n toFrozenRight: frSwap\n };\n };\n HeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current1 = [];\n if (this.parent.getFrozenMode() === 'Right' || this.parent.getFrozenMode() === literals.leftRight) {\n if (action === 'leftArrow' || (action === 'shiftLeft' && this.getGridSeletion()) || action === 'shiftTab') {\n current1[0] = previous[0];\n current1[1] = this.matrix.matrix[current1[0]].length;\n }\n if (this.parent.getFrozenMode() === literals.leftRight\n && (action === 'rightArrow' || (action === 'shiftRight' && this.getGridSeletion()) || action === 'tab')) {\n current1[0] = previous[0];\n current1[1] = -1;\n }\n }\n else if (action === 'rightArrow' || (action === 'shiftRight' && this.getGridSeletion()) || action === 'tab') {\n current1[0] = previous[0];\n current1[1] = -1;\n }\n if (action === 'upArrow' || action === 'shiftEnter') {\n current1[0] = this.matrix.matrix.length;\n current1[1] = previous[1];\n }\n if (this.parent.getFrozenMode() === 'Left' && action === 'shiftTab') {\n current1[0] = previous[0] === -1 ? this.matrix.matrix.length - 1 : previous[0] - 1;\n current1[1] = this.matrix.matrix[current1[0]].length;\n }\n if (this.parent.getFrozenMode() === 'Right' && action === 'tab') {\n current1[0] = previous[0] + 1;\n current1[1] = -1;\n }\n return current1;\n };\n HeaderFocus.prototype.generateRows = function (rows) {\n var length = this.matrix.matrix.length;\n if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar') {\n this.matrix.rows = ++this.matrix.rows;\n var cells = rows[0].cells;\n var incrementNumber = 0;\n var headerTable = this.getHeaderType() === 'FixedHeaderFocus' && this.parent.getFrozenMode() !== 'Right' ? literals.frozenLeft :\n this.getHeaderType() === 'FixedHeaderFocus' || this.getHeaderType() === 'FixedRightHeaderFocus' ? literals.frozenRight : 'movable';\n for (var i = 0; i < cells.length; i++) {\n if (cells[parseInt(i.toString(), 10)].column && cells[parseInt(i.toString(), 10)].column.columns) {\n incrementNumber = this.checkFilterColumn(cells[parseInt(i.toString(), 10)].column.columns, length, incrementNumber, headerTable);\n }\n else {\n if (!this.parent.isFrozenGrid() || (this.parent.isFrozenGrid()\n && cells[parseInt(i.toString(), 10)].column.freezeTable === headerTable)) {\n this.matrix.set(length, incrementNumber, cells[parseInt(i.toString(), 10)].visible && cells[parseInt(i.toString(), 10)].column.allowFiltering !== false);\n incrementNumber++;\n }\n }\n }\n }\n };\n HeaderFocus.prototype.checkFilterColumn = function (rowColumns, rowIndex, columnIndex, headerTable) {\n var columns = rowColumns;\n var incrementNumber = columnIndex;\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n incrementNumber = this.checkFilterColumn(columns[parseInt(i.toString(), 10)].columns, rowIndex, incrementNumber, headerTable);\n }\n else {\n if (!this.parent.isFrozenGrid() || (this.parent.isFrozenGrid()\n && columns[parseInt(i.toString(), 10)].freezeTable === headerTable)) {\n this.matrix.set(rowIndex, incrementNumber, columns[parseInt(i.toString(), 10)].visible && columns[parseInt(i.toString(), 10)].allowFiltering !== false);\n incrementNumber++;\n }\n }\n }\n return incrementNumber;\n };\n HeaderFocus.prototype.getInfo = function (e) {\n return extend(_super.prototype.getInfo.call(this, e), { isContent: false, isHeader: true });\n };\n HeaderFocus.prototype.validator = function () {\n return function () { return true; };\n };\n HeaderFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, rowIndex = _a[0], columnIndex = _a[1];\n if (rowIndex < 0 || columnIndex < 0) {\n return true;\n }\n var cell = getValue(rowIndex + \".cells.\" + columnIndex, this.getTable().rows);\n if (!cell) {\n return true;\n }\n return e.action === 'enter' || e.action === 'altDownArrow' ? !cell.classList.contains('e-headercell') : true;\n };\n HeaderFocus.prototype.getHeaderType = function () {\n return 'HeaderFocus';\n };\n return HeaderFocus;\n}(ContentFocus));\nexport { HeaderFocus };\nvar FixedContentFocus = /** @class */ (function (_super) {\n __extends(FixedContentFocus, _super);\n function FixedContentFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedContentFocus.prototype.getTable = function () {\n return this.parent.getContent().querySelector('.e-frozencontent .e-table');\n };\n FixedContentFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n var toHeader = ((action === 'upArrow' || enterFrozen) && current[0] === 0)\n || (action === 'shiftTab' && this.parent.getFrozenMode() !== 'Right'\n && current[0] === 0 && current[1] === this.matrix.matrix[current[0]].indexOf(1));\n var fSwap = (action === 'upArrow' || enterFrozen) && current[0] === 0;\n var frSwap = action === 'shiftTab' && this.parent.getFrozenMode() === literals.leftRight\n && current[1] === this.matrix.matrix[current[0]].indexOf(1);\n if (this.parent.getFrozenMode() === 'Right') {\n var swap = toHeader || ((action === 'shiftTab' || action === 'leftArrow') && current[1] === 0)\n || (action === 'tab' && current[0] < this.matrix.matrix.length - 1\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1));\n return { swap: swap, toHeader: toHeader, toFrozen: fSwap };\n }\n if (action === 'shiftTab' && current[0] === 0 && current[1] === this.matrix.matrix[current[0]].indexOf(1)) {\n this.matrix.current[0] = -1;\n }\n return {\n swap: toHeader || ((action === 'tab' || action === 'rightArrow')\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1))\n || (action === 'shiftTab' && current[1] === this.matrix.matrix[current[0]].indexOf(1)),\n toHeader: toHeader,\n toFrozen: fSwap,\n toFrozenRight: frSwap\n };\n };\n FixedContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current2 = [];\n if (this.parent.getFrozenMode() === 'Right') {\n if (action === 'rightArrow' || action === 'tab') {\n current2[0] = previous[0];\n current2[1] = -1;\n }\n if (action === 'shiftTab') {\n current2[0] = previous[0] - 1;\n current2[1] = this.matrix.matrix[current2[0]].length;\n }\n }\n else {\n if (action === 'tab' && this.parent.enableHeaderFocus) {\n current2[0] = previous[0];\n current2[1] = -1;\n }\n if (action === 'leftArrow' || action === 'shiftTab') {\n current2[0] = previous[0];\n current2[1] = this.matrix.matrix[previous[0]].length;\n }\n }\n if (action === 'downArrow' || action === 'enter') {\n current2[0] = -1;\n current2[1] = previous[1];\n }\n if (action === 'tab' && this.parent.getFrozenMode() !== 'Right') {\n current2[0] = previous[0] + 1;\n current2[1] = -1;\n }\n return current2;\n };\n return FixedContentFocus;\n}(ContentFocus));\nexport { FixedContentFocus };\nvar FixedHeaderFocus = /** @class */ (function (_super) {\n __extends(FixedHeaderFocus, _super);\n function FixedHeaderFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedHeaderFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n var hMatrix = this.parent.focusModule.header && this.parent.focusModule.header.matrix.matrix;\n var isPresent = hMatrix && !isNullOrUndefined(hMatrix[current[0]]);\n if (this.parent.getFrozenMode() === 'Right') {\n var frSwap_1 = ((action === 'leftArrow' || (action === 'shiftLeft' && this.getGridSeletion())\n || action === 'shiftTab') && (current[1] === 0 || current[1] === this.matrix.matrix[current[0]].indexOf(1)))\n || (current[0] < this.matrix.matrix.length - 1 && action === 'tab'\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1));\n var swap = ((action === 'downArrow' || enterFrozen || (action === 'tab'\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1))) && current[0] === this.matrix.matrix.length - 1) ||\n (isPresent && frSwap_1);\n var toFrozen = (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1;\n if (action === 'tab' && current[0] === this.matrix.matrix.length - 1\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1)) {\n this.matrix.current[0] = -1;\n }\n return { swap: swap, toHeader: frSwap_1, toFrozen: toFrozen };\n }\n var frSwap = current[0] > 0 && action === 'shiftTab' && this.parent.getFrozenMode() === literals.leftRight\n && current[1] === this.matrix.matrix[current[0]].indexOf(1);\n return {\n swap: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1 || ((action === 'rightArrow' ||\n (action === 'shiftRight' && this.getGridSeletion()) || action === 'tab') &&\n (current[1] === this.matrix.columns || current[1] === this.matrix.matrix[current[0]].lastIndexOf(1)) && isPresent)\n || (action === 'tab' && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1))\n || (action === 'shiftTab' && current[1] === this.matrix.matrix[current[0]].indexOf(1) && current[0] > 0),\n toHeader: (action === 'rightArrow' || (action === 'shiftRight' && this.getGridSeletion()) || action === 'tab') &&\n (current[1] === this.matrix.columns || current[1] === this.matrix.matrix[current[0]].lastIndexOf(1))\n || (action === 'tab' && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1))\n || (action === 'shiftTab' && current[1] === this.matrix.matrix[current[0]].indexOf(1) && current[0] > 0),\n toFrozen: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1,\n toFrozenRight: frSwap\n };\n };\n FixedHeaderFocus.prototype.getTable = function () {\n return (this.parent.getHeaderContent().querySelector('.e-frozenheader .e-table'));\n };\n FixedHeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current3 = [];\n if (this.parent.getFrozenMode() === 'Right') {\n if (action === 'rightArrow' || (action === 'shiftRight' && this.getGridSeletion()) || action === 'tab') {\n current3[0] = previous[0];\n current3[1] = -1;\n }\n if (action === 'shiftTab') {\n current3[0] = previous[0] === -1 ? this.matrix.matrix.length - 1 : previous[0] - 1;\n current3[1] = this.matrix.matrix[current3[0]].length;\n }\n }\n else {\n if (action === 'leftArrow' || (action === 'shiftLeft' && this.getGridSeletion()) || action === 'shiftTab') {\n current3[0] = previous[0];\n current3[1] = this.matrix.matrix[current3[0]].length;\n }\n }\n if (action === 'upArrow' || action === 'shiftEnter') {\n current3[0] = this.matrix.matrix.length;\n current3[1] = previous[1];\n }\n if (action === 'tab' && this.parent.getFrozenMode() !== 'Right') {\n current3[0] = previous[0] + 1;\n current3[1] = -1;\n }\n return current3;\n };\n FixedHeaderFocus.prototype.getHeaderType = function () {\n return 'FixedHeaderFocus';\n };\n return FixedHeaderFocus;\n}(HeaderFocus));\nexport { FixedHeaderFocus };\n/** @hidden */\nvar SearchBox = /** @class */ (function () {\n function SearchBox(searchBox) {\n this.searchBox = searchBox;\n }\n SearchBox.prototype.searchFocus = function (args) {\n args.target.parentElement.classList.add('e-input-focus');\n if (args.target.classList.contains('e-input') && args.target.classList.contains('e-search') && args.target.value) {\n var sIcon = args.target.parentElement.querySelector('.e-sicon');\n sIcon.classList.add('e-clear-icon');\n sIcon.setAttribute('title', 'Clear');\n (sIcon).style.cursor = 'pointer';\n }\n };\n SearchBox.prototype.searchBlur = function (args) {\n var relatedTarget = args.relatedTarget ? args.relatedTarget : null;\n if (relatedTarget && relatedTarget.classList.contains('e-sicon')) {\n if (relatedTarget.classList.contains('e-clear-icon')) {\n args.target.parentElement.classList.remove('e-input-focus');\n }\n }\n else {\n args.target.parentElement.classList.remove('e-input-focus');\n }\n if (args.target.classList.contains('e-search') && relatedTarget && !(relatedTarget.classList.contains('e-sicon e-clear-icon'))\n && !(relatedTarget.classList.contains('e-sicon'))) {\n var sIcon = args.target.parentElement.querySelector('.e-sicon');\n sIcon.classList.remove('e-clear-icon');\n sIcon.removeAttribute('title');\n sIcon.style.cursor = 'default';\n }\n };\n SearchBox.prototype.wireEvent = function () {\n if (this.searchBox) {\n EventHandler.add(this.searchBox, 'focus', this.searchFocus, this);\n EventHandler.add(this.searchBox, 'blur', this.searchBlur, this);\n }\n };\n SearchBox.prototype.unWireEvent = function () {\n if (this.searchBox) {\n EventHandler.remove(this.searchBox, 'focus', this.searchFocus);\n EventHandler.remove(this.searchBox, 'blur', this.searchBlur);\n }\n };\n return SearchBox;\n}());\nexport { SearchBox };\nvar FixedRightContentFocus = /** @class */ (function (_super) {\n __extends(FixedRightContentFocus, _super);\n function FixedRightContentFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedRightContentFocus.prototype.getTable = function () {\n return this.parent.getContent().querySelector('.e-frozen-right-content .e-table');\n };\n FixedRightContentFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n var toHeader = (action === 'upArrow' || enterFrozen) && current[0] === 0;\n var toFrozenSwap = this.parent.getFrozenMode() === literals.leftRight && action === 'tab'\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1);\n return {\n swap: toHeader || ((action === 'shiftTab' || action === 'leftArrow') && current[1] === 0)\n || (action === 'tab' && current[0] < this.matrix.matrix.length - 1\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1)),\n toHeader: toHeader,\n toFrozenRight: toHeader,\n toFrozen: toFrozenSwap\n };\n };\n FixedRightContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current2 = [];\n if (action === 'rightArrow' || action === 'tab') {\n current2[0] = previous[0];\n current2[1] = -1;\n }\n if (action === 'downArrow' || action === 'enter') {\n current2[0] = -1;\n current2[1] = previous[1];\n }\n if (action === 'shiftTab') {\n current2[0] = previous[0] - 1;\n current2[1] = this.matrix.matrix[current2[0]].length;\n }\n return current2;\n };\n return FixedRightContentFocus;\n}(ContentFocus));\nexport { FixedRightContentFocus };\nvar FixedRightHeaderFocus = /** @class */ (function (_super) {\n __extends(FixedRightHeaderFocus, _super);\n function FixedRightHeaderFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedRightHeaderFocus.prototype.jump = function (action, current) {\n var headerMat = this.parent.focusModule.header && this.parent.focusModule.header.matrix.matrix;\n var isPresent = headerMat && !isNullOrUndefined(headerMat[current[0]]);\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n var frozenSwap = (action === 'leftArrow' || (action === 'shiftLeft' && this.getGridSeletion())\n || action === 'shiftTab') && (current[1] === 0 || current[1] === this.matrix.matrix[current[0]].indexOf(1))\n || (current[0] < this.matrix.matrix.length - 1 && action === 'tab'\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1));\n var swap = ((action === 'downArrow' || enterFrozen || (action === 'tab'\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1))) && current[0] === this.matrix.matrix.length - 1) ||\n (isPresent && frozenSwap);\n var fSwap = action === 'tab' && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1);\n var frSwap = (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1;\n if (action === 'tab' && current[0] === this.matrix.matrix.length - 1\n && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1)) {\n this.matrix.current[0] = -1;\n }\n return { swap: swap, toHeader: frozenSwap, toFrozen: fSwap, toFrozenRight: frSwap };\n };\n FixedRightHeaderFocus.prototype.getTable = function () {\n return (this.parent.getHeaderContent().querySelector('.e-frozen-right-header .e-table'));\n };\n FixedRightHeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current3 = [];\n if (action === 'rightArrow' || (action === 'shiftRight' && this.getGridSeletion()) || action === 'tab') {\n current3[0] = previous[0];\n current3[1] = -1;\n }\n if (action === 'upArrow' || action === 'shiftEnter') {\n current3[0] = this.matrix.matrix.length;\n current3[1] = previous[1];\n }\n if (action === 'shiftTab') {\n current3[0] = previous[0] === -1 ? this.matrix.matrix.length - 1 : previous[0] - 1;\n current3[1] = this.matrix.matrix[current3[0]].length;\n }\n return current3;\n };\n FixedRightHeaderFocus.prototype.getHeaderType = function () {\n return 'FixedRightHeaderFocus';\n };\n return FixedRightHeaderFocus;\n}(HeaderFocus));\nexport { FixedRightHeaderFocus };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the Grid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the column chooser behavior of the Grid.\n */\nvar ColumnChooserSettings = /** @class */ (function (_super) {\n __extends(ColumnChooserSettings, _super);\n function ColumnChooserSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('startsWith')\n ], ColumnChooserSettings.prototype, \"operator\", void 0);\n __decorate([\n Property(false)\n ], ColumnChooserSettings.prototype, \"ignoreAccent\", void 0);\n return ColumnChooserSettings;\n}(ChildProperty));\nexport { ColumnChooserSettings };\n","var __assign = (this && this.__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};\nimport { Browser, EventHandler, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, closest, select } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { setCssInGridPopUp, getPosition, isGroupAdaptive, addRemoveActiveClasses, removeAddCboxClasses } from '../base/util';\nimport { getCellsByTableName, getCellByColAndRowIndex, parentsUntil, gridActionHandler } from '../base/util';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { iterateExtend, setChecked, isComplexField, getObject } from '../base/util';\nimport { addRemoveEventListener } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * The `Selection` module is used to handle cell and row selection.\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for the Grid selection module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {SelectionSettings} selectionSettings - specifies the selectionsettings\n * @param {ServiceLocator} locator - specifies the ServiceLocator\n * @hidden\n */\n function Selection(parent, selectionSettings, locator) {\n //Internal letiables\n /**\n * @hidden\n */\n this.selectedRowIndexes = [];\n /**\n * @hidden\n */\n this.selectedRowCellIndexes = [];\n /**\n * @hidden\n */\n this.selectedRecords = [];\n /**\n * @hidden\n */\n this.preventFocus = false;\n /**\n * @hidden\n */\n this.selectedColumnsIndexes = [];\n this.checkBoxState = false;\n this.isMultiShiftRequest = false;\n this.isMultiCtrlRequest = false;\n this.enableSelectMultiTouch = false;\n this.clearRowCheck = false;\n this.selectRowCheck = false;\n this.selectedRowState = {};\n this.unSelectedRowState = {};\n this.totalRecordsCount = 0;\n this.chkAllCollec = [];\n this.isCheckedOnAdd = false;\n this.persistSelectedData = [];\n this.deSelectedData = [];\n this.isHdrSelectAllClicked = false;\n this.needColumnSelection = false;\n this.isCancelDeSelect = false;\n this.isPreventCellSelect = false;\n this.disableUI = false;\n this.isPersisted = false;\n this.cmdKeyPressed = false;\n this.cellselected = false;\n this.isMultiSelection = false;\n this.isAddRowsToSelection = false;\n this.initialRowSelection = false;\n this.isPrevRowSelection = false;\n this.isKeyAction = false;\n this.isRowDragSelected = false;\n this.isPartialSelection = false;\n this.rmtHdrChkbxClicked = false;\n this.isCheckboxReset = false;\n /**\n * @hidden\n */\n this.autoFillRLselection = true;\n this.bottom = '0 0 2px 0';\n this.top = '2px 0 0 0';\n /* eslint-disable */\n this.right_bottom = '0 2px 2px 0';\n this.bottom_left = '0 0 2px 2px';\n this.top_right = '2px 2px 0 0';\n this.top_left = '2px 0 0 2px';\n this.top_bottom = '2px 0 2px 0';\n this.top_right_bottom = '2px 2px 2px 0';\n this.top_bottom_left = '2px 0 2px 2px';\n this.top_right_left = '2px 2px 0 2px';\n this.right_bottom_left = '0 2px 2px 2px';\n this.all_border = '2px';\n this.parent = parent;\n this.selectionSettings = selectionSettings;\n this.factory = locator.getService('rendererFactory');\n this.focus = locator.getService('focus');\n this.addEventListener();\n this.wireEvents();\n }\n Selection.prototype.initializeSelection = function () {\n this.parent.log('selection_key_missing');\n this.render();\n };\n /**\n * The function used to trigger onActionBegin\n *\n * @param {Object} args - specifies the args\n * @param {string} type - specifies the type\n * @returns {void}\n * @hidden\n */\n Selection.prototype.onActionBegin = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n Selection.prototype.fDataUpdate = function (args) {\n if (!this.isMultiSelection && (!isNullOrUndefined(args.cellIndex) || !isNullOrUndefined(args.rowIndex))) {\n var rowObj = this.getRowObj(isNullOrUndefined(args.rowIndex) ? isNullOrUndefined(args.cellIndex) ?\n this.currentIndex : args.cellIndex.rowIndex : args.rowIndex);\n args.foreignKeyData = rowObj.foreignKeyData;\n }\n return args;\n };\n /**\n * The function used to trigger onActionComplete\n *\n * @param {Object} args - specifies the args\n * @param {string} type - specifies the type\n * @returns {void}\n * @hidden\n */\n Selection.prototype.onActionComplete = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n this.isMultiSelection = false;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n /**\n * To destroy the selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n return;\n }\n this.hidePopUp();\n this.clearSelection();\n this.removeEventListener();\n this.unWireEvents();\n EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler);\n };\n Selection.prototype.isEditing = function () {\n return (this.parent.editSettings.mode === 'Normal' || (this.parent.editSettings.mode === 'Batch' && this.parent.editModule &&\n this.parent.editModule.formObj && !this.parent.editModule.formObj.validate())) &&\n this.parent.isEdit && !this.parent.isPersistSelection;\n };\n Selection.prototype.getSelectedMovableRow = function (index) {\n var gObj = this.parent;\n if (gObj.isFrozenGrid() && this.parent.getContent().querySelector('.' + literals.movableContent)) {\n return gObj.getMovableRowByIndex(index);\n }\n return null;\n };\n Selection.prototype.getSelectedFrozenRightRow = function (index) {\n var gObj = this.parent;\n if (gObj.isFrozenGrid() && gObj.getFrozenMode() === literals.leftRight && gObj.getFrozenRightContent()) {\n return gObj.getFrozenRightRowByIndex(index);\n }\n return null;\n };\n Selection.prototype.getCurrentBatchRecordChanges = function () {\n var gObj = this.parent;\n if (gObj.editSettings.mode === 'Batch' && gObj.editModule) {\n var currentRecords = iterateExtend(this.parent.getCurrentViewRecords());\n currentRecords = gObj.editSettings.newRowPosition === 'Bottom' ?\n currentRecords.concat(this.parent.editModule.getBatchChanges()[literals.addedRecords]) :\n this.parent.editModule.getBatchChanges()[literals.addedRecords].concat(currentRecords);\n var deletedRecords = this.parent.editModule.getBatchChanges()[literals.deletedRecords];\n var primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n for (var i = 0; i < (deletedRecords.length); i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (deletedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey] === currentRecords[parseInt(j.toString(), 10)][\"\" + primaryKey]) {\n currentRecords.splice(j, 1);\n break;\n }\n }\n }\n return currentRecords;\n }\n else {\n return gObj.getCurrentViewRecords();\n }\n };\n /**\n * Selects a row by the given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n Selection.prototype.selectRow = function (index, isToggle) {\n if (this.selectedRowIndexes.length && this.selectionSettings.enableSimpleMultiRowSelection) {\n this.addRowsToSelection([index]);\n return;\n }\n var gObj = this.parent;\n var selectedRow = gObj.getRowByIndex(index);\n var rowObj = selectedRow && gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid'));\n if (this.isPartialSelection && rowObj && rowObj.isDataRow && !rowObj.isSelectable) {\n return;\n }\n var selectedMovableRow = this.getSelectedMovableRow(index);\n var selectedFrozenRightRow = this.getSelectedFrozenRightRow(index);\n var selectData;\n var isRemoved = false;\n if (gObj.enableVirtualization && index > -1) {\n var e = { selectedIndex: index, isAvailable: true };\n this.parent.notify(events.selectVirtualRow, e);\n var frozenData = gObj.isFrozenGrid() ? gObj.contentModule.getRowObjectByIndex(index)\n : null;\n if (selectedRow && (gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')) || frozenData)) {\n selectData = frozenData ? frozenData : gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')).data;\n }\n else {\n if (e.isAvailable && !gObj.selectionSettings.persistSelection) {\n var prevSelectedData = this.parent.getSelectedRecords();\n if (prevSelectedData.length > 0) {\n this.clearRowSelection();\n }\n }\n return;\n }\n }\n else {\n selectData = this.getRowObj(index).data;\n }\n if (!this.isRowType() || !selectedRow || this.isEditing()) {\n // if (this.isEditing()) {\n // gObj.selectedRowIndex = index;\n // }\n return;\n }\n var isRowSelected = selectedRow.hasAttribute('aria-selected');\n this.activeTarget();\n isToggle = !isToggle ? isToggle :\n !this.selectedRowIndexes.length ? false :\n (this.selectedRowIndexes.length === 1 ? (this.isKeyAction && this.parent.isCheckBoxSelection ?\n false : index === this.selectedRowIndexes[0]) : false);\n this.isKeyAction = false;\n var args;\n var can = 'cancel';\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, row: selectedRow,\n previousRow: gObj.getRowByIndex(this.prevRowIndex),\n previousRowIndex: this.prevRowIndex, target: this.actualTarget, cancel: false, isInteracted: this.isInteracted,\n isHeaderCheckboxClicked: this.isHeaderCheckboxClicked\n };\n args = this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n this.parent.trigger(events.rowSelecting, this.fDataUpdate(args), this.rowSelectingCallBack(args, isToggle, index, selectData, isRemoved, isRowSelected, can));\n }\n else {\n this.rowSelectingCallBack(args, isToggle, index, selectData, isRemoved, isRowSelected, can)(args);\n }\n };\n Selection.prototype.rowSelectingCallBack = function (args, isToggle, index, selectData, isRemoved, isRowSelected, can) {\n var _this = this;\n return function (args) {\n if (!isNullOrUndefined(args) && args[\"\" + can] === true) {\n _this.disableInteracted();\n return;\n }\n _this.index = index;\n _this.toggle = isToggle;\n _this.data = selectData;\n _this.removed = isRemoved;\n if (isRowSelected && _this.selectionSettings.persistSelection && !(_this.selectionSettings.checkboxMode === 'ResetOnRowClick')) {\n _this.clearSelectedRow(index);\n _this.selectRowCallBack();\n }\n else if (!isRowSelected && _this.selectionSettings.persistSelection &&\n _this.selectionSettings.checkboxMode !== 'ResetOnRowClick') {\n _this.selectRowCallBack();\n }\n if (_this.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n _this.isCheckboxReset = true;\n _this.clearSelection();\n }\n if (!_this.selectionSettings.persistSelection || _this.selectionSettings.checkboxMode === 'ResetOnRowClick' ||\n (!_this.parent.isCheckBoxSelection && _this.selectionSettings.persistSelection)) {\n _this.selectRowCheck = true;\n _this.clearRow();\n }\n };\n };\n Selection.prototype.selectRowCallBack = function () {\n var gObj = this.parent;\n var args;\n var index = this.index;\n var isToggle = this.toggle;\n var selectData = this.data;\n var isRemoved = this.removed;\n var selectedRow = gObj.getRowByIndex(index);\n var selectedMovableRow = this.getSelectedMovableRow(index);\n var selectedFrozenRightRow = this.getSelectedFrozenRightRow(index);\n if (!isToggle && !isRemoved) {\n if (this.selectedRowIndexes.indexOf(index) <= -1) {\n this.updateRowSelection(selectedRow, index);\n this.selectMovableRow(selectedMovableRow, selectedFrozenRightRow, index);\n }\n this.selectRowIndex(index);\n }\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index,\n row: selectedRow, previousRow: gObj.getRowByIndex(this.prevRowIndex),\n previousRowIndex: this.prevRowIndex, target: this.actualTarget, isInteracted: this.isInteracted,\n isHeaderCheckBoxClicked: this.isHeaderCheckboxClicked, rowIndexes: index\n };\n args = this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n this.onActionComplete(args, events.rowSelected);\n }\n this.isInteracted = false;\n this.updateRowProps(index);\n };\n Selection.prototype.selectMovableRow = function (selectedMovableRow, selectedFrozenRightRow, index) {\n if (this.parent.isFrozenGrid()) {\n this.updateRowSelection(selectedMovableRow, index);\n if (this.parent.getFrozenMode() === literals.leftRight && selectedFrozenRightRow) {\n this.updateRowSelection(selectedFrozenRightRow, index);\n }\n }\n };\n Selection.prototype.addMovableArgs = function (targetObj, mRow, frRow) {\n if (this.parent.isFrozenGrid()) {\n var mObj = { mRow: mRow, previousMovRow: this.parent.getMovableRows()[this.prevRowIndex] };\n var frozenRightRow = 'frozenRightRow';\n var previousFrozenRightRow = 'previousFrozenRightRow';\n if (this.parent.getFrozenMode() === literals.leftRight && frRow) {\n mObj[\"\" + frozenRightRow] = frRow;\n mObj[\"\" + previousFrozenRightRow] = this.parent.getFrozenRightDataRows()[this.prevRowIndex];\n }\n targetObj = __assign({}, targetObj, mObj);\n }\n return targetObj;\n };\n /**\n * Selects a range of rows from start and end row indexes.\n *\n * @param {number} startIndex - Specifies the start row index.\n * @param {number} endIndex - Specifies the end row index.\n * @returns {void}\n */\n Selection.prototype.selectRowsByRange = function (startIndex, endIndex) {\n this.selectRows(this.getCollectionFromIndexes(startIndex, endIndex));\n this.selectRowIndex(endIndex);\n };\n Selection.prototype.selectedDataUpdate = function (selectedData, foreignKeyData, selectedRows, rowIndexes, selectableRowIndex) {\n for (var i = 0, len = rowIndexes.length; i < len; i++) {\n var currentRow = this.parent.getDataRows()[rowIndexes[parseInt(i.toString(), 10)]];\n if (this.parent.enableVirtualization) {\n currentRow = this.parent.getRowByIndex(rowIndexes[parseInt(i.toString(), 10)]);\n }\n var rowObj = this.getRowObj(currentRow);\n if (rowObj && rowObj.isDataRow && rowObj.isSelectable) {\n selectedData.push(rowObj.data);\n selectedRows.push(currentRow);\n foreignKeyData.push(rowObj.foreignKeyData);\n }\n else {\n if (this.isPartialSelection && selectableRowIndex) {\n selectableRowIndex.splice(selectableRowIndex.indexOf(rowIndexes[parseInt(i.toString(), 10)]), 1);\n }\n }\n }\n };\n /**\n * Selects a collection of rows by index.\n *\n * @param {number[]} rowIndexes - Specifies an array of row indexes.\n * @returns {void}\n */\n Selection.prototype.selectRows = function (rowIndexes) {\n var _this = this;\n var gObj = this.parent;\n var selectableRowIndex = rowIndexes.slice();\n var rowIndex = !this.isSingleSel() ? rowIndexes[0] : rowIndexes[rowIndexes.length - 1];\n this.isMultiSelection = true;\n var selectedRows = [];\n var foreignKeyData = [];\n var selectedMovableRow = this.getSelectedMovableRow(rowIndex);\n var selectedFrozenRightRow = this.getSelectedFrozenRightRow(rowIndex);\n var can = 'cancel';\n var selectedData = [];\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n this.selectedDataUpdate(selectedData, foreignKeyData, selectedRows, rowIndexes, selectableRowIndex);\n this.activeTarget();\n var args = {\n cancel: false,\n rowIndexes: selectableRowIndex, row: selectedRows, rowIndex: rowIndex, target: this.actualTarget,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isInteracted: this.isInteracted, isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n data: selectedData, isHeaderCheckboxClicked: this.isHeaderCheckboxClicked, foreignKeyData: foreignKeyData\n };\n args = this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n this.parent.trigger(events.rowSelecting, this.fDataUpdate(args), function (args) {\n if (!isNullOrUndefined(args) && args[\"\" + can] === true) {\n _this.disableInteracted();\n return;\n }\n _this.clearRow();\n _this.selectRowIndex(selectableRowIndex.slice(-1)[0]);\n var selectRowFn = function (index, preventFocus) {\n _this.updateRowSelection(gObj.getRowByIndex(index), index, preventFocus);\n if (gObj.isFrozenGrid()) {\n var rightEle = _this.parent.getFrozenMode() === literals.leftRight ? gObj.getFrozenRightRowByIndex(index)\n : undefined;\n _this.selectMovableRow(gObj.getMovableRowByIndex(index), rightEle, index);\n }\n _this.updateRowProps(rowIndex);\n };\n if (!_this.isSingleSel()) {\n for (var _i = 0, selectableRowIndex_1 = selectableRowIndex; _i < selectableRowIndex_1.length; _i++) {\n var rowIdx = selectableRowIndex_1[_i];\n selectRowFn(rowIdx, gObj.enableVirtualization ? true : false);\n }\n }\n else {\n selectRowFn(rowIndex);\n }\n args = {\n rowIndexes: selectableRowIndex, row: selectedRows, rowIndex: rowIndex, target: _this.actualTarget,\n prevRow: gObj.getRows()[_this.prevRowIndex], previousRowIndex: _this.prevRowIndex,\n data: _this.getSelectedRecords(), isInteracted: _this.isInteracted,\n isHeaderCheckboxClicked: _this.isHeaderCheckboxClicked, foreignKeyData: foreignKeyData\n };\n args = _this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n if (_this.isRowSelected) {\n _this.onActionComplete(args, events.rowSelected);\n }\n _this.isInteracted = false;\n });\n };\n /**\n * Select rows with existing row selection by passing row indexes.\n *\n * @param {number} rowIndexes - Specifies the row indexes.\n * @returns {void}\n * @hidden\n */\n Selection.prototype.addRowsToSelection = function (rowIndexes) {\n var gObj = this.parent;\n var can = 'cancel';\n var target = this.target;\n this.isMultiSelection = true;\n var selectedRows = [];\n var foreignKeyData = [];\n var selectedData = [];\n var indexes = gObj.getSelectedRowIndexes().concat(rowIndexes);\n var selectedRow = !this.isSingleSel() ? gObj.getRowByIndex(rowIndexes[0]) :\n gObj.getRowByIndex(rowIndexes[rowIndexes.length - 1]);\n var selectedMovableRow = !this.isSingleSel() ? this.getSelectedMovableRow(rowIndexes[0]) :\n this.getSelectedMovableRow(rowIndexes[rowIndexes.length - 1]);\n var selectedFrozenRightRow = !this.isSingleSel() ? this.getSelectedFrozenRightRow(rowIndexes[0]) :\n this.getSelectedFrozenRightRow(rowIndexes[rowIndexes.length - 1]);\n if ((!this.isRowType() || this.isEditing()) && !this.selectionSettings.checkboxOnly) {\n return;\n }\n var args;\n var checkboxColumn = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (this.isMultiCtrlRequest && !checkboxColumn.length) {\n this.selectedDataUpdate(selectedData, foreignKeyData, selectedRows, indexes);\n }\n for (var _i = 0, rowIndexes_1 = rowIndexes; _i < rowIndexes_1.length; _i++) {\n var rowIndex = rowIndexes_1[_i];\n var rowObj = this.getRowObj(rowIndex);\n var isUnSelected = this.selectedRowIndexes.indexOf(rowIndex) > -1;\n if (this.isPartialSelection && rowObj && rowObj.isDataRow && !rowObj.isSelectable) {\n continue;\n }\n this.selectRowIndex(rowIndex);\n if (isUnSelected && ((checkboxColumn.length ? true : this.selectionSettings.enableToggle) || this.isMultiCtrlRequest)) {\n this.isAddRowsToSelection = true;\n this.rowDeselect(events.rowDeselecting, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target);\n if (this.isCancelDeSelect) {\n return;\n }\n this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(rowIndex), 1);\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedRow), 1);\n this.selectRowIndex(this.selectedRowIndexes.length ? this.selectedRowIndexes[this.selectedRowIndexes.length - 1] : -1);\n selectedRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedRow, false, null, 'e-selectionbackground', 'e-active');\n if (selectedMovableRow) {\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedMovableRow), 1);\n selectedMovableRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedMovableRow, false, null, 'e-selectionbackground', 'e-active');\n }\n if (selectedFrozenRightRow) {\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedFrozenRightRow), 1);\n selectedFrozenRightRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedFrozenRightRow, false, null, 'e-selectionbackground', 'e-active');\n }\n this.rowDeselect(events.rowDeselected, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target, [selectedMovableRow], undefined, [selectedFrozenRightRow]);\n this.isInteracted = false;\n this.isMultiSelection = false;\n this.isAddRowsToSelection = false;\n this.isHdrSelectAllClicked = false;\n }\n else {\n this.activeTarget();\n args = {\n cancel: false,\n data: selectedData.length ? selectedData : rowObj.data, rowIndex: rowIndex, row: selectedRows.length ? selectedRows :\n selectedRow, target: this.actualTarget, prevRow: gObj.getRows()[this.prevRowIndex],\n previousRowIndex: this.prevRowIndex, isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n foreignKeyData: foreignKeyData.length ? foreignKeyData : rowObj.foreignKeyData, isInteracted: this.isInteracted,\n isHeaderCheckboxClicked: this.isHeaderCheckboxClicked, rowIndexes: indexes\n };\n args = this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n this.parent.trigger(events.rowSelecting, this.fDataUpdate(args));\n if (!isNullOrUndefined(args) && args[\"\" + can] === true) {\n this.disableInteracted();\n return;\n }\n if (this.isSingleSel()) {\n this.clearRow();\n }\n this.updateRowSelection(selectedRow, rowIndex);\n this.selectMovableRow(selectedMovableRow, selectedFrozenRightRow, rowIndex);\n }\n if (!isUnSelected) {\n args = {\n data: selectedData.length ? selectedData : rowObj.data, rowIndex: rowIndex, row: selectedRows.length ? selectedRows :\n selectedRow, target: this.actualTarget, prevRow: gObj.getRows()[this.prevRowIndex],\n previousRowIndex: this.prevRowIndex, foreignKeyData: foreignKeyData.length ? foreignKeyData : rowObj.foreignKeyData,\n isInteracted: this.isInteracted, isHeaderCheckboxClicked: this.isHeaderCheckboxClicked, rowIndexes: indexes\n };\n args = this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n this.onActionComplete(args, events.rowSelected);\n }\n this.isInteracted = false;\n this.updateRowProps(rowIndex);\n if (this.isSingleSel()) {\n break;\n }\n }\n };\n Selection.prototype.getCollectionFromIndexes = function (startIndex, endIndex) {\n var indexes = [];\n // eslint-disable-next-line prefer-const\n var _a = (startIndex <= endIndex) ?\n { i: startIndex, max: endIndex } : { i: endIndex, max: startIndex }, i = _a.i, max = _a.max;\n for (; i <= max; i++) {\n indexes.push(i);\n }\n if (startIndex > endIndex) {\n indexes.reverse();\n }\n return indexes;\n };\n Selection.prototype.clearRow = function () {\n this.clearRowCheck = true;\n this.clearRowSelection();\n };\n Selection.prototype.clearRowCallBack = function () {\n if (this.isCancelDeSelect && this.parent.checkAllRows !== 'Check') {\n return;\n }\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.selectRowIndex(-1);\n if (this.isSingleSel() && this.parent.isPersistSelection) {\n this.selectedRowState = {};\n }\n };\n Selection.prototype.clearSelectedRow = function (index) {\n if (this.toggle) {\n var selectedEle = this.parent.getRowByIndex(index);\n if (!this.disableUI) {\n selectedEle.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedEle, false, true, 'e-selectionbackground', 'e-active');\n }\n this.removed = true;\n this.updatePersistCollection(selectedEle, false);\n this.updateCheckBoxes(selectedEle);\n this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(index), 1);\n this.selectedRecords.splice(this.selectedRecords.indexOf(this.parent.getRowByIndex(index)), 1);\n }\n };\n Selection.prototype.updateRowProps = function (startIndex) {\n this.prevRowIndex = startIndex;\n this.isRowSelected = this.selectedRowIndexes.length && true;\n };\n Selection.prototype.getPkValue = function (pkField, data) {\n return pkField ? isComplexField(pkField) ? getObject(pkField, data) : data[\"\" + pkField] : data[\"\" + pkField];\n };\n Selection.prototype.updatePersistCollection = function (selectedRow, chkState) {\n var _this = this;\n if ((this.parent.isPersistSelection || this.parent.selectionSettings.persistSelection &&\n this.parent.getPrimaryKeyFieldNames().length > 0) && !isNullOrUndefined(selectedRow)) {\n if (!this.parent.isPersistSelection) {\n this.ensureCheckboxFieldSelection();\n }\n var rowObj = this.getRowObj(selectedRow);\n var pKey_1 = rowObj.data ? this.getPkValue(this.primaryKey, rowObj.data) : null;\n if (pKey_1 === null) {\n return;\n }\n rowObj.isSelected = chkState;\n if ((chkState && !this.isPartialSelection) || (this.isPartialSelection && rowObj.isSelectable && rowObj.isSelected)) {\n this.selectedRowState[\"\" + pKey_1] = chkState;\n delete (this.unSelectedRowState[\"\" + pKey_1]);\n if (!this.persistSelectedData.some(function (data) { return _this.getPkValue(_this.primaryKey, data) === pKey_1; })) {\n this.persistSelectedData.push(rowObj.data);\n }\n }\n else {\n this.updatePersistDelete(pKey_1);\n }\n }\n };\n Selection.prototype.updatePersistDelete = function (pKey, isPartialSelection) {\n var _this = this;\n delete (this.selectedRowState[\"\" + pKey]);\n if (this.rmtHdrChkbxClicked) {\n this.unSelectedRowState[\"\" + pKey] = true;\n }\n var index;\n var isPresent = this.persistSelectedData.some(function (data, i) {\n index = i;\n return _this.getPkValue(_this.primaryKey, data) === pKey;\n });\n if (isPresent) {\n this.persistSelectedData.splice(index, 1);\n if (isPartialSelection) {\n this.parent.partialSelectedRecords.splice(index, 1);\n }\n }\n };\n Selection.prototype.updateCheckBoxes = function (row, chkState, rowIndex) {\n if (!isNullOrUndefined(row)) {\n var chkBox = row.querySelector('.e-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n removeAddCboxClasses(chkBox.nextElementSibling, chkState);\n setChecked(chkBox, chkState);\n if (isNullOrUndefined(this.checkedTarget) || (!isNullOrUndefined(this.checkedTarget)\n && !this.checkedTarget.classList.contains('e-checkselectall'))) {\n this.setCheckAllState(rowIndex);\n }\n }\n }\n };\n Selection.prototype.updateRowSelection = function (selectedRow, startIndex, preventFocus) {\n if (!selectedRow) {\n return;\n }\n this.selectedRowIndexes.push(startIndex);\n var len = this.selectedRowIndexes.length;\n if (this.parent.isFrozenGrid() && len > 1) {\n if ((this.selectedRowIndexes[len - 2] === this.selectedRowIndexes[len - 1])) {\n this.selectedRowIndexes.pop();\n }\n }\n this.selectedRecords.push(selectedRow);\n selectedRow.setAttribute('aria-selected', 'true');\n this.updatePersistCollection(selectedRow, true);\n this.updateCheckBoxes(selectedRow, true);\n this.addRemoveClassesForRow(selectedRow, true, null, 'e-selectionbackground', 'e-active');\n if (!this.preventFocus) {\n var target = this.focus.getPrevIndexes().cellIndex ?\n selectedRow.cells[this.focus.getPrevIndexes().cellIndex] :\n selectedRow.querySelector('.e-selectionbackground:not(.e-hide):not(.e-detailrowcollapse):not(.e-detailrowexpand)');\n if (this.parent.contextMenuModule && this.mouseButton === 2) {\n target = this.parent.contextMenuModule.cell;\n }\n if (!target || preventFocus) {\n return;\n }\n this.focus.onClick({ target: target }, true);\n }\n };\n /**\n * Deselects the currently selected rows and cells.\n *\n * @returns {void}\n */\n Selection.prototype.clearSelection = function () {\n this.checkSelectAllClicked = true;\n if (this.selectionSettings.persistSelection && this.persistSelectedData.length) {\n this.deSelectedData = iterateExtend(this.persistSelectedData);\n }\n if (!this.parent.isPersistSelection || (this.parent.isPersistSelection && !this.parent.isEdit) ||\n (!isNullOrUndefined(this.checkedTarget) && this.checkedTarget.classList.contains('e-checkselectall'))) {\n var span = this.parent.element.querySelector('.e-gridpopup').querySelector('span');\n if (span.classList.contains('e-rowselect')) {\n span.classList.remove('e-spanclicked');\n }\n if (this.parent.isPersistSelection) {\n this.persistSelectedData = [];\n this.selectedRowState = {};\n }\n this.clearRowSelection();\n this.clearCellSelection();\n this.clearColumnSelection();\n this.prevRowIndex = undefined;\n this.prevCIdxs = undefined;\n this.prevECIdxs = undefined;\n this.enableSelectMultiTouch = false;\n this.isInteracted = false;\n this.checkSelectAllClicked = false;\n this.isHdrSelectAllClicked = false;\n }\n };\n /**\n * Deselects the currently selected rows.\n *\n * @returns {void}\n */\n Selection.prototype.clearRowSelection = function () {\n var _this = this;\n if (this.isRowSelected) {\n var gObj = this.parent;\n var rows_1 = this.parent.getDataRows();\n var data_1 = [];\n var row_1 = [];\n var mRow_1 = [];\n var fRightRow_1 = [];\n var rowIndex_1 = [];\n var foreignKeyData_1 = [];\n var target_1 = this.target;\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var currentRow = this.parent.editSettings.mode === 'Batch' ?\n this.parent.getRows()[this.selectedRowIndexes[parseInt(i.toString(), 10)]]\n : this.parent.getDataRows()[this.selectedRowIndexes[parseInt(i.toString(), 10)]];\n var rowObj = this.getRowObj(currentRow);\n if (rowObj) {\n data_1.push(rowObj.data);\n row_1.push(currentRow);\n rowIndex_1.push(this.selectedRowIndexes[parseInt(i.toString(), 10)]);\n foreignKeyData_1.push(rowObj.foreignKeyData);\n }\n if (gObj.isFrozenGrid()) {\n var mRows = gObj.getMovableRows();\n if (mRows && mRows.length) {\n mRow_1.push(mRows[this.selectedRowIndexes[parseInt(i.toString(), 10)]]);\n }\n if (gObj.getFrozenMode() === literals.leftRight) {\n var frRows = gObj.getFrozenRightRows();\n if (frRows && frRows.length) {\n fRightRow_1.push(frRows[this.selectedRowIndexes[parseInt(i.toString(), 10)]]);\n }\n }\n }\n }\n if (this.selectionSettings.persistSelection && this.selectionSettings.checkboxMode !== 'ResetOnRowClick') {\n this.isRowClicked = this.checkSelectAllClicked ? true : false;\n }\n this.rowDeselect(events.rowDeselecting, rowIndex_1, data_1, row_1, foreignKeyData_1, target_1, mRow_1, function () {\n if (_this.isCancelDeSelect && (_this.isRowClicked || _this.checkSelectAllClicked || (_this.isInteracted &&\n !_this.parent.isPersistSelection))) {\n if (_this.parent.isPersistSelection) {\n if (_this.getCheckAllStatus(_this.parent.element.querySelector('.e-checkselectall')) === 'Intermediate') {\n for (var i = 0; i < _this.selectedRecords.length; i++) {\n _this.updatePersistCollection(_this.selectedRecords[parseInt(i.toString(), 10)], true);\n }\n }\n else {\n _this.parent.checkAllRows = 'Check';\n _this.updatePersistSelectedData(true);\n }\n }\n if (_this.clearRowCheck) {\n _this.clearRowCallBack();\n _this.clearRowCheck = false;\n if (_this.selectRowCheck) {\n _this.selectRowCallBack();\n _this.selectRowCheck = false;\n }\n }\n return;\n }\n var element = [].slice.call(rows_1.filter(function (record) { return record.hasAttribute('aria-selected'); }));\n for (var j = 0; j < element.length; j++) {\n if (!_this.disableUI) {\n element[parseInt(j.toString(), 10)].removeAttribute('aria-selected');\n _this.addRemoveClassesForRow(element[parseInt(j.toString(), 10)], false, true, 'e-selectionbackground', 'e-active');\n }\n // tslint:disable-next-line:align\n if (!_this.isPrevRowSelection) {\n _this.updatePersistCollection(element[parseInt(j.toString(), 10)], false);\n }\n _this.updateCheckBoxes(element[parseInt(j.toString(), 10)]);\n }\n for (var i = 0, len = _this.selectedRowIndexes.length; i < len; i++) {\n var movableRow = _this.getSelectedMovableRow(_this.selectedRowIndexes[parseInt(i.toString(), 10)]);\n if (movableRow) {\n if (!_this.disableUI) {\n movableRow.removeAttribute('aria-selected');\n _this.addRemoveClassesForRow(movableRow, false, true, 'e-selectionbackground', 'e-active');\n }\n _this.updateCheckBoxes(movableRow);\n if (!_this.isPrevRowSelection) {\n _this.updatePersistCollection(movableRow, false);\n }\n }\n var frRow = _this.getSelectedFrozenRightRow(_this.selectedRowIndexes[parseInt(i.toString(), 10)]);\n if (frRow) {\n if (!_this.disableUI) {\n frRow.removeAttribute('aria-selected');\n _this.addRemoveClassesForRow(frRow, false, true, 'e-selectionbackground', 'e-active');\n }\n _this.updateCheckBoxes(frRow);\n if (!_this.isPrevRowSelection) {\n _this.updatePersistCollection(frRow, false);\n }\n }\n }\n _this.selectedRowIndexes = [];\n _this.selectedRecords = [];\n _this.isRowSelected = false;\n _this.selectRowIndex(-1);\n _this.isPrevRowSelection = false;\n _this.rowDeselect(events.rowDeselected, rowIndex_1, data_1, row_1, foreignKeyData_1, target_1, mRow_1, undefined, fRightRow_1);\n if (_this.clearRowCheck) {\n _this.clearRowCallBack();\n _this.clearRowCheck = false;\n if (_this.selectRowCheck) {\n _this.selectRowCallBack();\n _this.selectRowCheck = false;\n }\n }\n }, fRightRow_1);\n }\n else {\n if (this.clearRowCheck) {\n this.clearRowCallBack();\n this.clearRowCheck = false;\n if (this.selectRowCheck) {\n this.selectRowCallBack();\n this.selectRowCheck = false;\n }\n }\n }\n };\n Selection.prototype.rowDeselect = function (type, rowIndex, data, row, foreignKeyData, target, mRow, rowDeselectCallBack, frozenRightRow) {\n var _this = this;\n if ((this.selectionSettings.persistSelection && (this.isRowClicked || this.checkSelectAllClicked || (this.focus['activeKey'] &&\n this.focus.currentInfo.element.classList.contains('e-gridchkbox') && this.focus['activeKey'] === 'space'))) ||\n !this.selectionSettings.persistSelection) {\n var cancl_1 = 'cancel';\n var isSingleDeSel = rowIndex.length === 1 && this.deSelectedData.length === 1;\n var rowDeselectObj = {\n rowIndex: rowIndex[0], data: this.selectionSettings.persistSelection && (this.parent.checkAllRows === 'Uncheck' &&\n !isSingleDeSel) && this.selectionSettings.checkboxMode !== 'ResetOnRowClick' ? this.deSelectedData : data,\n foreignKeyData: foreignKeyData, cancel: false, isInteracted: this.isInteracted,\n isHeaderCheckboxClicked: this.isHeaderCheckboxClicked\n };\n if (type === 'rowDeselected') {\n delete rowDeselectObj.cancel;\n }\n var rowInString = 'row';\n var target_2 = 'target';\n var rowidx = 'rowIndex';\n var rowidxex = 'rowIndexes';\n var dataTxt = 'data';\n var foreignKey = 'foreignKeyData';\n rowDeselectObj[\"\" + rowInString] = row;\n rowDeselectObj[\"\" + target_2] = this.actualTarget;\n var isHeaderCheckBxClick = this.actualTarget && !isNullOrUndefined(closest(this.actualTarget, 'thead'));\n if (isHeaderCheckBxClick || rowIndex.length > 1) {\n rowDeselectObj[\"\" + rowidx] = rowIndex[0];\n rowDeselectObj[\"\" + rowidxex] = rowIndex;\n }\n else if (rowIndex.length === 1) {\n rowDeselectObj[\"\" + dataTxt] = rowDeselectObj[\"\" + dataTxt][0];\n rowDeselectObj[\"\" + rowInString] = rowDeselectObj[\"\" + rowInString][0];\n rowDeselectObj[\"\" + foreignKey] = rowDeselectObj[\"\" + foreignKey][0];\n if (this.isAddRowsToSelection) {\n rowDeselectObj[\"\" + rowidxex] = rowIndex;\n }\n }\n this.parent.trigger(type, this.parent.isFrozenGrid() ? __assign({}, rowDeselectObj, { mRow: mRow, frozenRightRow: frozenRightRow }) : rowDeselectObj, function (args) {\n _this.isCancelDeSelect = args[\"\" + cancl_1];\n if (!_this.isCancelDeSelect || (!_this.isRowClicked && !_this.isInteracted && !_this.checkSelectAllClicked)) {\n _this.updatePersistCollection(row[0], false);\n _this.updateCheckBoxes(row[0], undefined, rowIndex[0]);\n if (mRow) {\n _this.updateCheckBoxes(mRow[0], undefined, rowIndex[0]);\n }\n if (frozenRightRow) {\n _this.updateCheckBoxes(frozenRightRow[0], undefined, rowIndex[0]);\n }\n }\n if (rowDeselectCallBack !== undefined) {\n rowDeselectCallBack();\n }\n });\n }\n else if (this.selectionSettings.persistSelection && !this.isInteracted) {\n if (rowDeselectCallBack !== undefined) {\n rowDeselectCallBack();\n }\n }\n };\n Selection.prototype.getRowObj = function (row) {\n if (row === void 0) { row = this.currentIndex; }\n if (isNullOrUndefined(row)) {\n return {};\n }\n if (typeof row === 'number') {\n row = this.parent.getRowByIndex(row);\n }\n if (row) {\n return this.parent.getRowObjectFromUID(row.getAttribute('data-uid')) || {};\n }\n return {};\n };\n Selection.prototype.getSelectedMovableCell = function (cellIndex) {\n var gObj = this.parent;\n var col = gObj.getColumnByIndex(cellIndex.cellIndex);\n var frzCols = gObj.isFrozenGrid();\n if (frzCols) {\n if (col.getFreezeTableName() === 'movable') {\n return gObj.getMovableCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n return null;\n }\n return null;\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n Selection.prototype.selectCell = function (cellIndex, isToggle) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(cellIndex);\n var args;\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n this.currentIndex = cellIndex.rowIndex;\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (!this.isCellType() || !selectedCell || this.isEditing()) {\n return;\n }\n var isCellSelected = selectedCell.classList.contains('e-cellselectionbackground');\n isToggle = !isToggle ? isToggle : (!isUndefined(this.prevCIdxs) &&\n cellIndex.rowIndex === this.prevCIdxs.rowIndex && cellIndex.cellIndex === this.prevCIdxs.cellIndex &&\n isCellSelected);\n if (!isToggle) {\n args = {\n data: selectedData, cellIndex: cellIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n cancel: false\n };\n var currentCell = 'currentCell';\n args[\"\" + currentCell] = selectedCell;\n var previousRowCellIndex = 'previousRowCellIndex';\n args[\"\" + previousRowCellIndex] = this.prevECIdxs;\n this.parent.trigger(events.cellSelecting, this.fDataUpdate(args), this.successCallBack(args, isToggle, cellIndex, selectedCell, selectedData));\n this.cellselected = true;\n }\n else {\n this.successCallBack(args, isToggle, cellIndex, selectedCell, selectedData)(args);\n }\n };\n Selection.prototype.successCallBack = function (cellSelectingArgs, isToggle, cellIndex, selectedCell, selectedData) {\n var _this = this;\n return function (cellSelectingArgs) {\n var cncl = 'cancel';\n var currentCell = 'currentCell';\n if (!isNullOrUndefined(cellSelectingArgs) && cellSelectingArgs[\"\" + cncl] === true) {\n return;\n }\n if (!isToggle) {\n cellSelectingArgs[\"\" + currentCell] = cellSelectingArgs[\"\" + currentCell] ? cellSelectingArgs[\"\" + currentCell] : selectedCell;\n }\n _this.clearCell();\n if (!isToggle) {\n _this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n if (!isToggle) {\n var args = {\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n selectedRowCellIndex: _this.selectedRowCellIndexes,\n previousRowCell: _this.prevECIdxs ?\n _this.getCellIndex(_this.prevECIdxs.rowIndex, _this.prevECIdxs.cellIndex) : undefined\n };\n var previousRowCellIndex = 'previousRowCellIndex';\n args[\"\" + previousRowCellIndex] = _this.prevECIdxs;\n _this.updateCellProps(cellIndex, cellIndex);\n _this.onActionComplete(args, events.cellSelected);\n }\n };\n };\n Selection.prototype.getCellIndex = function (rIdx, cIdx) {\n return (this.parent.getFrozenColumns() ? (cIdx >= this.parent.getFrozenColumns() ? this.parent.getMovableCellFromIndex(rIdx, cIdx)\n : this.parent.getCellFromIndex(rIdx, cIdx)) : this.parent.getCellFromIndex(rIdx, cIdx));\n };\n /**\n * Selects a range of cells from start and end indexes.\n *\n * @param {IIndex} startIndex - Specifies the row and column's start index.\n * @param {IIndex} endIndex - Specifies the row and column's end index.\n * @returns {void}\n */\n Selection.prototype.selectCellsByRange = function (startIndex, endIndex) {\n var _this = this;\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(startIndex);\n var frzCols = gObj.getFrozenColumns();\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(startIndex.rowIndex, startIndex.cellIndex);\n }\n var min;\n var max;\n var stIndex = startIndex;\n var edIndex = endIndex = endIndex ? endIndex : startIndex;\n var cellIndexes;\n this.currentIndex = startIndex.rowIndex;\n var cncl = 'cancel';\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var args = {\n data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n var previousRowCellIndex = 'previousRowCellIndex';\n args[\"\" + previousRowCellIndex] = this.prevECIdxs;\n this.parent.trigger(events.cellSelecting, this.fDataUpdate(args), function (cellSelectingArgs) {\n if (!isNullOrUndefined(cellSelectingArgs) && cellSelectingArgs[\"\" + cncl] === true) {\n return;\n }\n _this.clearCell();\n if (startIndex.rowIndex > endIndex.rowIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex.rowIndex; i <= endIndex.rowIndex; i++) {\n if (_this.selectionSettings.cellSelectionMode.indexOf('Box') < 0) {\n min = i === startIndex.rowIndex ? (startIndex.cellIndex) : 0;\n max = i === endIndex.rowIndex ? (endIndex.cellIndex) : _this.getLastColIndex(i);\n }\n else {\n min = startIndex.cellIndex;\n max = endIndex.cellIndex;\n }\n cellIndexes = [];\n for (var j = min < max ? min : max, len = min > max ? min : max; j <= len; j++) {\n if (frzCols) {\n if (j < frzCols) {\n selectedCell = gObj.getCellFromIndex(i, j);\n }\n else {\n selectedCell = gObj.getMovableCellFromIndex(i, j);\n }\n }\n else {\n selectedCell = gObj.getCellFromIndex(i, j);\n }\n if (!selectedCell) {\n continue;\n }\n cellIndexes.push(j);\n _this.updateCellSelection(selectedCell);\n _this.addAttribute(selectedCell);\n }\n _this.selectedRowCellIndexes.push({ rowIndex: i, cellIndexes: cellIndexes });\n }\n var cellSelectedArgs = {\n data: selectedData, cellIndex: edIndex, currentCell: gObj.getCellFromIndex(edIndex.rowIndex, edIndex.cellIndex),\n selectedRowCellIndex: _this.selectedRowCellIndexes,\n previousRowCell: _this.prevECIdxs ? _this.getCellIndex(_this.prevECIdxs.rowIndex, _this.prevECIdxs.cellIndex) : undefined\n };\n var previousRowCellIndex = 'previousRowCellIndex';\n cellSelectedArgs[\"\" + previousRowCellIndex] = _this.prevECIdxs;\n if (!_this.isDragged) {\n _this.onActionComplete(cellSelectedArgs, events.cellSelected);\n _this.cellselected = true;\n }\n _this.updateCellProps(stIndex, edIndex);\n });\n };\n /**\n * Selects a collection of cells by row and column indexes.\n *\n * @param {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n * @returns {void}\n */\n Selection.prototype.selectCells = function (rowCellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(rowCellIndexes[0]);\n var frzCols = gObj.getFrozenColumns();\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[0].rowIndex, rowCellIndexes[0].cellIndexes[0]);\n }\n this.currentIndex = rowCellIndexes[0].rowIndex;\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var cellSelectArgs = {\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n var previousRowCellIndex = 'previousRowCellIndex';\n cellSelectArgs[\"\" + previousRowCellIndex] = this.prevECIdxs;\n this.onActionBegin(cellSelectArgs, events.cellSelecting);\n for (var i = 0, len = rowCellIndexes.length; i < len; i++) {\n for (var j = 0, cellLen = rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes.length; j < cellLen; j++) {\n if (frzCols) {\n if (rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)] < frzCols) {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[parseInt(i.toString(), 10)].rowIndex, rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)]);\n }\n else {\n selectedCell = gObj.getMovableCellFromIndex(rowCellIndexes[parseInt(i.toString(), 10)].rowIndex, rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)]);\n }\n }\n else {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[parseInt(i.toString(), 10)].rowIndex, rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)]);\n }\n if (!selectedCell) {\n continue;\n }\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n this.addRowCellIndex({ rowIndex: rowCellIndexes[parseInt(i.toString(), 10)].rowIndex,\n cellIndex: rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)] });\n }\n }\n this.updateCellProps({ rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] }, { rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] });\n var cellSelectedArgs = {\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n var prvRowCellIndex = 'previousRowCellIndex';\n cellSelectedArgs[\"\" + prvRowCellIndex] = this.prevECIdxs;\n this.onActionComplete(cellSelectedArgs, events.cellSelected);\n };\n /**\n * Select cells with existing cell selection by passing row and column index.\n *\n * @param {IIndex} cellIndexes - Defines the collection of row and column index.\n * @returns {void}\n * @hidden\n */\n Selection.prototype.addCellsToSelection = function (cellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell;\n var index;\n this.currentIndex = cellIndexes[0].rowIndex;\n var cncl = 'cancel';\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n var left = gObj.getFrozenLeftCount();\n var movable = gObj.getMovableColumnsCount();\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n this.hideAutoFill();\n var col = gObj.getColumnByIndex(cellIndexes[0].cellIndex);\n var rowObj;\n gridActionHandler(this.parent, function (tableName, rows) {\n rowObj = rows[cellIndexes[0].rowIndex];\n }, [\n !col.getFreezeTableName() || col.getFreezeTableName() === literals.frozenLeft ? gObj.getRowsObject() : [],\n col.getFreezeTableName() === 'movable' ? gObj.getMovableRowsObject() : [],\n col.getFreezeTableName() === literals.frozenRight ? gObj.getFrozenRightRowsObject() : []\n ]);\n if (gObj.groupSettings.columns.length > 0) {\n rowObj = gObj.getRowObjectFromUID(this.target.parentElement.getAttribute('data-uid'));\n }\n var foreignKeyData = [];\n for (var _i = 0, cellIndexes_1 = cellIndexes; _i < cellIndexes_1.length; _i++) {\n var cellIndex = cellIndexes_1[_i];\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[parseInt(i.toString(), 10)].rowIndex === cellIndex.rowIndex) {\n index = i;\n break;\n }\n }\n selectedCell = this.getSelectedMovableCell(cellIndex);\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n var idx = col.getFreezeTableName() === 'movable' ? cellIndex.cellIndex - left\n : col.getFreezeTableName() === literals.frozenRight ? cellIndex.cellIndex - (left + movable) : cellIndex.cellIndex;\n if (gObj.groupSettings.columns.length > 0) {\n foreignKeyData.push(rowObj.cells[idx + gObj.groupSettings.columns.length].foreignKeyData);\n }\n else {\n foreignKeyData.push(rowObj.cells[parseInt(idx.toString(), 10)].foreignKeyData);\n }\n var args = {\n cancel: false, data: selectedData, cellIndex: cellIndexes[0],\n isShiftPressed: this.isMultiShiftRequest,\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n previousRowCell: this.prevECIdxs ?\n gObj.getCellFromIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n var prvRowCellIndex = 'previousRowCellIndex';\n args[\"\" + prvRowCellIndex] = this.prevECIdxs;\n var isUnSelected = index > -1;\n if (isUnSelected) {\n var selectedCellIdx = this.selectedRowCellIndexes[parseInt(index.toString(), 10)].cellIndexes;\n if (selectedCellIdx.indexOf(cellIndex.cellIndex) > -1) {\n this.cellDeselect(events.cellDeselecting, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n selectedCellIdx.splice(selectedCellIdx.indexOf(cellIndex.cellIndex), 1);\n if (selectedCellIdx.length === 0) {\n this.selectedRowCellIndexes.splice(index, 1);\n }\n selectedCell.classList.remove('e-cellselectionbackground');\n selectedCell.removeAttribute('aria-selected');\n this.cellDeselect(events.cellDeselected, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n }\n else {\n isUnSelected = false;\n this.onActionBegin(args, events.cellSelecting);\n this.addRowCellIndex({ rowIndex: cellIndex.rowIndex, cellIndex: cellIndex.cellIndex });\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n }\n }\n else {\n this.onActionBegin(args, events.cellSelecting);\n if (!isNullOrUndefined(args) && args[\"\" + cncl] === true) {\n return;\n }\n this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n if (!isUnSelected) {\n var cellSelectedArgs = {\n data: selectedData, cellIndex: cellIndexes[0], currentCell: selectedCell,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) :\n undefined, selectedRowCellIndex: this.selectedRowCellIndexes\n };\n cellSelectedArgs[\"\" + prvRowCellIndex] = this.prevECIdxs;\n this.onActionComplete(cellSelectedArgs, events.cellSelected);\n this.cellselected = true;\n }\n this.updateCellProps(cellIndex, cellIndex);\n }\n };\n Selection.prototype.getColIndex = function (rowIndex, index) {\n var frzCols = this.parent.isFrozenGrid();\n var col = this.parent.getColumnByIndex(index);\n var cells = getCellsByTableName(this.parent, col, rowIndex);\n if (cells) {\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[parseInt(m.toString(), 10)].getAttribute(literals.dataColIndex), 10);\n if (colIndex === index) {\n if (frzCols) {\n if (col.getFreezeTableName() === 'movable') {\n m += this.parent.getFrozenLeftCount();\n }\n else if (col.getFreezeTableName() === literals.frozenRight) {\n m += (this.parent.getFrozenLeftColumnsCount() + this.parent.getMovableColumnsCount());\n }\n }\n return m;\n }\n }\n }\n return -1;\n };\n Selection.prototype.getLastColIndex = function (rowIndex) {\n var cells = this.parent.getFrozenColumns() ? this.parent.getMovableDataRows()[parseInt(rowIndex.toString(), 10)].querySelectorAll('td.e-rowcell')\n : this.parent.getDataRows()[parseInt(rowIndex.toString(), 10)].querySelectorAll('td.e-rowcell');\n return parseInt(cells[cells.length - 1].getAttribute(literals.dataColIndex), 10);\n };\n Selection.prototype.clearCell = function () {\n this.clearCellSelection();\n };\n Selection.prototype.cellDeselect = function (type, cellIndexes, data, cells, foreignKeyData) {\n var cancl = 'cancel';\n if (cells[0] && cells[0].classList.contains(literals.gridChkBox)) {\n this.updateCheckBoxes(closest(cells[0], 'tr'));\n }\n var args = {\n cells: cells, data: data, cellIndexes: cellIndexes, foreignKeyData: foreignKeyData, cancel: false\n };\n this.parent.trigger(type, args);\n this.isPreventCellSelect = args[\"\" + cancl];\n };\n Selection.prototype.updateCellSelection = function (selectedCell, rowIndex, cellIndex) {\n if (!isNullOrUndefined(rowIndex)) {\n this.addRowCellIndex({ rowIndex: rowIndex, cellIndex: cellIndex });\n }\n selectedCell.classList.add('e-cellselectionbackground');\n if (selectedCell.classList.contains(literals.gridChkBox)) {\n this.updateCheckBoxes(closest(selectedCell, 'tr'), true);\n }\n this.addAttribute(selectedCell);\n };\n Selection.prototype.addAttribute = function (cell) {\n this.target = cell;\n if (!isNullOrUndefined(cell)) {\n cell.setAttribute('aria-selected', 'true');\n if (!this.preventFocus) {\n this.focus.onClick({ target: cell }, true);\n }\n }\n };\n Selection.prototype.updateCellProps = function (startIndex, endIndex) {\n this.prevCIdxs = startIndex;\n this.prevECIdxs = endIndex;\n this.isCellSelected = this.selectedRowCellIndexes.length && true;\n };\n Selection.prototype.addRowCellIndex = function (rowCellIndex) {\n var isRowAvail;\n var index;\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[parseInt(i.toString(), 10)].rowIndex === rowCellIndex.rowIndex) {\n isRowAvail = true;\n index = i;\n break;\n }\n }\n if (isRowAvail) {\n if (this.selectedRowCellIndexes[parseInt(index.toString(), 10)].cellIndexes.indexOf(rowCellIndex.cellIndex) < 0) {\n this.selectedRowCellIndexes[parseInt(index.toString(), 10)].cellIndexes.push(rowCellIndex.cellIndex);\n }\n }\n else {\n this.selectedRowCellIndexes.push({ rowIndex: rowCellIndex.rowIndex, cellIndexes: [rowCellIndex.cellIndex] });\n }\n };\n /**\n * Deselects the currently selected cells.\n *\n * @returns {void}\n */\n Selection.prototype.clearCellSelection = function () {\n if (this.isCellSelected) {\n var gObj = this.parent;\n var selectedCells = this.getSelectedCellsElement();\n var rowCell = this.selectedRowCellIndexes;\n var data = [];\n var cells = [];\n var foreignKeyData = [];\n var currentViewData = this.getCurrentBatchRecordChanges();\n var frzCols = gObj.isFrozenGrid();\n this.hideAutoFill();\n for (var i = 0, len = rowCell.length; i < len; i++) {\n data.push(currentViewData[rowCell[parseInt(i.toString(), 10)].rowIndex]);\n var rowObj = this.getRowObj(rowCell[parseInt(i.toString(), 10)].rowIndex);\n for (var j = 0, cLen = rowCell[parseInt(i.toString(), 10)].cellIndexes.length; j < cLen; j++) {\n if (frzCols) {\n var col = gObj.getColumnByIndex(rowCell[parseInt(i.toString(), 10)]\n .cellIndexes[parseInt(j.toString(), 10)]);\n cells.push(getCellByColAndRowIndex(this.parent, col, rowCell[parseInt(i.toString(), 10)].rowIndex, rowCell[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)]));\n }\n else {\n if (rowObj.cells) {\n foreignKeyData.push(rowObj.cells[rowCell[parseInt(i.toString(), 10)]\n .cellIndexes[parseInt(j.toString(), 10)]].foreignKeyData);\n }\n cells.push(gObj.getCellFromIndex(rowCell[parseInt(i.toString(), 10)].rowIndex, rowCell[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)]));\n }\n }\n }\n this.cellDeselect(events.cellDeselecting, rowCell, data, cells, foreignKeyData);\n if (this.isPreventCellSelect === true) {\n return;\n }\n for (var i = 0, len = selectedCells.length; i < len; i++) {\n selectedCells[parseInt(i.toString(), 10)].classList.remove('e-cellselectionbackground');\n selectedCells[parseInt(i.toString(), 10)].removeAttribute('aria-selected');\n }\n if (this.bdrElement) {\n this.showHideBorders('none');\n }\n this.selectedRowCellIndexes = [];\n this.isCellSelected = false;\n if (!this.isDragged && this.cellselected) {\n this.cellDeselect(events.cellDeselected, rowCell, data, cells, foreignKeyData);\n }\n }\n };\n Selection.prototype.getSelectedCellsElement = function () {\n var gObj = this.parent;\n var rows = gObj.getDataRows();\n var mRows;\n if (gObj.isFrozenGrid()) {\n mRows = gObj.getMovableDataRows();\n rows = gObj.addMovableRows(rows, mRows);\n if (gObj.getFrozenMode() === literals.leftRight) {\n rows = gObj.addMovableRows(rows, gObj.getFrozenRightDataRows());\n }\n }\n var cells = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n cells = cells.concat([].slice.call(rows[parseInt(i.toString(), 10)].getElementsByClassName('e-cellselectionbackground')));\n }\n return cells;\n };\n Selection.prototype.mouseMoveHandler = function (e) {\n e.preventDefault();\n var gBRect = this.parent.element.getBoundingClientRect();\n var x1 = this.x;\n var y1 = this.y;\n var position = getPosition(e);\n var x2 = position.x - gBRect.left;\n var y2 = position.y - gBRect.top;\n var tmp;\n var target = closest(e.target, 'tr');\n this.isDragged = true;\n if (!this.isCellDrag) {\n if (!target) {\n target = closest(document.elementFromPoint(this.parent.element.offsetLeft + 2, e.clientY), 'tr');\n }\n if (x1 > x2) {\n tmp = x2;\n x2 = x1;\n x1 = tmp;\n }\n if (y1 > y2) {\n tmp = y2;\n y2 = y1;\n y1 = tmp;\n }\n this.element.style.left = x1 + 'px';\n this.element.style.top = y1 + 'px';\n this.element.style.width = x2 - x1 + 'px';\n this.element.style.height = y2 - y1 + 'px';\n }\n if (target && !e.ctrlKey && !e.shiftKey) {\n var rowIndex = parseInt(target.getAttribute(literals.dataRowIndex), 10);\n if (!this.isCellDrag) {\n this.hideAutoFill();\n this.selectRowsByRange(this.startDIndex, rowIndex);\n this.isRowDragSelected = true;\n }\n else {\n var td = parentsUntil(e.target, literals.rowCell);\n if (td) {\n this.startAFCell = this.startCell;\n this.endAFCell = parentsUntil(e.target, literals.rowCell);\n this.selectLikeExcel(e, rowIndex, parseInt(td.getAttribute(literals.dataColIndex), 10));\n }\n }\n }\n };\n Selection.prototype.selectLikeExcel = function (e, rowIndex, cellIndex) {\n if (!this.isAutoFillSel) {\n this.clearCellSelection();\n this.selectCellsByRange({ rowIndex: this.startDIndex, cellIndex: this.startDCellIndex }, { rowIndex: rowIndex, cellIndex: cellIndex });\n this.drawBorders();\n }\n else { //Autofill\n this.showAFBorders();\n this.selectLikeAutoFill(e);\n }\n };\n Selection.prototype.drawBorders = function () {\n if (this.selectionSettings.cellSelectionMode === 'BoxWithBorder' && this.selectedRowCellIndexes.length && !this.parent.isEdit) {\n this.parent.element.classList.add('e-enabledboxbdr');\n if (!this.bdrElement) {\n this.createBorders();\n }\n this.positionBorders();\n }\n else {\n this.showHideBorders('none');\n }\n };\n Selection.prototype.isLastCell = function (cell) {\n var cells = [].slice.call(cell.parentElement.querySelectorAll('.e-rowcell:not(.e-hide)'));\n return cells[cells.length - 1] === cell;\n };\n Selection.prototype.isLastRow = function (cell) {\n var rows = [].slice.call(closest(cell, literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n return cell.parentElement === rows[rows.length - 1];\n };\n Selection.prototype.isFirstRow = function (cell) {\n var rows = [].slice.call(closest(cell, literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n return cell.parentElement === rows[0];\n };\n Selection.prototype.isFirstCell = function (cell) {\n var cells = [].slice.call(cell.parentElement.querySelectorAll('.e-rowcell:not(.e-hide)'));\n return cells[0] === cell;\n };\n Selection.prototype.setBorders = function (parentEle, border, bdrStr) {\n var cells = [].slice.call(parentEle.getElementsByClassName('e-cellselectionbackground')).\n filter(function (ele) { return ele.style.display === ''; });\n if (cells.length) {\n var isFrozen = this.parent.isFrozenGrid();\n var start = cells[0];\n var end = cells[cells.length - 1];\n var stOff = start.getBoundingClientRect();\n var endOff = end.getBoundingClientRect();\n var parentOff = start.offsetParent.getBoundingClientRect();\n var rowHeight = this.isLastRow(end) && (bdrStr === '1' || bdrStr === '2' || bdrStr === '5') ? 2 : 0;\n var topOffSet = this.parent.frozenRows && (bdrStr === '1' || bdrStr === '2') &&\n this.isFirstRow(start) ? 1.5 : 0;\n var leftOffset = isFrozen && (bdrStr === '2' || bdrStr === '4') && this.isFirstCell(start) ? 1 : 0;\n var rightOffset = ((this.parent.getFrozenMode() === 'Right' && (bdrStr === '1' || bdrStr === '3'))\n || (this.parent.getFrozenMode() === literals.leftRight && (bdrStr === '5' || bdrStr === '6')))\n && this.isFirstCell(start) ? 1 : 0;\n if (this.parent.enableRtl) {\n border.style.right = parentOff.right - stOff.right - leftOffset + 'px';\n border.style.width = stOff.right - endOff.left + leftOffset + 1 + 'px';\n }\n else {\n border.style.left = stOff.left - parentOff.left - leftOffset - rightOffset + 'px';\n border.style.width = endOff.right - stOff.left + leftOffset - rightOffset + 1 + 'px';\n }\n border.style.top = stOff.top - parentOff.top - topOffSet + 'px';\n border.style.height = endOff.top - stOff.top > 0 ?\n (endOff.top - parentOff.top + endOff.height + 1) - (stOff.top - parentOff.top) - rowHeight + topOffSet + 'px' :\n endOff.height + topOffSet - rowHeight + 1 + 'px';\n this.selectDirection += bdrStr;\n }\n else {\n border.style.display = 'none';\n }\n };\n Selection.prototype.positionBorders = function () {\n this.updateStartEndCells();\n if (!this.startCell || !this.bdrElement || !this.selectedRowCellIndexes.length) {\n return;\n }\n this.selectDirection = '';\n this.showHideBorders('');\n this.setBorders(this.parent.getContentTable(), this.bdrElement, '1');\n if (this.parent.isFrozenGrid()) {\n this.setBorders(this.parent.contentModule.getMovableContent(), this.mcBdrElement, '2');\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.setBorders(this.parent.contentModule.getFrozenRightContent(), this.frcBdrElement, '5');\n }\n }\n if (this.parent.frozenRows) {\n this.setBorders(this.parent.getHeaderTable(), this.fhBdrElement, '3');\n if (this.parent.isFrozenGrid()) {\n this.setBorders(this.parent.headerModule.getMovableHeader(), this.mhBdrElement, '4');\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.setBorders(this.parent.headerModule.getFrozenRightHeader(), this.frhBdrElement, '6');\n }\n }\n }\n this.applyBorders(this.selectDirection);\n };\n /* eslint-enable */\n Selection.prototype.applyBothFrozenBorders = function (str) {\n var rtl = this.parent.enableRtl;\n switch (str.length) {\n case 6:\n {\n this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n this.mcBdrElement.style.borderWidth = this.bottom;\n this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n this.mhBdrElement.style.borderWidth = this.top;\n this.frcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n this.frhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n }\n break;\n case 4:\n {\n if (str.includes('1') && str.includes('2') && str.includes('3') && str.includes('4')) {\n this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n this.mhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n this.mcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n }\n if (str.includes('2') && str.includes('4') && str.includes('5') && str.includes('6')) {\n this.mcBdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n this.mhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n this.frcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n this.frhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n }\n }\n break;\n case 3:\n {\n this.bdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n this.mcBdrElement.style.borderWidth = this.top_bottom;\n this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n this.mhBdrElement.style.borderWidth = this.top_bottom;\n this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n }\n }\n break;\n case 2:\n {\n if (str.includes('1')) {\n this.mcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = this.top_right_left;\n }\n }\n if (str.includes('2')) {\n this.bdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n if (this.parent.frozenRows) {\n this.mhBdrElement.style.borderWidth = this.top_right_left;\n }\n }\n if (str.includes('3')) {\n this.mhBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n this.bdrElement.style.borderWidth = this.right_bottom_left;\n }\n if (str.includes('4')) {\n this.fhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n this.frhBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n this.mcBdrElement.style.borderWidth = this.right_bottom_left;\n }\n if (str.includes('5')) {\n this.mcBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n if (this.parent.frozenRows) {\n this.frhBdrElement.style.borderWidth = this.top_right_left;\n }\n }\n if (str.includes('6')) {\n this.mhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n this.frcBdrElement.style.borderWidth = this.right_bottom_left;\n }\n }\n break;\n default:\n this.bdrElement.style.borderWidth = this.all_border;\n this.mcBdrElement.style.borderWidth = this.all_border;\n this.frcBdrElement.style.borderWidth = this.all_border;\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = this.all_border;\n this.mhBdrElement.style.borderWidth = this.all_border;\n this.frhBdrElement.style.borderWidth = this.all_border;\n }\n break;\n }\n };\n Selection.prototype.applyBorders = function (str) {\n var rtl = this.parent.enableRtl;\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.applyBothFrozenBorders(str);\n }\n else {\n switch (str.length) {\n case 4:\n {\n if (this.parent.getFrozenMode() === 'Right') {\n this.bdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n this.mcBdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n this.fhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n this.mhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n }\n else {\n this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n this.mcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n this.mhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n }\n }\n break;\n case 2:\n {\n if (this.parent.getFrozenMode() === 'Right') {\n this.bdrElement.style.borderWidth = str.includes('2') ? rtl ? this.top_bottom_left\n : this.top_right_bottom : this.right_bottom_left;\n this.mcBdrElement.style.borderWidth = str.includes('1') ? rtl ? this.top_right_bottom\n : this.top_bottom_left : this.right_bottom_left;\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = str.includes('1') ? this.top_right_left\n : rtl ? this.top_bottom_left : this.top_right_bottom;\n this.mhBdrElement.style.borderWidth = str.includes('2') ? this.top_right_left\n : rtl ? this.top_right_bottom : this.top_bottom_left;\n }\n }\n else {\n this.bdrElement.style.borderWidth = str.includes('2') ? rtl ? this.top_right_bottom\n : this.top_bottom_left : this.right_bottom_left;\n if (this.parent.isFrozenGrid()) {\n this.mcBdrElement.style.borderWidth = str.includes('1') ? rtl ? this.top_bottom_left\n : this.top_right_bottom : this.right_bottom_left;\n }\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = str.includes('1') ? this.top_right_left\n : rtl ? this.top_right_bottom : this.top_bottom_left;\n if (this.parent.isFrozenGrid()) {\n this.mhBdrElement.style.borderWidth = str.includes('2') ? this.top_right_left\n : rtl ? this.top_bottom_left : this.top_right_bottom;\n }\n }\n }\n }\n break;\n default:\n this.bdrElement.style.borderWidth = this.all_border;\n if (this.parent.isFrozenGrid()) {\n this.mcBdrElement.style.borderWidth = this.all_border;\n }\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = this.all_border;\n if (this.parent.isFrozenGrid()) {\n this.mhBdrElement.style.borderWidth = this.all_border;\n }\n }\n break;\n }\n }\n };\n Selection.prototype.createBorders = function () {\n if (!this.bdrElement) {\n this.bdrElement = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel', id: this.parent.element.id + '_bdr',\n styles: 'width: 2px; border-width: 0;'\n }));\n if (this.parent.isFrozenGrid()) {\n this.mcBdrElement = this.parent.contentModule.getMovableContent().appendChild(createElement('div', {\n className: 'e-xlsel', id: this.parent.element.id + '_mcbdr',\n styles: 'height: 2px; border-width: 0;'\n }));\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.frcBdrElement = this.parent.contentModule.getFrozenRightContent().appendChild(createElement('div', {\n className: 'e-xlsel', id: this.parent.element.id + '_frcbdr',\n styles: 'height: 2px; border-width: 0;'\n }));\n }\n }\n if (this.parent.frozenRows) {\n this.fhBdrElement = this.parent.getHeaderTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_fhbdr', styles: 'height: 2px;' }));\n }\n if (this.parent.frozenRows && this.parent.isFrozenGrid()) {\n this.mhBdrElement = this.parent.headerModule.getMovableHeader().appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_mhbdr', styles: 'height: 2px;' }));\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.frhBdrElement = this.parent.headerModule.getFrozenRightHeader().appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_frhbdr', styles: 'height: 2px;' }));\n }\n }\n }\n };\n Selection.prototype.showHideBorders = function (display) {\n if (this.bdrElement) {\n this.bdrElement.style.display = display;\n if (this.parent.isFrozenGrid()) {\n this.mcBdrElement.style.display = display;\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.frcBdrElement.style.display = display;\n }\n }\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.display = display;\n }\n if (this.parent.frozenRows && this.parent.isFrozenGrid()) {\n this.mhBdrElement.style.display = display;\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.frhBdrElement.style.display = display;\n }\n }\n }\n };\n Selection.prototype.drawAFBorders = function () {\n if (!this.bdrAFBottom) {\n this.createAFBorders();\n }\n this.positionAFBorders();\n };\n Selection.prototype.positionAFBorders = function () {\n if (!this.startCell || !this.bdrAFLeft) {\n return;\n }\n var stOff = this.startAFCell.getBoundingClientRect();\n var endOff = this.endAFCell.getBoundingClientRect();\n var top = endOff.top - stOff.top > 0 ? 1 : 0;\n var firstCellTop = endOff.top - stOff.top >= 0 && (parentsUntil(this.startAFCell, literals.movableContent) ||\n parentsUntil(this.startAFCell, 'e-frozencontent')) && this.isFirstRow(this.startAFCell) ? 1.5 : 0;\n var firstCellLeft = (parentsUntil(this.startAFCell, literals.movableContent) ||\n parentsUntil(this.startAFCell, literals.movableHeader)) && this.isFirstCell(this.startAFCell) ? 1 : 0;\n var rowHeight = this.isLastRow(this.endAFCell) && (parentsUntil(this.endAFCell, literals.movableContent) ||\n parentsUntil(this.endAFCell, 'e-frozencontent')) ? 2 : 0;\n var parentOff = this.startAFCell.offsetParent.getBoundingClientRect();\n var parentRect = this.parent.element.getBoundingClientRect();\n var sTop = this.startAFCell.offsetParent.parentElement.scrollTop;\n var sLeft = this.startAFCell.offsetParent.parentElement.scrollLeft;\n var scrollTop = sTop - this.startAFCell.offsetTop;\n var scrollLeft = sLeft - this.startAFCell.offsetLeft;\n var totalHeight = this.parent.element.clientHeight;\n var totalWidth = this.parent.element.clientWidth;\n scrollTop = scrollTop > 0 ? Math.floor(scrollTop) - 1 : 0;\n scrollLeft = scrollLeft > 0 ? scrollLeft : 0;\n var left = stOff.left - parentRect.left;\n if (!this.parent.enableRtl) {\n this.bdrAFLeft.style.left = left - firstCellLeft + scrollLeft - 1 + 'px';\n this.bdrAFRight.style.left = endOff.left - parentRect.left - 2 + endOff.width + 'px';\n this.bdrAFRight.style.width = totalWidth <= parseInt(this.bdrAFRight.style.left, 10) ? '0px' : '2px';\n this.bdrAFTop.style.left = left + scrollLeft - 0.5 + 'px';\n this.bdrAFTop.style.width = parseInt(this.bdrAFRight.style.left, 10) - parseInt(this.bdrAFLeft.style.left, 10)\n - firstCellLeft + 1 + 'px';\n if (totalWidth <= (parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10))) {\n var leftRemove = (parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10)) - totalWidth;\n this.bdrAFTop.style.width = parseInt(this.bdrAFTop.style.width, 10) - leftRemove + 'px';\n }\n }\n else {\n var scrolloffSet = (parentsUntil(this.startAFCell, literals.movableContent) ||\n parentsUntil(this.startAFCell, literals.movableHeader)) ? stOff.right -\n this.startAFCell.offsetParent.parentElement.getBoundingClientRect().width -\n parentRect.left : 0;\n this.bdrAFLeft.style.right = parentRect.right - endOff.right - 2 + endOff.width + 'px';\n this.bdrAFLeft.style.width = totalWidth <= parseInt(this.bdrAFLeft.style.right, 10) ? '0px' : '2px';\n this.bdrAFRight.style.right = parentRect.right - stOff.right - firstCellLeft + scrolloffSet - 1 + 'px';\n this.bdrAFTop.style.left = endOff.left - parentRect.left - 0.5 + 'px';\n this.bdrAFTop.style.width = parseInt(this.bdrAFLeft.style.right, 10) - parseInt(this.bdrAFRight.style.right, 10)\n - firstCellLeft + 1 + 'px';\n if (parseInt(this.bdrAFTop.style.left, 10) < 0) {\n this.bdrAFTop.style.width = parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10) + 'px';\n this.bdrAFTop.style.left = '0px';\n }\n }\n this.bdrAFLeft.style.top = stOff.top - parentRect.top - firstCellTop + scrollTop + 'px';\n this.bdrAFLeft.style.height = endOff.top - stOff.top > 0 ?\n (endOff.top - parentOff.top + endOff.height + 1) - (stOff.top - parentOff.top) + firstCellTop - rowHeight - scrollTop + 'px' :\n endOff.height + firstCellTop - rowHeight - scrollTop + 'px';\n this.bdrAFRight.style.top = this.bdrAFLeft.style.top;\n this.bdrAFRight.style.height = parseInt(this.bdrAFLeft.style.height, 10) + 'px';\n this.bdrAFTop.style.top = this.bdrAFRight.style.top;\n this.bdrAFBottom.style.left = this.bdrAFTop.style.left;\n this.bdrAFBottom.style.top = parseFloat(this.bdrAFLeft.style.top) + parseFloat(this.bdrAFLeft.style.height) - top - 1 + 'px';\n this.bdrAFBottom.style.width = totalHeight <= parseFloat(this.bdrAFBottom.style.top) ? '0px' : this.bdrAFTop.style.width;\n if (totalHeight <= (parseInt(this.bdrAFLeft.style.height, 10) + parseInt(this.bdrAFLeft.style.top, 10))) {\n var topRemove = parseInt(this.bdrAFLeft.style.height, 10) + parseInt(this.bdrAFLeft.style.top, 10) - totalHeight;\n this.bdrAFLeft.style.height = parseInt(this.bdrAFLeft.style.height, 10) - topRemove + 'px';\n this.bdrAFRight.style.height = parseInt(this.bdrAFLeft.style.height, 10) + 'px';\n }\n };\n Selection.prototype.createAFBorders = function () {\n if (!this.bdrAFLeft) {\n this.bdrAFLeft = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdrafleft', styles: 'width: 2px;' }));\n this.bdrAFRight = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdrafright', styles: 'width: 2px;' }));\n this.bdrAFBottom = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdrafbottom', styles: 'height: 2px;' }));\n this.bdrAFTop = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdraftop', styles: 'height: 2px;' }));\n }\n };\n Selection.prototype.showAFBorders = function () {\n if (this.bdrAFLeft) {\n this.bdrAFLeft.style.display = '';\n this.bdrAFRight.style.display = '';\n this.bdrAFBottom.style.display = '';\n this.bdrAFTop.style.display = '';\n }\n };\n Selection.prototype.hideAFBorders = function () {\n if (this.bdrAFLeft) {\n this.bdrAFLeft.style.display = 'none';\n this.bdrAFRight.style.display = 'none';\n this.bdrAFBottom.style.display = 'none';\n this.bdrAFTop.style.display = 'none';\n }\n };\n Selection.prototype.updateValue = function (rIdx, cIdx, cell) {\n var args = this.createBeforeAutoFill(rIdx, cIdx, cell);\n if (!args.cancel) {\n var col = this.parent.getColumnByIndex(cIdx);\n if (this.parent.editModule && cell) {\n if (col.type === 'number') {\n this.parent.editModule.updateCell(rIdx, col.field, parseFloat(args.value));\n }\n else {\n this.parent.editModule.updateCell(rIdx, col.field, args.value);\n }\n }\n }\n };\n Selection.prototype.createBeforeAutoFill = function (rowIndex, colIndex, cell) {\n var col = this.parent.getColumnByIndex(colIndex);\n var args = {\n column: col,\n value: cell.innerText\n };\n this.parent.trigger(events.beforeAutoFill, args);\n return args;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Selection.prototype.getAutoFillCells = function (rowIndex, startCellIdx) {\n var cls = '.e-cellselectionbackground';\n var cells = [].slice.call(this.parent.getDataRows()[parseInt(rowIndex.toString(), 10)].querySelectorAll(cls));\n if (this.parent.isFrozenGrid()) {\n cells = cells.concat([].slice.call(this.parent.getMovableDataRows()[parseInt(rowIndex.toString(), 10)].querySelectorAll(cls)));\n if (this.parent.getFrozenMode() === literals.leftRight) {\n cells = cells.concat([].slice.call(this.parent.getFrozenRightDataRows()[parseInt(rowIndex.toString(), 10)]\n .querySelectorAll(cls)));\n }\n }\n return cells;\n };\n Selection.prototype.selectLikeAutoFill = function (e, isApply) {\n var startrowIdx = parseInt(parentsUntil(this.startAFCell, literals.row).getAttribute(literals.dataRowIndex), 10);\n var startCellIdx = parseInt(this.startAFCell.getAttribute(literals.dataColIndex), 10);\n var endrowIdx = parseInt(parentsUntil(this.endAFCell, literals.row).getAttribute(literals.dataRowIndex), 10);\n var endCellIdx = parseInt(this.endAFCell.getAttribute(literals.dataColIndex), 10);\n var rowLen = this.selectedRowCellIndexes.length - 1;\n var colLen = this.selectedRowCellIndexes[0].cellIndexes.length - 1;\n switch (true) { //direction\n case !isApply && this.endAFCell.classList.contains('e-cellselectionbackground') &&\n !!parentsUntil(e.target, literals.rowCell):\n this.startAFCell = this.parent.getCellFromIndex(startrowIdx, startCellIdx);\n this.endAFCell = this.parent.getCellFromIndex(startrowIdx + rowLen, startCellIdx + colLen);\n this.drawAFBorders();\n break;\n case this.autoFillRLselection && startCellIdx + colLen < endCellIdx && //right\n endCellIdx - startCellIdx - colLen + 1 > endrowIdx - startrowIdx - rowLen // right bottom\n && endCellIdx - startCellIdx - colLen + 1 > startrowIdx - endrowIdx: //right top\n this.endAFCell = this.parent.getCellFromIndex(startrowIdx + rowLen, endCellIdx);\n endrowIdx = parseInt(parentsUntil(this.endAFCell, literals.row).getAttribute(literals.dataRowIndex), 10);\n endCellIdx = parseInt(this.endAFCell.getAttribute(literals.dataColIndex), 10);\n if (!isApply) {\n this.drawAFBorders();\n }\n else {\n var cellIdx = parseInt(this.endCell.getAttribute(literals.dataColIndex), 10);\n for (var i = startrowIdx; i <= endrowIdx; i++) {\n var cells = this.getAutoFillCells(i, startCellIdx);\n var c = 0;\n for (var j = cellIdx + 1; j <= endCellIdx; j++) {\n if (c > colLen) {\n c = 0;\n }\n this.updateValue(i, j, cells[parseInt(c.toString(), 10)]);\n c++;\n }\n }\n this.selectCellsByRange({ rowIndex: startrowIdx, cellIndex: this.startCellIndex }, { rowIndex: endrowIdx, cellIndex: endCellIdx });\n }\n break;\n case this.autoFillRLselection && startCellIdx > endCellIdx && // left\n startCellIdx - endCellIdx + 1 > endrowIdx - startrowIdx - rowLen && //left top\n startCellIdx - endCellIdx + 1 > startrowIdx - endrowIdx: // left bottom\n this.startAFCell = this.parent.getCellFromIndex(startrowIdx, endCellIdx);\n this.endAFCell = this.endCell;\n if (!isApply) {\n this.drawAFBorders();\n }\n else {\n for (var i = startrowIdx; i <= startrowIdx + rowLen; i++) {\n var cells = this.getAutoFillCells(i, startCellIdx);\n cells.reverse();\n var c = 0;\n for (var j = this.startCellIndex - 1; j >= endCellIdx; j--) {\n if (c > colLen) {\n c = 0;\n }\n this.updateValue(i, j, cells[parseInt(c.toString(), 10)]);\n c++;\n }\n }\n this.selectCellsByRange({ rowIndex: startrowIdx, cellIndex: endCellIdx }, { rowIndex: startrowIdx + rowLen, cellIndex: this.startCellIndex + colLen });\n }\n break;\n case startrowIdx > endrowIdx: //up\n this.startAFCell = this.parent.getCellFromIndex(endrowIdx, startCellIdx);\n this.endAFCell = this.endCell;\n if (!isApply) {\n this.drawAFBorders();\n }\n else {\n var trIdx = parseInt(this.endCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n var r = trIdx;\n for (var i = startrowIdx - 1; i >= endrowIdx; i--) {\n if (r === this.startIndex - 1) {\n r = trIdx;\n }\n var cells = this.getAutoFillCells(r, startCellIdx);\n var c = 0;\n r--;\n for (var j = this.startCellIndex; j <= this.startCellIndex + colLen; j++) {\n this.updateValue(i, j, cells[parseInt(c.toString(), 10)]);\n c++;\n }\n }\n this.selectCellsByRange({ rowIndex: endrowIdx, cellIndex: startCellIdx + colLen }, { rowIndex: startrowIdx + rowLen, cellIndex: startCellIdx });\n }\n break;\n default: //down\n this.endAFCell = this.parent.getCellFromIndex(endrowIdx, startCellIdx + colLen);\n if (!isApply) {\n this.drawAFBorders();\n }\n else {\n var trIdx = parseInt(this.endCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n var r = this.startIndex;\n for (var i = trIdx + 1; i <= endrowIdx; i++) {\n if (r === trIdx + 1) {\n r = this.startIndex;\n }\n var cells = this.getAutoFillCells(r, startCellIdx);\n r++;\n var c = 0;\n for (var m = this.startCellIndex; m <= this.startCellIndex + colLen; m++) {\n this.updateValue(i, m, cells[parseInt(c.toString(), 10)]);\n c++;\n }\n }\n this.selectCellsByRange({ rowIndex: trIdx - rowLen, cellIndex: startCellIdx }, { rowIndex: endrowIdx, cellIndex: startCellIdx + colLen });\n }\n break;\n }\n };\n Selection.prototype.mouseUpHandler = function (e) {\n document.body.classList.remove('e-disableuserselect');\n if (this.element) {\n remove(this.element);\n }\n if (this.isDragged && this.selectedRowCellIndexes.length === 1 && this.selectedRowCellIndexes[0].cellIndexes.length === 1) {\n this.mUPTarget = parentsUntil(e.target, literals.rowCell);\n }\n else {\n this.mUPTarget = null;\n }\n var closeRowCell = closest(e.target, '.e-rowcell');\n if (this.isDragged && !this.isAutoFillSel && this.selectionSettings.mode === 'Cell' &&\n closeRowCell && closeRowCell.classList.contains(literals.rowCell)) {\n var rowIndex = parseInt(closeRowCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n var cellIndex = parseInt(closeRowCell.getAttribute(literals.dataColIndex), 10);\n this.isDragged = false;\n this.clearCellSelection();\n this.selectCellsByRange({ rowIndex: this.startDIndex, cellIndex: this.startDCellIndex }, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n this.isDragged = false;\n this.updateAutoFillPosition();\n if (this.isAutoFillSel) {\n var lastCell = parentsUntil(e.target, literals.rowCell);\n this.endAFCell = lastCell ? lastCell : this.endCell === this.endAFCell ? this.startAFCell : this.endAFCell;\n this.startAFCell = this.startCell;\n this.updateStartCellsIndex();\n this.selectLikeAutoFill(e, true);\n this.updateAutoFillPosition();\n this.hideAFBorders();\n this.positionBorders();\n this.isAutoFillSel = false;\n }\n EventHandler.remove(this.parent.getContent(), 'mousemove', this.mouseMoveHandler);\n if (this.parent.frozenRows) {\n EventHandler.remove(this.parent.getHeaderContent(), 'mousemove', this.mouseMoveHandler);\n }\n EventHandler.remove(document, 'mouseup', this.mouseUpHandler);\n };\n Selection.prototype.hideAutoFill = function () {\n if (this.autofill) {\n this.autofill.style.display = 'none';\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Selection.prototype.updateAutoFillPosition = function () {\n if (this.parent.enableAutoFill && !this.parent.isEdit &&\n this.selectionSettings.cellSelectionMode.indexOf('Box') > -1 && !this.isRowType() && !this.isSingleSel()\n && this.selectedRowCellIndexes.length) {\n var index = parseInt(this.target.getAttribute(literals.dataColIndex), 10);\n var rindex = parseInt(this.target.getAttribute('index'), 10);\n var rowIndex = this.selectedRowCellIndexes[this.selectedRowCellIndexes.length - 1].rowIndex;\n var cells = this.getAutoFillCells(rowIndex, index).filter(function (ele) { return ele.style.display === ''; });\n var col = this.parent.getColumnByIndex(index);\n var isFrozenCol = col.getFreezeTableName() === 'movable';\n var isFrozenRow = rindex < this.parent.frozenRows;\n var isFrozenRight = this.parent.getFrozenMode() === literals.leftRight\n && col.getFreezeTableName() === literals.frozenRight;\n if (!select('#' + this.parent.element.id + '_autofill', parentsUntil(this.target, literals.table))) {\n if (select('#' + this.parent.element.id + '_autofill', this.parent.element)) {\n select('#' + this.parent.element.id + '_autofill', this.parent.element).remove();\n }\n this.autofill = createElement('div', { className: 'e-autofill', id: this.parent.element.id + '_autofill' });\n this.autofill.style.display = 'none';\n if (!isFrozenRow) {\n if (!isFrozenCol) {\n this.parent.getContentTable().parentElement.appendChild(this.autofill);\n }\n else {\n this.parent.contentModule.getMovableContent().appendChild(this.autofill);\n }\n }\n else {\n if (!isFrozenCol) {\n this.parent.getHeaderTable().parentElement.appendChild(this.autofill);\n }\n else {\n this.parent.headerModule.getMovableHeader().appendChild(this.autofill);\n }\n }\n if (isFrozenRight) {\n if (isFrozenRow) {\n this.parent.getFrozenRightHeader().appendChild(this.autofill);\n }\n else {\n this.parent.getFrozenRightContent().appendChild(this.autofill);\n }\n }\n }\n var cell = cells[cells.length - 1];\n if (cell && cell.offsetParent) {\n var clientRect = cell.getBoundingClientRect();\n var parentOff = cell.offsetParent.getBoundingClientRect();\n var colWidth = this.isLastCell(cell) ? 4 : 0;\n var rowHeight = this.isLastRow(cell) ? 3 : 0;\n if (!this.parent.enableRtl) {\n this.autofill.style.left = clientRect.left - parentOff.left + clientRect.width - 4 - colWidth + 'px';\n }\n else {\n this.autofill.style.right = parentOff.right - clientRect.right + clientRect.width - 4 - colWidth + 'px';\n }\n this.autofill.style.top = clientRect.top - parentOff.top + clientRect.height - 5 - rowHeight + 'px';\n }\n this.autofill.style.display = '';\n }\n else {\n this.hideAutoFill();\n }\n };\n Selection.prototype.mouseDownHandler = function (e) {\n this.mouseButton = e.button;\n var target = e.target;\n var gObj = this.parent;\n var isDrag;\n var gridElement = parentsUntil(target, 'e-grid');\n if (gridElement && gridElement.id !== gObj.element.id || parentsUntil(target, literals.headerContent) && !this.parent.frozenRows ||\n parentsUntil(target, 'e-editedbatchcell') || parentsUntil(target, literals.editedRow)) {\n return;\n }\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (parentsUntil(target, literals.rowCell) && !e.shiftKey && !e.ctrlKey) {\n if (gObj.selectionSettings.cellSelectionMode.indexOf('Box') > -1 && !this.isRowType() && !this.isSingleSel()) {\n this.isCellDrag = true;\n isDrag = true;\n }\n else if (gObj.allowRowDragAndDrop && !gObj.isEdit && !this.parent.selectionSettings.checkboxOnly) {\n this.isRowDragSelected = false;\n if (!this.isRowType() || this.isSingleSel() || closest(target, 'td').classList.contains('e-selectionbackground')) {\n this.isDragged = false;\n return;\n }\n isDrag = true;\n this.element = this.parent.createElement('div', { className: 'e-griddragarea' });\n gObj.getContent().appendChild(this.element);\n }\n if (isDrag) {\n this.enableDrag(e, true);\n }\n }\n this.updateStartEndCells();\n if (target.classList.contains('e-autofill') || target.classList.contains('e-xlsel')) {\n this.isCellDrag = true;\n this.isAutoFillSel = true;\n this.enableDrag(e);\n }\n };\n Selection.prototype.updateStartEndCells = function () {\n var cells = [].slice.call(this.parent.element.getElementsByClassName('e-cellselectionbackground'));\n this.startCell = cells[0];\n this.endCell = cells[cells.length - 1];\n if (this.startCell) {\n this.startIndex = parseInt(this.startCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n this.startCellIndex = parseInt(parentsUntil(this.startCell, literals.rowCell).getAttribute(literals.dataColIndex), 10);\n }\n };\n Selection.prototype.updateStartCellsIndex = function () {\n if (this.startCell) {\n this.startIndex = parseInt(this.startCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n this.startCellIndex = parseInt(parentsUntil(this.startCell, literals.rowCell).getAttribute(literals.dataColIndex), 10);\n }\n };\n Selection.prototype.enableDrag = function (e, isUpdate) {\n var gObj = this.parent;\n if (isUpdate) {\n var tr = closest(e.target, 'tr');\n this.startDIndex = parseInt(tr.getAttribute(literals.dataRowIndex), 10);\n this.startDCellIndex = parseInt(parentsUntil(e.target, literals.rowCell).getAttribute(literals.dataColIndex), 10);\n }\n document.body.classList.add('e-disableuserselect');\n var gBRect = gObj.element.getBoundingClientRect();\n var postion = getPosition(e);\n this.x = postion.x - gBRect.left;\n this.y = postion.y - gBRect.top;\n EventHandler.add(gObj.getContent(), 'mousemove', this.mouseMoveHandler, this);\n if (this.parent.frozenRows) {\n EventHandler.add(gObj.getHeaderContent(), 'mousemove', this.mouseMoveHandler, this);\n }\n EventHandler.add(document, 'mouseup', this.mouseUpHandler, this);\n };\n Selection.prototype.clearSelAfterRefresh = function (e) {\n var isInfiniteScroll = this.parent.enableInfiniteScrolling && e.requestType === 'infiniteScroll';\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection && !isInfiniteScroll) {\n this.clearSelection();\n }\n if ((e.requestType === 'virtualscroll' || isInfiniteScroll) && this.parent.isPersistSelection && this.isPartialSelection\n && this.isHdrSelectAllClicked) {\n var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n var indexes = [];\n this.selectedRowState = {};\n this.persistSelectedData = [];\n for (var i = 0; i < rowObj.length; i++) {\n indexes.push(rowObj[parseInt(i.toString(), 10)].index);\n var pkValue = this.getPkValue(this.primaryKey, rowObj[parseInt(i.toString(), 10)].data);\n this.selectedRowState[\"\" + pkValue] = true;\n this.persistSelectedData.push(rowObj[parseInt(i.toString(), 10)].data);\n }\n this.selectedRowIndexes = indexes;\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Selection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.evtHandlers = [{ event: events.uiUpdate, handler: this.enableAfterRender },\n { event: events.initialEnd, handler: this.initializeSelection },\n { event: events.rowSelectionComplete, handler: this.onActionComplete },\n { event: events.cellSelectionComplete, handler: this.onActionComplete },\n { event: events.inBoundModelChanged, handler: this.onPropertyChanged },\n { event: events.cellFocused, handler: this.onCellFocused },\n { event: events.beforeFragAppend, handler: this.clearSelAfterRefresh },\n { event: events.columnPositionChanged, handler: this.columnPositionChanged },\n { event: events.contentReady, handler: this.initialEnd },\n { event: events.rowsRemoved, handler: this.rowsRemoved },\n { event: events.headerRefreshed, handler: this.refreshHeader },\n { event: events.destroy, handler: this.destroy }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n this.actionBeginFunction = this.actionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.addEventListener_checkbox();\n };\n /**\n * @returns {void}\n * @hidden\n */\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(document, 'mouseup', this.mouseUpHandler);\n EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler);\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.removeEventListener_checkbox();\n };\n Selection.prototype.wireEvents = function () {\n this.isMacOS = navigator.userAgent.indexOf('Mac OS') !== -1;\n if (this.isMacOS) {\n EventHandler.add(this.parent.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.parent.element, 'keyup', this.keyUpHandler, this);\n }\n else {\n if (!this.parent.allowKeyboard) {\n EventHandler.add(this.parent.element, 'keydown', this.keyDownHandler, this);\n }\n }\n };\n Selection.prototype.unWireEvents = function () {\n if (this.isMacOS) {\n EventHandler.remove(this.parent.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.parent.element, 'keyup', this.keyUpHandler);\n }\n else {\n if (!this.parent.allowKeyboard) {\n EventHandler.remove(this.parent.element, 'keydown', this.keyDownHandler);\n }\n }\n };\n Selection.prototype.columnPositionChanged = function () {\n if (!this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n Selection.prototype.refreshHeader = function () {\n this.setCheckAllState();\n };\n Selection.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n var pkValue = this.getPkValue(this.primaryKey, e.records[parseInt(i.toString(), 10)]);\n delete (this.selectedRowState[\"\" + pkValue]);\n --this.totalRecordsCount;\n }\n this.setCheckAllState();\n };\n Selection.prototype.beforeFragAppend = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n Selection.prototype.getCheckAllBox = function () {\n return this.parent.getHeaderContent().querySelector('.e-checkselectall');\n };\n Selection.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n this.initPerisistSelection();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Selection.prototype.render = function (e) {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler, this);\n };\n Selection.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n if (!isNullOrUndefined(e.properties.type) && this.selectionSettings.type === 'Single') {\n if (this.selectedRowCellIndexes.length > 1) {\n this.clearCellSelection();\n this.prevCIdxs = undefined;\n }\n if (this.selectedRowIndexes.length > 1) {\n this.clearRowSelection();\n this.prevRowIndex = undefined;\n }\n if (this.selectedColumnsIndexes.length > 1) {\n this.clearColumnSelection();\n this.prevColIndex = undefined;\n }\n this.enableSelectMultiTouch = false;\n this.hidePopUp();\n }\n if (!isNullOrUndefined(e.properties.mode) ||\n !isNullOrUndefined(e.properties.cellSelectionMode)) {\n this.clearSelection();\n this.prevRowIndex = undefined;\n this.prevCIdxs = undefined;\n this.prevColIndex = undefined;\n }\n this.isPersisted = true;\n this.checkBoxSelectionChanged();\n this.isPersisted = false;\n if (!this.parent.isCheckBoxSelection) {\n this.initPerisistSelection();\n }\n var checkboxColumn = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length) {\n gObj.isCheckBoxSelection = !(this.selectionSettings.checkboxMode === 'ResetOnRowClick');\n }\n this.drawBorders();\n };\n Selection.prototype.hidePopUp = function () {\n if (this.parent.element.querySelector('.e-gridpopup').getElementsByClassName('e-rowselect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Selection.prototype.initialEnd = function (e) {\n var isFrozen = this.parent.isFrozenGrid();\n var isLeftRightFrozen = this.parent.getFrozenMode() === literals.leftRight;\n if ((!isFrozen || (isFrozen && (!isLeftRightFrozen && !e.args.isFrozen)\n || (isLeftRightFrozen && e.args.renderFrozenRightContent))) && !this.selectedRowIndexes.length) {\n this.parent.off(events.contentReady, this.initialEnd);\n this.selectRow(this.parent.selectedRowIndex);\n }\n };\n Selection.prototype.checkBoxSelectionChanged = function () {\n var gobj = this.parent;\n gobj.off(events.contentReady, this.checkBoxSelectionChanged);\n var checkboxColumn = gobj.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length > 0) {\n gobj.isCheckBoxSelection = true;\n this.chkField = checkboxColumn[0].field;\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n if (isNullOrUndefined(this.totalRecordsCount)) {\n this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n }\n if (this.isSingleSel()) {\n gobj.selectionSettings.type = 'Multiple';\n gobj.dataBind();\n }\n else {\n this.initPerisistSelection();\n }\n }\n if (!gobj.isCheckBoxSelection && !this.isPersisted) {\n this.chkField = null;\n this.initPerisistSelection();\n }\n };\n Selection.prototype.initPerisistSelection = function () {\n var gobj = this.parent;\n if (this.parent.selectionSettings.persistSelection && this.parent.getPrimaryKeyFieldNames().length > 0) {\n gobj.isPersistSelection = true;\n this.ensureCheckboxFieldSelection();\n }\n else if (this.parent.getPrimaryKeyFieldNames().length > 0) {\n gobj.isPersistSelection = false;\n this.ensureCheckboxFieldSelection();\n }\n else {\n gobj.isPersistSelection = false;\n this.selectedRowState = {};\n }\n };\n Selection.prototype.ensureCheckboxFieldSelection = function () {\n var gobj = this.parent;\n this.primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n if (!gobj.enableVirtualization && this.chkField\n && ((gobj.isPersistSelection && Object.keys(this.selectedRowState).length === 0) ||\n !gobj.isPersistSelection)) {\n var data = this.parent.getDataModule();\n var query = new Query().where(this.chkField, 'equal', true);\n if (!query.params) {\n query.params = this.parent.query.params;\n }\n var dataManager = data.getData({}, query);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n this.parent.showSpinner();\n dataManager.then(function (e) {\n proxy_1.dataSuccess(e.result);\n proxy_1.refreshPersistSelection();\n proxy_1.parent.hideSpinner();\n });\n }\n };\n Selection.prototype.dataSuccess = function (res) {\n var data = (this.parent.getDataModule().isRemote()) ? res['result'] : res;\n for (var i = 0; i < data.length; i++) {\n var pkValue = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n if (isNullOrUndefined(this.selectedRowState[\"\" + pkValue]) && data[parseInt(i.toString(), 10)][this.chkField]) {\n this.selectedRowState[\"\" + pkValue] = data[parseInt(i.toString(), 10)][this.chkField];\n }\n }\n this.persistSelectedData = data;\n };\n Selection.prototype.setRowSelection = function (state) {\n if (!(this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result))) {\n if (state) {\n if (this.isPartialSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n for (var _i = 0, rowObj_1 = rowObj; _i < rowObj_1.length; _i++) {\n var row = rowObj_1[_i];\n this.selectedRowState[this.getPkValue(this.primaryKey, row.data)] = true;\n }\n }\n else {\n var selectedData = this.isPartialSelection ? this.parent.partialSelectedRecords : this.getData();\n if (this.parent.groupSettings.columns.length) {\n for (var _a = 0, _b = this.isPartialSelection ? selectedData : selectedData.records; _a < _b.length; _a++) {\n var data = _b[_a];\n this.selectedRowState[this.getPkValue(this.primaryKey, data)] = true;\n }\n }\n else {\n for (var _c = 0, selectedData_1 = selectedData; _c < selectedData_1.length; _c++) {\n var data = selectedData_1[_c];\n this.selectedRowState[this.getPkValue(this.primaryKey, data)] = true;\n }\n }\n }\n }\n else {\n this.selectedRowState = {};\n }\n // (this.getData()).forEach(function (data) {\n // this.selectedRowState[data[this.primaryKey]] = true;\n // })\n }\n else {\n if (state) {\n var selectedStateKeys = Object.keys(this.selectedRowState);\n var unSelectedRowStateKeys = Object.keys(this.unSelectedRowState);\n if (!this.isCheckboxReset) {\n for (var _d = 0, _e = this.parent.currentViewData; _d < _e.length; _d++) {\n var data = _e[_d];\n if (!isNullOrUndefined(data[this.primaryKey])) {\n var key = data[this.primaryKey].toString();\n if (selectedStateKeys.indexOf(key) === -1 && unSelectedRowStateKeys.indexOf(key) === -1) {\n this.selectedRowState[data[this.primaryKey]] = true;\n }\n }\n }\n }\n }\n else {\n this.selectedRowState = {};\n this.unSelectedRowState = {};\n this.rmtHdrChkbxClicked = false;\n }\n }\n };\n Selection.prototype.getData = function () {\n return this.parent.getDataModule().dataManager.executeLocal(this.parent.getDataModule().generateQuery(true));\n };\n Selection.prototype.getAvailableSelectedData = function () {\n var filteredSearchedSelectedData = new DataManager(this.persistSelectedData)\n .executeLocal(this.parent.getDataModule().generateQuery(true));\n if (this.parent.groupSettings.columns.length && filteredSearchedSelectedData &&\n filteredSearchedSelectedData.records) {\n filteredSearchedSelectedData = filteredSearchedSelectedData.records.slice();\n }\n return filteredSearchedSelectedData;\n };\n Selection.prototype.refreshPersistSelection = function () {\n var rows = this.parent.getRows();\n if (this.parent.isCheckBoxSelection && this.parent.isFrozenGrid()) {\n var mtbody = this.parent.getMovableContentTbody();\n if (mtbody.querySelector('.e-checkselect')) {\n rows = this.parent.getMovableRows();\n }\n if (this.parent.getFrozenMode() === literals.leftRight) {\n var frtbody = this.parent.getFrozenRightContentTbody();\n if (frtbody.querySelector('.e-checkselect')) {\n rows = this.parent.getFrozenRightRows();\n }\n }\n }\n this.totalRecordsCount = this.parent.getCurrentViewRecords().length;\n if (this.parent.allowPaging) {\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n }\n if (!isNullOrUndefined(rows) && rows.length > 0 && (this.parent.isPersistSelection || this.chkField)) {\n var indexes = [];\n for (var j = 0; j < rows.length; j++) {\n var rowObj = this.getRowObj(rows[parseInt(j.toString(), 10)]);\n var pKey = rowObj ? rowObj.data ? this.getPkValue(this.primaryKey, rowObj.data) : null : null;\n if (pKey === null) {\n return;\n }\n if (this.isPartialSelection && !rowObj.isSelectable) {\n continue;\n }\n var checkState = void 0;\n var chkBox = rows[parseInt(j.toString(), 10)].querySelector('.e-checkselect');\n if (this.selectedRowState[\"\" + pKey] || (this.parent.checkAllRows === 'Check' && this.selectedRowState[\"\" + pKey] &&\n this.totalRecordsCount === Object.keys(this.selectedRowState).length && this.chkAllCollec.indexOf(pKey) < 0)\n || (this.parent.checkAllRows === 'Uncheck' && this.chkAllCollec.indexOf(pKey) > 0 && !this.parent.selectedRowIndex)\n || (this.parent.checkAllRows === 'Intermediate' && !isNullOrUndefined(this.chkField) && rowObj.data[this.chkField])) {\n indexes.push(parseInt(rows[parseInt(j.toString(), 10)].getAttribute(literals.dataRowIndex), 10));\n checkState = true;\n }\n else {\n checkState = false;\n if (this.checkedTarget !== chkBox && this.parent.isCheckBoxSelection && chkBox) {\n removeAddCboxClasses(chkBox.nextElementSibling, checkState);\n }\n }\n this.updatePersistCollection(rows[parseInt(j.toString(), 10)], checkState);\n }\n if (this.isSingleSel() && indexes.length > 0) {\n this.selectRow(indexes[0], true);\n }\n else {\n this.selectRows(indexes);\n }\n }\n if ((this.parent.isCheckBoxSelection || this.parent.selectionSettings.checkboxMode === 'ResetOnRowClick') && this.getCurrentBatchRecordChanges().length > 0) {\n this.setCheckAllState();\n }\n };\n Selection.prototype.actionBegin = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n var editChkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(editChkBox)) {\n var row = closest(editChkBox, '.' + literals.editedRow);\n if (row) {\n if (this.parent.editSettings.mode === 'Dialog') {\n row = this.parent.element.querySelector('.e-dlgeditrow');\n }\n var rowObj = this.getRowObj(row);\n if (!rowObj) {\n return;\n }\n this.selectedRowState[this.getPkValue(this.primaryKey, rowObj.data)] = rowObj.isSelected = editChkBox.checked;\n }\n else {\n this.isCheckedOnAdd = editChkBox.checked;\n }\n }\n }\n if (this.parent.isPersistSelection && this.isPartialSelection) {\n if (e.requestType === 'paging' && (this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))) {\n this.selectedRowIndexes = [];\n }\n if (e.requestType === 'filtering' || e.requestType === 'searching') {\n this.parent.partialSelectedRecords = [];\n this.parent.disableSelectedRecords = [];\n }\n }\n };\n Selection.prototype.actionComplete = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n if (e.action === 'add') {\n if (this.isCheckedOnAdd) {\n var rowObj = this.parent.getRowObjectFromUID(this.parent.getRows()[e.selectedRow].getAttribute('data-uid'));\n this.selectedRowState[this.getPkValue(this.primaryKey, rowObj.data)] = rowObj.isSelected = this.isCheckedOnAdd;\n }\n this.isHdrSelectAllClicked = false;\n this.setCheckAllState();\n }\n this.refreshPersistSelection();\n }\n if (e.requestType === 'delete' && this.parent.isPersistSelection) {\n var records = e.data;\n var data = records.slice();\n for (var i = 0; i < data.length; i++) {\n var pkValue = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n if (!isNullOrUndefined(pkValue)) {\n this.updatePersistDelete(pkValue, this.isPartialSelection);\n }\n }\n this.isHdrSelectAllClicked = false;\n this.setCheckAllState();\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n }\n if (e.requestType === 'paging') {\n if (this.parent.isPersistSelection && this.isPartialSelection && this.isHdrSelectAllClicked) {\n var rows = this.parent.getRowsObject();\n var indexes = [];\n for (var i = 0; i < rows.length; i++) {\n if (rows[parseInt(i.toString(), 10)].isSelectable) {\n indexes.push(rows[parseInt(i.toString(), 10)].index);\n }\n }\n if (indexes.length) {\n this.selectRows(indexes);\n }\n }\n this.prevRowIndex = undefined;\n this.prevCIdxs = undefined;\n this.prevECIdxs = undefined;\n }\n };\n Selection.prototype.onDataBound = function () {\n if (!this.parent.enableVirtualization && this.parent.isPersistSelection) {\n if (this.selectedRecords.length) {\n this.isPrevRowSelection = true;\n }\n }\n if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result)) && this.rmtHdrChkbxClicked) {\n if (this.parent.checkAllRows === 'Intermediate') {\n this.setRowSelection(true);\n }\n else if (this.parent.checkAllRows === 'Uncheck') {\n this.setRowSelection(false);\n }\n }\n if (this.parent.enableVirtualization) {\n this.setCheckAllState();\n }\n if (this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n this.initialRowSelection = this.isRowType() && this.parent.element.querySelectorAll('.e-selectionbackground') &&\n this.parent.getSelectedRows().length ? true : false;\n if (this.parent.isCheckBoxSelection && !this.initialRowSelection) {\n var totalRecords = this.parent.getRowsObject();\n var indexes = [];\n for (var i = 0; i < totalRecords.length; i++) {\n if (totalRecords[parseInt(i.toString(), 10)].isSelected) {\n indexes.push(i);\n }\n }\n if (indexes.length) {\n this.selectRows(indexes);\n }\n this.initialRowSelection = true;\n }\n };\n Selection.prototype.updatePersistSelectedData = function (checkState) {\n if (this.parent.isPersistSelection) {\n var rows = this.parent.getRows();\n for (var i = 0; i < rows.length; i++) {\n this.updatePersistCollection(rows[parseInt(i.toString(), 10)], checkState);\n }\n if (this.parent.checkAllRows === 'Uncheck') {\n this.setRowSelection(false);\n this.persistSelectedData = (this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))\n ? this.persistSelectedData : [];\n }\n else if (this.parent.checkAllRows === 'Check') {\n this.setRowSelection(true);\n this.persistSelectedData = !(this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))\n && !this.isPartialSelection ?\n this.parent.groupSettings.columns.length ? this.getData().records.slice() :\n this.getData().slice() : this.persistSelectedData;\n }\n }\n };\n Selection.prototype.checkSelectAllAction = function (checkState) {\n var cRenderer = this.getRenderer();\n var editForm = this.parent.element.querySelector('.e-gridform');\n this.checkedTarget = this.getCheckAllBox();\n if (checkState && this.getCurrentBatchRecordChanges().length) {\n this.parent.checkAllRows = 'Check';\n this.updatePersistSelectedData(checkState);\n this.selectRowsByRange(cRenderer.getVirtualRowIndex(0), cRenderer.getVirtualRowIndex(this.getCurrentBatchRecordChanges().length - 1));\n }\n else {\n this.parent.checkAllRows = 'Uncheck';\n this.updatePersistSelectedData(checkState);\n this.clearSelection();\n }\n this.chkAllCollec = [];\n if (!isNullOrUndefined(editForm)) {\n var editChkBox = editForm.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(editChkBox)) {\n removeAddCboxClasses(editChkBox.nextElementSibling, checkState);\n }\n }\n };\n Selection.prototype.checkSelectAll = function (checkBox) {\n var _this = this;\n var stateStr = this.getCheckAllStatus(checkBox);\n var state = stateStr === 'Check';\n this.isHeaderCheckboxClicked = true;\n if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result)) && ((stateStr === 'Uncheck' || this.isCheckboxReset) ||\n (this.parent.getDataModule().isRemote() && stateStr === 'Intermediate' && this.parent.isPersistSelection))) {\n this.rmtHdrChkbxClicked = true;\n }\n else {\n this.rmtHdrChkbxClicked = false;\n }\n if (this.rmtHdrChkbxClicked && this.isCheckboxReset) {\n this.unSelectedRowState = {};\n }\n this.isCheckboxReset = false;\n if (stateStr === 'Intermediate') {\n if (!this.chkField && !this.parent.isPersistSelection) {\n state = this.getCurrentBatchRecordChanges().some(function (data) {\n return _this.getPkValue(_this.primaryKey, data) in _this.selectedRowState;\n });\n }\n if (this.parent.getDataModule().isRemote() && this.parent.isPersistSelection) {\n for (var i = 0; i < this.getCurrentBatchRecordChanges().length; i++) {\n if (Object.keys(this.selectedRowState).includes((this.getPkValue(this.primaryKey, this.getCurrentBatchRecordChanges()[\"\" + i])).toString())) {\n state = true;\n }\n else {\n state = false;\n break;\n }\n }\n }\n }\n if (this.parent.isPersistSelection && this.parent.allowPaging) {\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n }\n this.checkSelectAllAction(!state);\n this.target = null;\n if (this.getCurrentBatchRecordChanges().length > 0) {\n this.setCheckAllState();\n this.updateSelectedRowIndexes();\n }\n this.triggerChkChangeEvent(checkBox, !state);\n };\n Selection.prototype.getCheckAllStatus = function (ele) {\n var classes = ele ? ele.nextElementSibling.classList :\n this.getCheckAllBox().nextElementSibling.classList;\n var status;\n if (classes.contains('e-check')) {\n status = 'Check';\n }\n else if (classes.contains('e-uncheck')) {\n status = 'Uncheck';\n }\n else if (classes.contains('e-stop')) {\n status = 'Intermediate';\n }\n else {\n status = 'None';\n }\n return status;\n };\n Selection.prototype.checkSelect = function (checkBox) {\n var target = closest(this.checkedTarget, '.' + literals.rowCell);\n var gObj = this.parent;\n this.isMultiCtrlRequest = true;\n var rIndex = 0;\n this.isHeaderCheckboxClicked = false;\n if (isGroupAdaptive(gObj)) {\n var uid = target.parentElement.getAttribute('data-uid');\n rIndex = gObj.getRows().map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n }\n else {\n rIndex = parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10);\n }\n if (this.parent.isPersistSelection && this.parent.element.getElementsByClassName(literals.addedRow).length > 0 &&\n this.parent.editSettings.newRowPosition === 'Top') {\n ++rIndex;\n }\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute(literals.dataColIndex), 10));\n this.moveIntoUncheckCollection(closest(target, '.' + literals.row));\n this.setCheckAllState();\n this.isMultiCtrlRequest = false;\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'));\n };\n Selection.prototype.moveIntoUncheckCollection = function (row) {\n if (this.parent.checkAllRows === 'Check' || this.parent.checkAllRows === 'Uncheck') {\n var rowObj = this.getRowObj(row);\n var pKey = rowObj && rowObj.data ? this.getPkValue(this.primaryKey, rowObj.data) : null;\n if (!pKey) {\n return;\n }\n if (this.chkAllCollec.indexOf(pKey) < 0) {\n this.chkAllCollec.push(pKey);\n }\n else {\n this.chkAllCollec.splice(this.chkAllCollec.indexOf(pKey), 1);\n }\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState) {\n this.parent.trigger(events.checkBoxChange, {\n checked: checkState, selectedRowIndexes: this.parent.getSelectedRowIndexes(),\n target: checkBox\n });\n if (!this.parent.isEdit) {\n this.checkedTarget = null;\n }\n };\n Selection.prototype.updateSelectedRowIndexes = function () {\n if (this.parent.isCheckBoxSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) &&\n this.isPartialSelection && !(this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result))\n && this.parent.selectionSettings.persistSelection) {\n if (this.parent.checkAllRows !== 'Uncheck') {\n var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n for (var _i = 0, rowObj_2 = rowObj; _i < rowObj_2.length; _i++) {\n var row = rowObj_2[_i];\n this.selectedRowIndexes.push(row.index);\n }\n }\n }\n };\n Selection.prototype.updateSelectedRowIndex = function (index) {\n if (this.parent.isCheckBoxSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)\n && !(this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result))\n && !this.isPartialSelection) {\n if (this.parent.checkAllRows === 'Check') {\n this.selectedRowIndexes = [];\n var dataLength = this.getData().length;\n for (var data = 0; data < dataLength; data++) {\n this.selectedRowIndexes.push(data);\n }\n }\n else if (this.parent.checkAllRows === 'Uncheck') {\n this.selectedRowIndexes = [];\n }\n else {\n var row = this.parent.getRowByIndex(index);\n if (index && row && row.getAttribute('aria-selected') === 'false') {\n var selectedVal = this.selectedRowIndexes.indexOf(index);\n this.selectedRowIndexes.splice(selectedVal, 1);\n }\n }\n }\n };\n Selection.prototype.isAllSelected = function (count) {\n if (this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) {\n return this.getAvailableSelectedData().length === (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling\n ? this.parent.totalDataRecordsCount : this.totalRecordsCount);\n }\n else {\n if (this.isPartialSelection) {\n if (this.parent.allowPaging && this.parent.pageSettings.pageSize < this.parent.pageSettings.totalRecordsCount) {\n var data = this.parent.partialSelectedRecords;\n for (var i = 0; i < data.length; i++) {\n var pKey = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n if (!this.selectedRowState[\"\" + pKey]) {\n return false;\n }\n }\n return true;\n }\n else {\n return this.isSelectAllRowCount(count);\n }\n }\n else {\n var data = this.getData();\n for (var i = 0; i < data.length; i++) {\n var pKey = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n if (!this.selectedRowState[\"\" + pKey]) {\n return false;\n }\n }\n return true;\n }\n }\n };\n Selection.prototype.someDataSelected = function () {\n if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result))\n && (this.parent.searchSettings.key.length || this.parent.filterSettings.columns.length)) {\n var filteredSearchedSelectedData = this.getAvailableSelectedData();\n for (var i = 0; i < filteredSearchedSelectedData.length; i++) {\n var pKey = this.getPkValue(this.primaryKey, filteredSearchedSelectedData[parseInt(i.toString(), 10)]);\n if (this.selectedRowState[\"\" + pKey]) {\n return false;\n }\n }\n }\n var data = this.isPartialSelection ? this.parent.partialSelectedRecords\n : (this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result)) ? [] : this.getData();\n for (var i = 0; i < data.length; i++) {\n var pKey = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n if (this.selectedRowState[\"\" + pKey]) {\n return false;\n }\n }\n return true;\n };\n Selection.prototype.setCheckAllState = function (index, isInteraction) {\n if (this.parent.isCheckBoxSelection || this.parent.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n var checkToSelectAll = false;\n var isFiltered = false;\n var checkedLen = Object.keys(this.selectedRowState).length;\n if (!this.parent.isPersistSelection) {\n checkedLen = this.selectedRowIndexes.length;\n this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n }\n if (this.parent.isPersistSelection && !((this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))\n && this.isPartialSelection) && (this.parent.searchSettings.key.length\n || this.parent.filterSettings.columns.length)) {\n isFiltered = true;\n checkToSelectAll = this.isAllSelected(checkedLen);\n }\n var input = this.getCheckAllBox();\n if (input) {\n var spanEle = input.nextElementSibling;\n removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n setChecked(input, false);\n input.indeterminate = false;\n if ((checkToSelectAll && isFiltered && (this.parent.getDataModule().isRemote() ||\n (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result) ||\n this.getData().length)) || (!isFiltered && ((checkedLen === this.totalRecordsCount && this.totalRecordsCount\n && !this.isPartialSelection && (!(this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))\n || this.parent.allowPaging)) ||\n (!this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling\n && this.isPartialSelection && (this.isSelectAllRowCount(checkedLen) || this.isHdrSelectAllClicked))\n || ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)\n && !this.parent.allowPaging && ((!(this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) &&\n this.getData().length && checkedLen === this.getData().length) || ((this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) &&\n !this.isPartialSelection && ((checkedLen === this.parent.totalDataRecordsCount) || (this.isSelectAllRowCount(checkedLen) &&\n !this.parent.isPersistSelection))) ||\n (this.isPartialSelection && (this.isHdrSelectAllClicked || this.isSelectAllRowCount(checkedLen)))))))) {\n addClass([spanEle], ['e-check']);\n setChecked(input, true);\n if (isInteraction) {\n this.getRenderer().setSelection(null, true, true);\n }\n this.parent.checkAllRows = 'Check';\n }\n else if (((!this.selectedRowIndexes.length && (!this.parent.enableVirtualization ||\n (!this.persistSelectedData.length && !isFiltered) || (isFiltered && this.someDataSelected())) ||\n checkedLen === 0 && this.getCurrentBatchRecordChanges().length === 0) && !this.parent.allowPaging) ||\n (this.parent.allowPaging && (checkedLen === 0 || (checkedLen && isFiltered && this.someDataSelected())))) {\n addClass([spanEle], ['e-uncheck']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, false, true);\n }\n this.parent.checkAllRows = 'Uncheck';\n }\n else {\n addClass([spanEle], ['e-stop']);\n this.parent.checkAllRows = 'Intermediate';\n input.indeterminate = true;\n }\n if (checkedLen === 0 && this.getCurrentBatchRecordChanges().length === 0) {\n addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n else {\n removeClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n if (this.isPartialSelection) {\n var rowCount = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; }).length;\n if (rowCount === 0 && spanEle.parentElement.querySelector('.e-frame').classList.contains('e-uncheck')) {\n addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n else {\n removeClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n }\n if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)\n && !this.parent.allowPaging && !(this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))) {\n this.updateSelectedRowIndex(index);\n }\n }\n }\n };\n Selection.prototype.isSelectAllRowCount = function (count) {\n var rowCount = 0;\n var rowObj = this.parent.getRowsObject();\n if (this.parent.selectionSettings.persistSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n var dataLen = (this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result)) ?\n this.parent.totalDataRecordsCount : this.getData() && this.getData().length;\n if (dataLen === rowObj.length) {\n rowCount = rowObj.filter(function (e) { return e.isSelectable; }).length;\n return rowCount && count === rowCount;\n }\n else {\n return false;\n }\n }\n else {\n if (this.parent.allowPaging && this.parent.selectionSettings.persistSelection) {\n rowCount = this.parent.partialSelectedRecords.length + this.parent.disableSelectedRecords.length;\n if (rowCount === this.totalRecordsCount) {\n return this.parent.partialSelectedRecords.length && count === this.parent.partialSelectedRecords.length;\n }\n else {\n return false;\n }\n }\n else {\n rowCount = rowObj.filter(function (e) { return e.isSelectable; }).length;\n return rowCount && count === rowCount;\n }\n }\n };\n Selection.prototype.keyDownHandler = function (e) {\n // Below are keyCode for command key in MAC OS. Safari/Chrome(91-Left command, 93-Right Command), Opera(17), FireFox(224)\n if ((((Browser.info.name === 'chrome') || (Browser.info.name === 'safari')) && (e.keyCode === 91 || e.keyCode === 93)) ||\n (Browser.info.name === 'opera' && e.keyCode === 17) || (Browser.info.name === 'mozilla' && e.keyCode === 224)) {\n this.cmdKeyPressed = true;\n }\n var targetHeadCell = parentsUntil(e.target, 'e-headercell');\n var targetRowCell = parentsUntil(e.target, literals.rowCell);\n var isCheckBox = targetHeadCell ? targetHeadCell.children[0].classList.contains('e-headerchkcelldiv') :\n targetRowCell ? targetRowCell.classList.contains('e-gridchkbox') : false;\n if (isCheckBox && !this.parent.allowKeyboard && e.keyCode === 32) {\n e.preventDefault();\n }\n };\n Selection.prototype.keyUpHandler = function (e) {\n if ((((Browser.info.name === 'chrome') || (Browser.info.name === 'safari')) && (e.keyCode === 91 || e.keyCode === 93)) ||\n (Browser.info.name === 'opera' && e.keyCode === 17) || (Browser.info.name === 'mozilla' && e.keyCode === 224)) {\n this.cmdKeyPressed = false;\n }\n };\n Selection.prototype.clickHandler = function (e) {\n var target = e.target;\n this.actualTarget = target;\n if (this.selectionSettings.persistSelection) {\n this.deSelectedData = iterateExtend(this.persistSelectedData);\n }\n if (parentsUntil(target, literals.row) || parentsUntil(target, 'e-headerchkcelldiv') ||\n (this.selectionSettings.allowColumnSelection && target.classList.contains('e-headercell'))) {\n this.isInteracted = true;\n }\n this.isMultiCtrlRequest = e.ctrlKey || this.enableSelectMultiTouch ||\n (this.isMacOS && this.cmdKeyPressed);\n if (!this.parent.allowKeyboard) {\n this.isMultiShiftRequest = false;\n this.isMultiCtrlRequest = false;\n }\n else {\n this.isMultiShiftRequest = e.shiftKey;\n }\n this.popUpClickHandler(e);\n var chkSelect = false;\n this.preventFocus = true;\n var checkBox;\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n this.checkSelectAllClicked = checkWrap && checkWrap.getElementsByClassName('e-checkselectall') ||\n (this.selectionSettings.persistSelection && parentsUntil(target, literals.row)) ? true : false;\n if (this.selectionSettings.persistSelection && this.isPartialSelection && parentsUntil(target, 'e-headerchkcelldiv')\n && !target.querySelector('.e-checkbox-disabled')) {\n this.isHdrSelectAllClicked = true;\n }\n if (checkWrap && checkWrap.querySelectorAll('.e-checkselect,.e-checkselectall').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n chkSelect = true;\n }\n this.drawBorders();\n this.updateAutoFillPosition();\n target = parentsUntil(target, literals.rowCell);\n if (this.parent.isReact && (target && !target.parentElement && target.classList.contains('e-rowcell'))) {\n target = this.parent.getCellFromIndex(parseInt(target.getAttribute('index'), 10), parseInt(target.getAttribute('data-colindex'), 10));\n }\n if (((target && target.parentElement.classList.contains(literals.row) && !this.parent.selectionSettings.checkboxOnly) || chkSelect)\n && !this.isRowDragSelected) {\n if (this.parent.isCheckBoxSelection) {\n this.isMultiCtrlRequest = true;\n }\n this.target = target;\n if (!isNullOrUndefined(checkBox)) {\n this.checkedTarget = checkBox;\n if (checkBox.classList.contains('e-checkselectall')) {\n this.checkSelectAll(checkBox);\n }\n else {\n this.checkSelect(checkBox);\n }\n }\n else {\n var gObj = this.parent;\n var rIndex = 0;\n if (isGroupAdaptive(gObj)) {\n var uid = target.parentElement.getAttribute('data-uid');\n rIndex = gObj.getRows().map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n }\n else {\n rIndex = parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10);\n }\n if (this.parent.isPersistSelection && this.parent.element.getElementsByClassName(literals.addedRow).length > 0) {\n ++rIndex;\n }\n if (!this.mUPTarget || !this.mUPTarget.isEqualNode(target)) {\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute(literals.dataColIndex), 10));\n }\n this.parent.hoverFrozenRows(e);\n if (this.parent.isCheckBoxSelection) {\n this.moveIntoUncheckCollection(closest(target, '.' + literals.row));\n this.setCheckAllState();\n }\n }\n if (!this.parent.isCheckBoxSelection && Browser.isDevice && !this.isSingleSel()) {\n this.showPopup(e);\n }\n }\n else if (e.target.classList.contains('e-headercell') &&\n !e.target.classList.contains('e-stackedheadercell')) {\n var uid = e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n this.headerSelectionHandler(this.parent.getColumnIndexByUid(uid));\n }\n this.isMultiCtrlRequest = false;\n this.isMultiShiftRequest = false;\n if (isNullOrUndefined(closest(e.target, '.e-unboundcell'))) {\n this.preventFocus = false;\n }\n };\n Selection.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains(literals.rowCell) ||\n closest(target, '.e-gridpopup')) {\n if (target.classList.contains('e-rowselect')) {\n if (!target.classList.contains('e-spanclicked')) {\n target.classList.add('e-spanclicked');\n this.enableSelectMultiTouch = true;\n }\n else {\n target.classList.remove('e-spanclicked');\n this.enableSelectMultiTouch = false;\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n }\n }\n else {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Selection.prototype.showPopup = function (e) {\n if (!this.selectionSettings.enableSimpleMultiRowSelection) {\n setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-rowselect e-icons e-icon-rowselect' +\n (!this.isSingleSel() && (this.selectedRecords.length > (this.parent.getFrozenColumns() ? 2 : 1)\n || this.selectedRowCellIndexes.length > 1) ? ' e-spanclicked' : ''));\n }\n };\n Selection.prototype.rowCellSelectionHandler = function (rowIndex, cellIndex) {\n if ((!this.isMultiCtrlRequest && !this.isMultiShiftRequest) || this.isSingleSel()) {\n if (!this.isDragged) {\n this.selectRow(rowIndex, this.selectionSettings.enableToggle);\n }\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, this.selectionSettings.enableToggle);\n if (this.selectedRowCellIndexes.length) {\n this.updateAutoFillPosition();\n }\n this.drawBorders();\n }\n else if (this.isMultiShiftRequest) {\n if (this.parent.isCheckBoxSelection || (!this.parent.isCheckBoxSelection &&\n !closest(this.target, '.' + literals.rowCell).classList.contains(literals.gridChkBox))) {\n this.selectRowsByRange(isUndefined(this.prevRowIndex) ? rowIndex : this.prevRowIndex, rowIndex);\n }\n else {\n this.addRowsToSelection([rowIndex]);\n }\n this.selectCellsByRange(isUndefined(this.prevCIdxs) ? { rowIndex: rowIndex, cellIndex: cellIndex } : this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n this.updateAutoFillPosition();\n this.drawBorders();\n }\n else {\n this.addRowsToSelection([rowIndex]);\n this.addCellsToSelection([{ rowIndex: rowIndex, cellIndex: cellIndex }]);\n this.showHideBorders('none');\n }\n this.isDragged = false;\n };\n Selection.prototype.onCellFocused = function (e) {\n if (this.parent.frozenRows && e.container.isHeader && e.byKey) {\n if (e.keyArgs.action === 'upArrow') {\n if (this.parent.allowFiltering) {\n e.isJump = e.element.tagName === 'INPUT' ? true : false;\n }\n else {\n e.isJump = e.element.tagName === 'TH' ? true : false;\n }\n }\n else {\n if (e.keyArgs.action === 'downArrow') {\n var rIdx = Number(e.element.parentElement.getAttribute(literals.dataRowIndex));\n e.isJump = rIdx === 0 ? true : false;\n }\n else {\n if (e.keyArgs.action === 'ctrlHome') {\n e.isJump = true;\n }\n }\n }\n }\n var clear = this.parent.isFrozenGrid() ? (((e.container.isHeader && e.element.tagName !== 'TD' && e.isJump &&\n !this.selectionSettings.allowColumnSelection) ||\n ((e.container.isContent || e.element.tagName === 'TD') && !(e.container.isSelectable || e.element.tagName === 'TD')))\n && !(e.byKey && e.keyArgs.action === 'space')) : ((e.container.isHeader && e.isJump) ||\n (e.container.isContent && !e.container.isSelectable)) && !(e.byKey && e.keyArgs.action === 'space')\n && !(e.element.classList.contains('e-detailrowexpand') || e.element.classList.contains('e-detailrowcollapse'));\n var headerAction = (e.container.isHeader && e.element.tagName !== 'TD' && !closest(e.element, '.' + literals.rowCell))\n && !(e.byKey && e.keyArgs.action === 'space');\n if (!e.byKey || clear) {\n if (clear && !this.parent.isCheckBoxSelection) {\n this.clearSelection();\n }\n return;\n }\n var _a = e.container.isContent ? e.container.indexes : e.indexes, rowIndex = _a[0], cellIndex = _a[1];\n var prev = this.focus.getPrevIndexes();\n if (this.parent.frozenRows) {\n if (e.container.isHeader && (e.element.tagName === 'TD' || closest(e.element, '.' + literals.rowCell))) {\n var thLen = this.parent.getHeaderTable().querySelector('thead').childElementCount;\n rowIndex -= thLen;\n prev.rowIndex = !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex - thLen : null;\n }\n else {\n rowIndex += this.parent.frozenRows;\n prev.rowIndex = prev.rowIndex === 0 || !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex + this.parent.frozenRows : null;\n }\n }\n if (this.parent.isFrozenGrid()) {\n var cIdx = Number(e.element.getAttribute(literals.dataColIndex));\n var selectedIndexes = this.parent.getSelectedRowCellIndexes();\n if (selectedIndexes.length && prev.cellIndex === 0) {\n prev.cellIndex = selectedIndexes[selectedIndexes.length - 1].cellIndexes[0];\n }\n prev.cellIndex = !isNullOrUndefined(prev.cellIndex) ? (prev.cellIndex === cellIndex ? cIdx : cIdx - 1) : null;\n cellIndex = cIdx;\n }\n if (this.parent.enableInfiniteScrolling && this.parent.infiniteScrollSettings.enableCache) {\n rowIndex = parseInt(e.element.parentElement.getAttribute('data-rowindex'), 10);\n }\n if ((headerAction || (['ctrlPlusA', 'escape'].indexOf(e.keyArgs.action) === -1 &&\n e.keyArgs.action !== 'space' && rowIndex === prev.rowIndex && cellIndex === prev.cellIndex)) &&\n !this.selectionSettings.allowColumnSelection) {\n return;\n }\n this.preventFocus = true;\n var columnIndex = this.getKeyColIndex(e);\n if (this.needColumnSelection) {\n cellIndex = columnIndex;\n }\n if (this.parent.element.classList.contains('e-gridcell-read') && (e.keyArgs.action === 'tab' || e.keyArgs.action === 'shiftTab'\n || e.keyArgs.action === 'rightArrow' || e.keyArgs.action === 'leftArrow')) {\n var targetLabel = this.target.getAttribute('aria-label');\n targetLabel = this.target.innerHTML + ' column header ' + this.parent.getColumnByIndex(cellIndex).field;\n this.target.setAttribute('aria-label', targetLabel);\n }\n switch (e.keyArgs.action) {\n case 'downArrow':\n case 'upArrow':\n case 'enter':\n case 'shiftEnter':\n this.target = e.element;\n this.isKeyAction = true;\n this.applyDownUpKey(rowIndex, cellIndex);\n break;\n case 'rightArrow':\n case 'leftArrow':\n this.applyRightLeftKey(rowIndex, cellIndex);\n break;\n case 'shiftDown':\n case 'shiftUp':\n this.shiftDownKey(rowIndex, cellIndex);\n break;\n case 'shiftLeft':\n case 'shiftRight':\n this.applyShiftLeftRightKey(rowIndex, cellIndex);\n break;\n case 'home':\n case 'end':\n cellIndex = e.keyArgs.action === 'end' ? this.getLastColIndex(rowIndex) : 0;\n this.applyHomeEndKey(rowIndex, cellIndex);\n break;\n case 'ctrlHome':\n case 'ctrlEnd':\n this.applyCtrlHomeEndKey(rowIndex, cellIndex);\n break;\n case 'escape':\n this.clearSelection();\n break;\n case 'ctrlPlusA':\n this.ctrlPlusA();\n break;\n case 'space':\n this.applySpaceSelection(e.element);\n break;\n case 'tab':\n if (this.parent.editSettings.allowNextRowEdit) {\n this.selectRow(rowIndex);\n }\n break;\n }\n this.needColumnSelection = false;\n this.preventFocus = false;\n this.positionBorders();\n this.updateAutoFillPosition();\n };\n Selection.prototype.getKeyColIndex = function (e) {\n var uid;\n var index = null;\n var stackedHeader = e.element.querySelector('.e-stackedheadercelldiv');\n if (this.selectionSettings.allowColumnSelection && parentsUntil(e.element, 'e-columnheader')) {\n this.needColumnSelection = e.container.isHeader ? true : false;\n if (stackedHeader) {\n if (e.keyArgs.action === 'rightArrow' || e.keyArgs.action === 'leftArrow') {\n return index;\n }\n uid = stackedHeader.getAttribute('e-mappinguid');\n var innerColumn = this.getstackedColumns(this.parent.getColumnByUid(uid).columns);\n var lastIndex = this.parent.getColumnIndexByUid(innerColumn[innerColumn.length - 1].uid);\n var firstIndex = this.parent.getColumnIndexByUid(innerColumn[0].uid);\n index = this.prevColIndex >= lastIndex ? firstIndex : lastIndex;\n }\n else {\n index = this.parent.getColumnIndexByUid(e.element\n .querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n }\n }\n return index;\n };\n /**\n * Apply ctrl + A key selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.ctrlPlusA = function () {\n if (this.isRowType() && !this.isSingleSel()) {\n this.selectRowsByRange(0, this.getCurrentBatchRecordChanges().length - 1);\n }\n if (this.isCellType() && !this.isSingleSel()) {\n this.selectCellsByRange({ rowIndex: 0, cellIndex: 0 }, { rowIndex: this.parent.getRows().length - 1, cellIndex: this.parent.getColumns().length - 1 });\n }\n };\n Selection.prototype.applySpaceSelection = function (target) {\n if (target.classList.contains('e-checkselectall')) {\n this.checkedTarget = target;\n this.checkSelectAll(this.checkedTarget);\n }\n else {\n if (target.classList.contains('e-checkselect')) {\n this.checkedTarget = target;\n this.checkSelect(this.checkedTarget);\n }\n }\n };\n Selection.prototype.applyDownUpKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n if (this.parent.isCheckBoxSelection && this.parent.checkAllRows === 'Check' && !this.selectionSettings.persistSelection &&\n !this.selectionSettings.checkboxOnly) {\n this.checkSelectAllAction(false);\n this.checkedTarget = null;\n }\n if (this.isRowType() && !this.selectionSettings.checkboxOnly) {\n if (this.parent.frozenRows) {\n this.selectRow(rowIndex, true);\n this.applyUpDown(gObj.selectedRowIndex);\n }\n else {\n this.selectRow(rowIndex, true);\n this.applyUpDown(gObj.selectedRowIndex);\n }\n }\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n this.selectColumn(cellIndex);\n }\n };\n Selection.prototype.applyUpDown = function (rowIndex) {\n if (rowIndex < 0) {\n return;\n }\n if (!this.target) {\n this.target = this.parent.getRows()[0].children[this.parent.groupSettings.columns.length || 0];\n }\n var cIndex = parseInt(this.target.getAttribute(literals.dataColIndex), 10);\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (cIndex >= frzCols) {\n this.target =\n this.contentRenderer.getMovableRowByIndex(rowIndex).getElementsByClassName(literals.rowCell)[cIndex - frzCols];\n }\n else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex)\n .getElementsByClassName(literals.rowCell)[parseInt(cIndex.toString(), 10)];\n }\n }\n else {\n var row = this.contentRenderer.getRowByIndex(rowIndex);\n if (row) {\n this.target = row.getElementsByClassName(literals.rowCell)[parseInt(cIndex.toString(), 10)];\n }\n }\n this.addAttribute(this.target);\n if (this.parent.element.classList.contains('e-gridcell-read')) {\n var targetLabel = this.target.getAttribute('aria-label');\n targetLabel = this.target.innerHTML;\n this.target.setAttribute('aria-label', targetLabel);\n }\n };\n Selection.prototype.applyRightLeftKey = function (rowIndex, cellIndex) {\n if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n this.selectColumn(cellIndex);\n }\n else if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n this.addAttribute(this.target);\n }\n };\n Selection.prototype.applyHomeEndKey = function (rowIndex, cellIndex) {\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n else {\n this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n }\n };\n /**\n * Apply shift+down key selection\n *\n * @param {number} rowIndex - specfies the rowIndex\n * @param {number} cellIndex - specifies the CellIndex\n * @returns {void}\n * @hidden\n */\n Selection.prototype.shiftDownKey = function (rowIndex, cellIndex) {\n this.isMultiShiftRequest = true;\n if (this.isRowType() && !this.isSingleSel()) {\n if (!isUndefined(this.prevRowIndex)) {\n this.selectRowsByRange(this.prevRowIndex, rowIndex);\n this.applyUpDown(rowIndex);\n }\n else if (this.isPartialSelection) {\n this.selectRow(rowIndex, true);\n }\n else {\n this.selectRow(0, true);\n }\n }\n if (this.isCellType() && !this.isSingleSel()) {\n this.selectCellsByRange(this.prevCIdxs || { rowIndex: 0, cellIndex: 0 }, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n this.isMultiShiftRequest = false;\n };\n Selection.prototype.applyShiftLeftRightKey = function (rowIndex, cellIndex) {\n this.isMultiShiftRequest = true;\n if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n this.selectColumnsByRange(this.prevColIndex, cellIndex);\n }\n else {\n this.selectCellsByRange(this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n this.isMultiShiftRequest = false;\n };\n Selection.prototype.getstackedColumns = function (column) {\n var innerColumnIndexes = [];\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[parseInt(i.toString(), 10)].columns) {\n this.getstackedColumns(column[parseInt(i.toString(), 10)].columns);\n }\n else {\n innerColumnIndexes.push(column[parseInt(i.toString(), 10)]);\n }\n }\n return innerColumnIndexes;\n };\n Selection.prototype.applyCtrlHomeEndKey = function (rowIndex, cellIndex) {\n if (this.isRowType()) {\n this.selectRow(rowIndex, true);\n this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n }\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n };\n Selection.prototype.addRemoveClassesForRow = function (row, isAdd, clearAll) {\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n if (row) {\n var cells = [].slice.call(row.getElementsByClassName(literals.rowCell));\n var detailIndentCell = row.querySelector('.e-detailrowcollapse') || row.querySelector('.e-detailrowexpand');\n var dragdropIndentCell = row.querySelector('.e-rowdragdrop');\n if (detailIndentCell) {\n cells.push(detailIndentCell);\n }\n if (dragdropIndentCell) {\n cells.push(dragdropIndentCell);\n }\n addRemoveActiveClasses.apply(void 0, [cells, isAdd].concat(args));\n }\n this.getRenderer().setSelection(row ? row.getAttribute('data-uid') : null, isAdd, clearAll);\n };\n Selection.prototype.isRowType = function () {\n return this.selectionSettings.mode === 'Row' || this.selectionSettings.mode === 'Both';\n };\n Selection.prototype.isCellType = function () {\n return this.selectionSettings.mode === 'Cell' || this.selectionSettings.mode === 'Both';\n };\n Selection.prototype.isSingleSel = function () {\n return this.selectionSettings.type === 'Single';\n };\n Selection.prototype.getRenderer = function () {\n if (isNullOrUndefined(this.contentRenderer)) {\n this.contentRenderer = this.factory.getRenderer(RenderType.Content);\n }\n return this.contentRenderer;\n };\n /**\n * Gets the collection of selected records.\n *\n * @returns {Object[]} returns the Object\n */\n Selection.prototype.getSelectedRecords = function () {\n var selectedData = [];\n if (!this.selectionSettings.persistSelection && this.selectedRecords.length) {\n selectedData = this.parent.getRowsObject().filter(function (row) { return row.isSelected; })\n .map(function (m) { return m.data; });\n }\n else {\n selectedData = this.persistSelectedData;\n }\n return selectedData;\n };\n /**\n * Select the column by passing start column index\n *\n * @param {number} index - specifies the index\n * @returns {void}\n */\n Selection.prototype.selectColumn = function (index) {\n var gObj = this.parent;\n if (isNullOrUndefined(gObj.getColumns()[parseInt(index.toString(), 10)])) {\n return;\n }\n var column = gObj.getColumnByIndex(index);\n var selectedCol = gObj.getColumnHeaderByUid(column.uid);\n var isColSelected = selectedCol.classList.contains('e-columnselection');\n if ((!gObj.selectionSettings.allowColumnSelection)) {\n return;\n }\n var isMultiColumns = this.selectedColumnsIndexes.length > 1 &&\n this.selectedColumnsIndexes.indexOf(index) > -1;\n this.clearColDependency();\n if (!isColSelected || !this.selectionSettings.enableToggle || isMultiColumns) {\n var args = {\n columnIndex: index, headerCell: selectedCol,\n column: column,\n cancel: false, target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest\n };\n this.onActionBegin(args, events.columnSelecting);\n if (args.cancel) {\n this.disableInteracted();\n return;\n }\n if (!(gObj.selectionSettings.enableToggle && index === this.prevColIndex && isColSelected) || isMultiColumns) {\n this.updateColSelection(selectedCol, index);\n }\n var selectedArgs = {\n columnIndex: index, headerCell: selectedCol,\n column: column,\n target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex\n };\n this.onActionComplete(selectedArgs, events.columnSelected);\n }\n this.updateColProps(index);\n };\n /**\n * Select the columns by passing start and end column index\n *\n * @param {number} startIndex - specifies the start index\n * @param {number} endIndex - specifies the end index\n * @returns {void}\n */\n Selection.prototype.selectColumnsByRange = function (startIndex, endIndex) {\n var gObj = this.parent;\n if (isNullOrUndefined(gObj.getColumns()[parseInt(startIndex.toString(), 10)])) {\n return;\n }\n var indexes = [];\n if (gObj.selectionSettings.type === 'Single' || isNullOrUndefined(endIndex)) {\n indexes[0] = startIndex;\n }\n else {\n var min = startIndex < endIndex;\n for (var i = startIndex; min ? i <= endIndex : i >= endIndex; min ? i++ : i--) {\n indexes.push(i);\n }\n }\n this.selectColumns(indexes);\n };\n /**\n * Select the columns by passing column indexes\n *\n * @param {number[]} columnIndexes - specifies the columnIndexes\n * @returns {void}\n */\n Selection.prototype.selectColumns = function (columnIndexes) {\n var gObj = this.parent;\n var selectedCol = this.getselectedCols();\n if (gObj.selectionSettings.type === 'Single') {\n columnIndexes = [columnIndexes[0]];\n }\n if (!gObj.selectionSettings.allowColumnSelection) {\n return;\n }\n this.clearColDependency();\n var selectingArgs = {\n columnIndex: columnIndexes[0], headerCell: selectedCol,\n columnIndexes: columnIndexes,\n column: gObj.getColumnByIndex(columnIndexes[0]),\n cancel: false, target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest\n };\n this.onActionBegin(selectingArgs, events.columnSelecting);\n if (selectingArgs.cancel) {\n this.disableInteracted();\n return;\n }\n for (var i = 0, len = columnIndexes.length; i < len; i++) {\n this.updateColSelection(gObj.getColumnHeaderByUid(gObj.getColumnByIndex(columnIndexes[parseInt(i.toString(), 10)]).uid), columnIndexes[parseInt(i.toString(), 10)]);\n }\n selectedCol = this.getselectedCols();\n var selectedArgs = {\n columnIndex: columnIndexes[0], headerCell: selectedCol,\n columnIndexes: columnIndexes,\n column: gObj.getColumnByIndex(columnIndexes[0]),\n target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex\n };\n this.onActionComplete(selectedArgs, events.columnSelected);\n this.updateColProps(columnIndexes[0]);\n };\n /**\n * Select the column with existing column by passing column index\n *\n * @param {number} startIndex - specifies the start index\n * @returns {void}\n */\n Selection.prototype.selectColumnWithExisting = function (startIndex) {\n var gObj = this.parent;\n if (isNullOrUndefined(gObj.getColumns()[parseInt(startIndex.toString(), 10)])) {\n return;\n }\n var newCol = gObj.getColumnHeaderByUid(gObj.getColumnByIndex(startIndex).uid);\n var selectedCol = this.getselectedCols();\n if (gObj.selectionSettings.type === 'Single') {\n this.clearColDependency();\n }\n if (!gObj.selectionSettings.allowColumnSelection) {\n return;\n }\n if (this.selectedColumnsIndexes.indexOf(startIndex) > -1) {\n this.clearColumnSelection(startIndex);\n }\n else {\n var selectingArgs = {\n columnIndex: startIndex, headerCell: selectedCol,\n columnIndexes: this.selectedColumnsIndexes,\n column: gObj.getColumnByIndex(startIndex),\n cancel: false, target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest\n };\n this.onActionBegin(selectingArgs, events.columnSelecting);\n if (selectingArgs.cancel) {\n this.disableInteracted();\n return;\n }\n this.updateColSelection(newCol, startIndex);\n selectedCol = this.getselectedCols();\n var selectedArgs = {\n columnIndex: startIndex, headerCell: selectedCol,\n column: gObj.getColumnByIndex(startIndex),\n columnIndexes: this.selectedColumnsIndexes,\n target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex\n };\n this.onActionComplete(selectedArgs, events.columnSelected);\n }\n this.updateColProps(startIndex);\n };\n /**\n * Clear the column selection\n *\n * @param {number} clearIndex - specifies the clearIndex\n * @returns {void}\n */\n Selection.prototype.clearColumnSelection = function (clearIndex) {\n if (this.isColumnSelected) {\n var gObj = this.parent;\n if (!isNullOrUndefined(clearIndex) && this.selectedColumnsIndexes.indexOf(clearIndex) === -1) {\n return;\n }\n var index = !isNullOrUndefined(clearIndex) ? clearIndex :\n this.selectedColumnsIndexes[this.selectedColumnsIndexes.length - 1];\n var col = gObj.getColumnByIndex(index);\n var selectedCol = void 0;\n var column = gObj.getColumnByIndex(index);\n if (col.getFreezeTableName() === literals.frozenRight) {\n selectedCol = gObj.getFrozenRightColumnHeaderByIndex(index);\n }\n else if (col.getFreezeTableName() === 'movable') {\n selectedCol = gObj.getMovableColumnHeaderByIndex(index);\n }\n else {\n selectedCol = gObj.getColumnHeaderByUid(column.uid);\n }\n var deselectedArgs = {\n columnIndex: index, headerCell: selectedCol,\n columnIndexes: this.selectedColumnsIndexes,\n column: column,\n cancel: false, target: this.actualTarget,\n isInteracted: this.isInteracted\n };\n var isCanceled = this.columnDeselect(deselectedArgs, events.columnDeselecting);\n if (isCanceled) {\n this.disableInteracted();\n return;\n }\n var selectedHeader = !isNullOrUndefined(clearIndex) ? [selectedCol] :\n [].slice.call(gObj.getHeaderContent().getElementsByClassName('e-columnselection'));\n var selectedCells = this.getSelectedColumnCells(clearIndex);\n for (var i = 0, len = selectedHeader.length; i < len; i++) {\n addRemoveActiveClasses([selectedHeader[parseInt(i.toString(), 10)]], false, 'e-columnselection');\n }\n for (var i = 0, len = selectedCells.length; i < len; i++) {\n addRemoveActiveClasses([selectedCells[parseInt(i.toString(), 10)]], false, 'e-columnselection');\n }\n if (!isNullOrUndefined(clearIndex)) {\n this.selectedColumnsIndexes.splice(this.selectedColumnsIndexes.indexOf(clearIndex), 1);\n this.parent.getColumns()[parseInt(clearIndex.toString(), 10)].isSelected = false;\n }\n else {\n this.columnDeselect(deselectedArgs, events.columnDeselected);\n this.selectedColumnsIndexes = [];\n this.isColumnSelected = false;\n this.parent.getColumns().filter(function (col) { return col.isSelected = false; });\n }\n }\n };\n Selection.prototype.getselectedCols = function () {\n var gObj = this.parent;\n var selectedCol;\n if (this.selectedColumnsIndexes.length > 1) {\n selectedCol = [];\n for (var i = 0; i < this.selectedColumnsIndexes.length; i++) {\n (selectedCol).push(gObj.getColumnHeaderByUid(gObj.getColumnByIndex(this.selectedColumnsIndexes[parseInt(i.toString(), 10)]).uid));\n }\n }\n else {\n selectedCol = gObj.getColumnHeaderByUid(gObj.getColumnByIndex(this.selectedColumnsIndexes[0]).uid);\n }\n return selectedCol;\n };\n Selection.prototype.getSelectedColumnCells = function (clearIndex) {\n var gObj = this.parent;\n var isRowTemplate = !isNullOrUndefined(this.parent.rowTemplate);\n var rows = isRowTemplate ? gObj.getRows() : gObj.getDataRows();\n var movableRows;\n var frRows;\n if (gObj.isFrozenGrid() && gObj.getContent().querySelector('.' + literals.movableContent)) {\n movableRows = isRowTemplate ? gObj.getMovableRows() : gObj.getMovableDataRows();\n rows = gObj.addMovableRows(rows, movableRows);\n if (gObj.getFrozenMode() === literals.leftRight) {\n frRows = isRowTemplate ? gObj.getFrozenRightRows() : gObj.getFrozenRightDataRows();\n rows = gObj.addMovableRows(rows, frRows);\n }\n }\n var seletedcells = [];\n var selectionString = !isNullOrUndefined(clearIndex) ? '[data-colindex=\"' + clearIndex + '\"]' : '.e-columnselection';\n for (var i = 0, len = rows.length; i < len; i++) {\n seletedcells = seletedcells.concat([].slice.call(rows[parseInt(i.toString(), 10)].querySelectorAll(selectionString)));\n }\n return seletedcells;\n };\n Selection.prototype.columnDeselect = function (args, event) {\n if (event === 'columnDeselected') {\n delete args.cancel;\n }\n this.onActionComplete(args, event);\n return args.cancel;\n };\n Selection.prototype.updateColProps = function (startIndex) {\n this.prevColIndex = startIndex;\n this.isColumnSelected = this.selectedColumnsIndexes.length && true;\n };\n Selection.prototype.clearColDependency = function () {\n this.clearColumnSelection();\n this.selectedColumnsIndexes = [];\n };\n Selection.prototype.updateColSelection = function (selectedCol, startIndex) {\n if (isNullOrUndefined(this.parent.getColumns()[parseInt(startIndex.toString(), 10)])) {\n return;\n }\n var left = this.parent.getFrozenLeftCount();\n var movable = this.parent.getMovableColumnsCount();\n var col = this.parent.getColumnByIndex(startIndex);\n var isRowTemplate = !isNullOrUndefined(this.parent.rowTemplate);\n var rows;\n this.selectedColumnsIndexes.push(startIndex);\n this.parent.getColumns()[parseInt(startIndex.toString(), 10)].isSelected = true;\n if (col.getFreezeTableName() === literals.frozenRight) {\n startIndex = startIndex - (left + movable);\n rows = isRowTemplate ? this.parent.getFrozenRightRows() : this.parent.getFrozenRightDataRows();\n }\n else if (col.getFreezeTableName() === 'movable') {\n startIndex = startIndex - left;\n rows = isRowTemplate ? this.parent.getMovableRows() : this.parent.getMovableDataRows();\n }\n else {\n startIndex = startIndex + this.parent.getIndentCount();\n rows = isRowTemplate ? this.parent.getRows() : this.parent.getDataRows();\n }\n addRemoveActiveClasses([selectedCol], true, 'e-columnselection');\n for (var j = 0, len = rows.length; j < len; j++) {\n if (rows[parseInt(j.toString(), 10)].classList.contains(literals.row)) {\n if ((rows[parseInt(j.toString(), 10)].classList.contains(literals.editedRow)\n || rows[parseInt(j.toString(), 10)].classList.contains(literals.addedRow))\n && this.parent.editSettings.mode === 'Normal'\n && !isNullOrUndefined(rows[parseInt(j.toString(), 10)].querySelector('tr').childNodes[parseInt(startIndex.toString(), 10)])) {\n addRemoveActiveClasses([rows[parseInt(j.toString(), 10)].querySelector('tr').childNodes[parseInt(startIndex.toString(), 10)]], true, 'e-columnselection');\n }\n else if (!isNullOrUndefined(rows[parseInt(j.toString(), 10)].childNodes[parseInt(startIndex.toString(), 10)])) {\n addRemoveActiveClasses([rows[parseInt(j.toString(), 10)].childNodes[parseInt(startIndex.toString(), 10)]], true, 'e-columnselection');\n }\n }\n }\n };\n Selection.prototype.headerSelectionHandler = function (colIndex) {\n if ((!this.isMultiCtrlRequest && !this.isMultiShiftRequest) || this.isSingleSel()) {\n this.selectColumn(colIndex);\n }\n else if (this.isMultiShiftRequest) {\n this.selectColumnsByRange(isUndefined(this.prevColIndex) ? colIndex : this.prevColIndex, colIndex);\n }\n else {\n this.selectColumnWithExisting(colIndex);\n }\n };\n // eslint-disable-next-line camelcase\n Selection.prototype.addEventListener_checkbox = function () {\n var _this = this;\n this.parent.on(events.dataReady, this.dataReady, this);\n this.onDataBoundFunction = this.onDataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.onDataBoundFunction);\n this.parent.on(events.refreshInfinitePersistSelection, this.onDataBoundFunction);\n this.parent.on(events.contentReady, this.checkBoxSelectionChanged, this);\n this.parent.on(events.beforeRefreshOnDataChange, this.initPerisistSelection, this);\n this.parent.on(events.onEmpty, this.setCheckAllForEmptyGrid, this);\n this.actionCompleteFunc = this.actionCompleteHandler.bind(this);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.on(events.click, this.clickHandler, this);\n this.resizeEndFn = function () {\n _this.updateAutoFillPosition();\n _this.drawBorders();\n };\n this.resizeEndFn.bind(this);\n this.parent.addEventListener(events.resizeStop, this.resizeEndFn);\n };\n // eslint-disable-next-line camelcase\n Selection.prototype.removeEventListener_checkbox = function () {\n this.parent.off(events.dataReady, this.dataReady);\n this.parent.removeEventListener(events.dataBound, this.onDataBoundFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.off(events.refreshInfinitePersistSelection, this.onDataBoundFunction);\n this.parent.off(events.onEmpty, this.setCheckAllForEmptyGrid);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.beforeRefreshOnDataChange, this.initPerisistSelection);\n };\n Selection.prototype.setCheckAllForEmptyGrid = function () {\n var checkAllBox = this.getCheckAllBox();\n if (checkAllBox) {\n this.parent.isCheckBoxSelection = true;\n var spanEle = checkAllBox.nextElementSibling;\n removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n };\n Selection.prototype.dataReady = function (e) {\n this.isHeaderCheckboxClicked = false;\n var isInfinitecroll = this.parent.enableInfiniteScrolling && e.requestType === 'infiniteScroll';\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection && !isInfinitecroll) {\n this.disableUI = !this.parent.enableImmutableMode && !(e.requestType == 'save' && e['action'] == 'add');\n this.clearSelection();\n this.setCheckAllState();\n this.disableUI = false;\n }\n };\n Selection.prototype.actionCompleteHandler = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n };\n Selection.prototype.selectRowIndex = function (index) {\n this.parent.isSelectedRowIndexUpdating = true;\n if ((isNullOrUndefined(this.parent.selectedRowIndex) || this.parent.selectedRowIndex === -1) || !this.parent.enablePersistence) {\n this.parent.selectedRowIndex = index;\n }\n else {\n this.parent.selectedRowIndex = -1;\n }\n };\n Selection.prototype.disableInteracted = function () {\n this.isInteracted = false;\n };\n Selection.prototype.activeTarget = function () {\n this.actualTarget = this.isInteracted ? this.actualTarget : null;\n };\n return Selection;\n}());\nexport { Selection };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\n/**\n * The `Search` module is used to handle search action.\n */\nvar Search = /** @class */ (function () {\n /**\n * Constructor for Grid search module.\n *\n * @param {IGrid} parent - specifies the IGrid\n * @hidden\n */\n function Search(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * Searches Grid records by given key.\n *\n * > You can customize the default search action by using [`searchSettings`](./searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n Search.prototype.search = function (searchString) {\n var gObj = this.parent;\n searchString = isNullOrUndefined(searchString) ? '' : searchString;\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.search, arg1: searchString });\n return;\n }\n if (searchString !== gObj.searchSettings.key) {\n gObj.searchSettings.key = searchString.toString();\n gObj.dataBind();\n }\n else if (this.refreshSearch) {\n gObj.refresh();\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Search.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.searchComplete, this.onSearchComplete, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.actionCompleteFunc = this.onActionComplete.bind(this);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.on(events.cancelBegin, this.cancelBeginEvent, this);\n };\n /**\n * @returns {void}\n * @hidden\n */\n Search.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.searchComplete, this.onSearchComplete);\n this.parent.off(events.destroy, this.destroy);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.off(events.cancelBegin, this.cancelBeginEvent);\n };\n /**\n * To destroy the print\n *\n * @returns {void}\n * @hidden\n */\n Search.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {NotifyArgs} e - specfies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Search.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (!isNullOrUndefined(e.properties.key)) {\n this.parent.notify(events.modelChanged, {\n requestType: 'searching', type: events.actionBegin, searchString: this.parent.searchSettings.key\n });\n }\n else {\n this.parent.notify(events.modelChanged, {\n requestType: 'searching', type: events.actionBegin\n });\n }\n };\n /**\n * The function used to trigger onActionComplete\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Search.prototype.onSearchComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n searchString: this.parent.searchSettings.key, requestType: 'searching', type: events.actionComplete\n }));\n };\n /**\n * The function used to store the requestType\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Search.prototype.onActionComplete = function (e) {\n this.refreshSearch = e.requestType !== 'searching';\n };\n Search.prototype.cancelBeginEvent = function (e) {\n if (e.requestType === 'searching') {\n this.parent.setProperties({ searchSettings: { key: '' } }, true);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Search.prototype.getModuleName = function () {\n return 'search';\n };\n return Search;\n}());\nexport { Search };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject, isGroupAdaptive, isActionPrevent, addRemoveEventListener } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * The `ShowHide` module is used to control column visibility.\n */\nvar ShowHide = /** @class */ (function () {\n /**\n * Constructor for the show hide module.\n *\n * @param {IGrid} parent - specifies the IGrid\n * @hidden\n */\n function ShowHide(parent) {\n this.colName = [];\n this.isShowHide = false;\n this.parent = parent;\n this.addEventListener();\n }\n ShowHide.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.evtHandlers = [{ event: events.batchCancel, handler: this.batchChanges },\n { event: events.batchCnfrmDlgCancel, handler: this.resetColumnState }\n ];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n };\n /**\n * @returns {void}\n * @hidden\n */\n ShowHide.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n };\n ShowHide.prototype.batchChanges = function () {\n if (this.isShowHide) {\n this.isShowHide = false;\n this.setVisible(this.colName, this.changedCol);\n this.changedCol = this.colName = [];\n }\n };\n /**\n * Shows a column by column name.\n *\n * @param {string|string[]} columnName - Defines a single or collection of column names to show.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n ShowHide.prototype.show = function (columnName, showBy) {\n var keys = this.getToggleFields(columnName);\n var columns = this.getColumns(keys, showBy);\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n for (var i = 0; i < columns.length; i++) {\n columns[parseInt(i.toString(), 10)].visible = true;\n }\n this.setVisible(columns);\n };\n /**\n * Hides a column by column name.\n *\n * @param {string|string[]} columnName - Defines a single or collection of column names to hide.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n ShowHide.prototype.hide = function (columnName, hideBy) {\n var keys = this.getToggleFields(columnName);\n var columns = this.getColumns(keys, hideBy);\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n for (var i = 0; i < columns.length; i++) {\n columns[parseInt(i.toString(), 10)].visible = false;\n }\n this.setVisible(columns);\n };\n ShowHide.prototype.getToggleFields = function (key) {\n var finalized = [];\n if (typeof key === 'string') {\n finalized = [key];\n }\n else {\n finalized = key;\n }\n return finalized;\n };\n ShowHide.prototype.getColumns = function (keys, getKeyBy) {\n var _this = this;\n var columns = iterateArrayOrObject(keys, function (key) {\n return iterateArrayOrObject(_this.parent.columnModel, function (item) {\n if (item[\"\" + getKeyBy] === key) {\n return item;\n }\n return undefined;\n })[0];\n });\n return columns;\n };\n ShowHide.prototype.batchActionPrevent = function (columns, changedStateColumns) {\n if (changedStateColumns === void 0) { changedStateColumns = []; }\n if (isActionPrevent(this.parent)) {\n this.colName = columns;\n this.changedCol = changedStateColumns;\n this.parent.closeEdit();\n return false;\n }\n return true;\n };\n ShowHide.prototype.resetColumnState = function () {\n if (this.isShowHide) {\n for (var i = 0; i < this.colName.length; i++) {\n this.colName[parseInt(i.toString(), 10)].visible = !this.colName[parseInt(i.toString(), 10)].visible;\n }\n }\n };\n /**\n * Shows or hides columns by given column collection.\n *\n * @private\n * @param {Column[]} columns - Specifies the columns.\n * @param {Column[]} changedStateColumns - specifies the changedStateColumns\n * @returns {void}\n */\n ShowHide.prototype.setVisible = function (columns, changedStateColumns) {\n var _this = this;\n if (changedStateColumns === void 0) { changedStateColumns = []; }\n this.isShowHide = true;\n if (!this.batchActionPrevent(columns, changedStateColumns)) {\n return;\n }\n changedStateColumns = (changedStateColumns.length > 0) ? changedStateColumns : columns;\n var args = {\n requestType: 'columnstate',\n cancel: false,\n columns: changedStateColumns\n };\n var cancel = 'cancel';\n if (this.parent.enableInfiniteScrolling && this.parent.allowGrouping\n && this.parent.groupModule.groupSettings.columns.length > 0) {\n this.parent.contentModule.visibleRows = [];\n }\n this.parent.trigger(events.actionBegin, args, function (showHideArgs) {\n var currentViewCols = _this.parent.getColumns();\n columns = isNullOrUndefined(columns) ? currentViewCols : columns;\n if (showHideArgs[\"\" + cancel]) {\n _this.parent.notify(events.resetColumns, { showHideArgs: showHideArgs });\n if (columns.length > 0) {\n columns[0].visible = true;\n }\n return;\n }\n if (isGroupAdaptive(_this.parent)) {\n _this.parent.contentModule.emptyVcRows();\n }\n if (_this.parent.allowSelection && _this.parent.getSelectedRecords().length &&\n !_this.parent.selectionSettings.persistSelection) {\n _this.parent.clearSelection();\n }\n if (_this.parent.enableColumnVirtualization) {\n var colsInCurrentView = columns.filter(function (col1) { return (currentViewCols.some(function (col2) { return col1.field === col2.field; })); });\n if (colsInCurrentView.length) {\n _this.parent.notify(events.columnVisibilityChanged, columns);\n }\n }\n else {\n _this.parent.notify(events.columnVisibilityChanged, columns);\n }\n var params = {\n requestType: 'columnstate',\n columns: changedStateColumns\n };\n _this.parent.trigger(events.actionComplete, params);\n if (_this.parent.columnQueryMode !== 'All') {\n _this.parent.refresh();\n }\n });\n if (this.parent.autoFit && !this.parent.groupSettings.columns.length) {\n this.parent.preventAdjustColumns();\n }\n };\n return ShowHide;\n}());\nexport { ShowHide };\n","import { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getScrollBarWidth, getUpdateUsingRaf } from '../base/util';\nimport { scroll, contentReady, uiUpdate, onEmpty, headerRefreshed, textWrapRefresh, virtualScrollEdit, infiniteScrollHandler, closeFilterDialog } from '../base/constant';\nimport { lazyLoadScrollHandler, checkScrollReset } from '../base/constant';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as literals from '../base/string-literals';\nimport * as events from '../base/constant';\n/**\n * The `Scroll` module is used to handle scrolling behaviour.\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the Grid scrolling.\n *\n * @param {IGrid} parent - specifies the IGrid\n * @hidden\n */\n function Scroll(parent) {\n //To maintain scroll state on grid actions.\n this.previousValues = { top: 0, left: 0 };\n this.oneTimeReady = true;\n this.parent = parent;\n this.widthService = new ColumnWidthService(parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * @param {boolean} uiupdate - specifies the uiupdate\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.setWidth = function (uiupdate) {\n this.parent.element.style.width = formatUnit(this.parent.width);\n if (uiupdate) {\n this.widthService.setWidthToColumns();\n }\n if (this.parent.toolbarModule && this.parent.toolbarModule.toolbar &&\n this.parent.toolbarModule.toolbar.element) {\n var tlbrElement = this.parent.toolbarModule.toolbar.element;\n var tlbrLeftElement = tlbrElement.querySelector('.e-toolbar-left');\n var tlbrCenterElement = tlbrElement.querySelector('.e-toolbar-center');\n var tlbrRightElement = tlbrElement.querySelector('.e-toolbar-right');\n var tlbrItems = tlbrElement.querySelector('.e-toolbar-items');\n var tlbrLeftWidth = tlbrLeftElement ? tlbrLeftElement.clientWidth : 0;\n var tlbrCenterWidth = tlbrCenterElement ? tlbrCenterElement.clientWidth : 0;\n var tlbrRightWidth = tlbrRightElement ? tlbrRightElement.clientWidth : 0;\n var tlbrItemsWidth = tlbrItems ? tlbrItems.clientWidth : 0;\n var tlbrWidth = tlbrElement ? tlbrElement.clientWidth : 0;\n if (!this.parent.enableAdaptiveUI || tlbrLeftWidth > tlbrWidth || tlbrCenterWidth > tlbrWidth || tlbrRightWidth > tlbrWidth ||\n tlbrItemsWidth > tlbrWidth) {\n this.parent.toolbarModule.toolbar.refreshOverflow();\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n var mHdrHeight = 0;\n var content = this.parent.getContent().querySelector('.' + literals.content);\n var height = this.parent.height;\n if (this.parent.isFrozenGrid() && this.parent.height !== 'auto' && this.parent.height.toString().indexOf('%') < 0) {\n height = parseInt(height, 10) - Scroll.getScrollBarWidth();\n }\n if (!this.parent.enableVirtualization && this.parent.frozenRows && this.parent.height !== 'auto') {\n var tbody = this.parent.getHeaderContent()\n .querySelector(literals.tbody + ':not(.e-masked-tbody)');\n mHdrHeight = tbody ? tbody.offsetHeight : 0;\n if (tbody && mHdrHeight) {\n var add = tbody.getElementsByClassName(literals.addedRow).length;\n var height_1 = add * this.parent.getRowHeight();\n mHdrHeight -= height_1;\n }\n else if (!this.parent.isInitialLoad && this.parent.loadingIndicator.indicatorType === 'Shimmer'\n && this.parent.getHeaderContent().querySelector('.e-masked-table')) {\n height = parseInt(height, 10) - (this.parent.frozenRows * this.parent.getRowHeight());\n }\n content.style.height = formatUnit(height - mHdrHeight);\n }\n else {\n content.style.height = formatUnit(height);\n }\n this.ensureOverflow(content);\n if (this.parent.isFrozenGrid()) {\n this.refresh();\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.setPadding = function () {\n var content = this.parent.getHeaderContent();\n var scrollWidth = Scroll.getScrollBarWidth() - this.getThreshold();\n var cssProps = this.getCssProperties();\n var padding = this.parent.getFrozenMode() === 'Right' || this.parent.getFrozenMode() === literals.leftRight ? '0.5px' : '1px';\n content.querySelector('.' + literals.headerContent).style[cssProps.border] = scrollWidth > 0 ? padding : '0px';\n content.style[cssProps.padding] = scrollWidth > 0 ? scrollWidth + 'px' : '0px';\n };\n /**\n * @param {boolean} rtl - specifies the rtl\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.removePadding = function (rtl) {\n var cssProps = this.getCssProperties(rtl);\n var hDiv = this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n hDiv.style[cssProps.border] = '';\n hDiv.parentElement.style[cssProps.padding] = '';\n var footerDiv = this.parent.getFooterContent();\n if (footerDiv && footerDiv.classList.contains('e-footerpadding')) {\n footerDiv.classList.remove('e-footerpadding');\n }\n };\n /**\n * Refresh makes the Grid adoptable with the height of parent container.\n *\n * > The [`height`](./#height) must be set to 100%.\n *\n * @returns {void}\n */\n Scroll.prototype.refresh = function () {\n if (this.parent.height !== '100%') {\n return;\n }\n var content = this.parent.getContent();\n this.parent.element.style.height = '100%';\n var height = this.widthService.getSiblingsHeight(content);\n content.style.height = 'calc(100% - ' + height + 'px)'; //Set the height to the '.' + literals.gridContent;\n if (this.parent.isFrozenGrid()) {\n content.firstElementChild.style.height = 'calc(100% - ' + getScrollBarWidth() + 'px)';\n }\n };\n Scroll.prototype.getThreshold = function () {\n /* Some browsers places the scroller outside the content,\n * hence the padding should be adjusted.*/\n var appName = Browser.info.name;\n if (appName === 'mozilla') {\n return 0.5;\n }\n return 1;\n };\n /**\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(onEmpty, this.wireEvents, this);\n this.parent.on(contentReady, this.wireEvents, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n this.parent.on(textWrapRefresh, this.wireEvents, this);\n this.parent.on(headerRefreshed, this.setScrollLeft, this);\n };\n /**\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(onEmpty, this.wireEvents);\n this.parent.off(contentReady, this.wireEvents);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n this.parent.off(textWrapRefresh, this.wireEvents);\n this.parent.off(headerRefreshed, this.setScrollLeft);\n this.unwireEvents();\n };\n Scroll.prototype.unwireEvents = function () {\n var frzCols = this.parent.isFrozenGrid();\n var mCont;\n var mHdr;\n if (this.content) {\n mCont = this.content.querySelector('.' + literals.movableContent);\n }\n if (this.header) {\n mHdr = this.header.querySelector('.' + literals.movableHeader);\n }\n var mScrollBar = this.parent.getContent() ? this.parent.getContent().querySelector('.e-movablescrollbar') : null;\n if (this.parent.frozenRows && ((this.header && !frzCols) || (frzCols && mHdr))) {\n EventHandler.remove(frzCols ? mHdr : this.header, 'touchstart pointerdown', this.setPageXY);\n EventHandler.remove(frzCols ? mHdr : this.header, 'touchmove pointermove', this.onTouchScroll);\n }\n if (this.parent.isFrozenGrid()) {\n if (mScrollBar) {\n EventHandler.remove(mScrollBar, 'scroll', this.onCustomScrollbarScroll);\n }\n if (mCont) {\n EventHandler.remove(mCont, 'scroll', this.onCustomScrollbarScroll);\n EventHandler.remove(mCont, 'touchstart pointerdown', this.setPageXY);\n if (!(/macintosh|ipad/.test(Browser.userAgent.toLowerCase()) && Browser.isDevice)) {\n EventHandler.remove(mCont, 'touchmove pointermove', this.onTouchScroll);\n }\n }\n if (mHdr) {\n EventHandler.remove(mHdr, 'scroll', this.onCustomScrollbarScroll);\n EventHandler.remove(mHdr, 'touchstart pointerdown', this.setPageXY);\n EventHandler.remove(mHdr, 'touchmove pointermove', this.onTouchScroll);\n }\n if (this.content) {\n EventHandler.remove(this.content, 'scroll', this.onFrozenContentScroll);\n }\n }\n else {\n if (this.content) {\n EventHandler.remove(this.content, 'scroll', this.contentScrollHandler);\n }\n if (this.header) {\n EventHandler.remove(this.header, 'scroll', this.headerScrollHandler);\n }\n this.contentScrollHandler = null;\n this.headerScrollHandler = null;\n }\n if (this.parent.aggregates.length && this.parent.getFooterContent()) {\n EventHandler.remove(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll);\n }\n };\n Scroll.prototype.setScrollLeft = function () {\n if (this.parent.isFrozenGrid()) {\n this.parent.headerModule.getMovableHeader().scrollLeft = this.previousValues.left;\n }\n else {\n this.parent.getHeaderContent().querySelector('.' + literals.headerContent).scrollLeft = this.previousValues.left;\n }\n };\n Scroll.prototype.onFrozenContentScroll = function () {\n var _this = this;\n return function (e) {\n if (_this.content.querySelector(literals.tbody) === null || _this.parent.isPreventScrollEvent) {\n return;\n }\n if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.enableInfiniteScrolling) {\n _this.parent.notify(infiniteScrollHandler, e);\n }\n _this.previousValues.top = e.target.scrollTop;\n };\n };\n Scroll.prototype.onContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n var isHeader = element.classList.contains(literals.headerContent);\n return function (e) {\n if (_this.content.querySelector(literals.tbody) === null || _this.parent.isPreventScrollEvent) {\n return;\n }\n var target = e.target;\n var left = target.scrollLeft;\n if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.enableInfiniteScrolling && !_this.parent.isEdit) {\n _this.parent.notify(infiniteScrollHandler, { target: e.target, isLeft: _this.previousValues.left !== left });\n }\n if (_this.parent.groupSettings.columns.length && _this.parent.groupSettings.enableLazyLoading) {\n var isDown = _this.previousValues.top < _this.parent.getContent().firstElementChild.scrollTop;\n _this.parent.notify(lazyLoadScrollHandler, { scrollDown: isDown });\n }\n _this.parent.notify(virtualScrollEdit, {});\n var isFooter = target.classList.contains('e-summarycontent');\n if (_this.previousValues.left === left) {\n _this.previousValues.top = !isHeader ? _this.previousValues.top : target.scrollTop;\n return;\n }\n _this.parent.notify(closeFilterDialog, e);\n element.scrollLeft = left;\n if (isFooter) {\n _this.header.scrollLeft = left;\n }\n _this.previousValues.left = left;\n _this.parent.notify(scroll, { left: left });\n };\n };\n Scroll.prototype.onCustomScrollbarScroll = function (mCont, mHdr) {\n var _this = this;\n var content = mCont;\n var header = mHdr;\n return function (e) {\n if (_this.content.querySelector(literals.tbody) === null) {\n return;\n }\n var target = e.target;\n var left = target.scrollLeft;\n if (_this.previousValues.left === left) {\n return;\n }\n content.scrollLeft = left;\n header.scrollLeft = left;\n _this.previousValues.left = left;\n _this.parent.notify(scroll, { left: left });\n if (_this.parent.isDestroyed) {\n return;\n }\n };\n };\n Scroll.prototype.onTouchScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n var isFrozen = _this.parent.isFrozenGrid();\n var pageXY = _this.getPointXY(e);\n var left = element.scrollLeft + (_this.pageXY.x - pageXY.x);\n var mHdr = isFrozen ?\n _this.parent.getHeaderContent().querySelector('.' + literals.movableHeader) :\n _this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n var mCont = isFrozen ?\n _this.parent.getContent().querySelector('.' + literals.movableContent) :\n _this.parent.getContent().querySelector('.' + literals.content);\n if (_this.previousValues.left === left || (left < 0 || (mHdr.scrollWidth - mHdr.clientWidth) < left)) {\n return;\n }\n e.preventDefault();\n mHdr.scrollLeft = left;\n mCont.scrollLeft = left;\n if (isFrozen) {\n var scrollBar = _this.parent.getContent().querySelector('.e-movablescrollbar');\n scrollBar.scrollLeft = left;\n }\n _this.pageXY.x = pageXY.x;\n _this.previousValues.left = left;\n };\n };\n Scroll.prototype.setPageXY = function () {\n var _this = this;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n _this.pageXY = _this.getPointXY(e);\n };\n };\n Scroll.prototype.getPointXY = function (e) {\n var pageXY = { x: 0, y: 0 };\n if (e.touches && e.touches.length) {\n pageXY.x = e.touches[0].pageX;\n pageXY.y = e.touches[0].pageY;\n }\n else {\n pageXY.x = e.pageX;\n pageXY.y = e.pageY;\n }\n return pageXY;\n };\n Scroll.prototype.getScrollbleParent = function (node) {\n if (node === null) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var parent = isNullOrUndefined(node.tagName) ? node.scrollingElement : node;\n var overflowY = document.defaultView.getComputedStyle(parent, null).overflowY;\n if (parent.scrollHeight > parent.clientHeight && overflowY !== 'hidden'\n && overflowY !== 'visible' || node.tagName === 'HTML' || node.tagName === 'BODY') {\n return node;\n }\n else {\n return this.getScrollbleParent(node.parentNode);\n }\n };\n /**\n * @param {boolean} isAdd - specifies whether adding/removing the event\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.addStickyListener = function (isAdd) {\n this.parentElement = this.getScrollbleParent(this.parent.element.parentElement);\n if (isAdd && this.parentElement) {\n this.eventElement = this.parentElement.tagName === 'HTML' || this.parentElement.tagName === 'BODY' ? document :\n this.parentElement;\n EventHandler.add(this.eventElement, 'scroll', this.makeStickyHeader, this);\n }\n else if (this.eventElement) {\n EventHandler.remove(this.eventElement, 'scroll', this.makeStickyHeader);\n this.eventElement = null;\n }\n };\n Scroll.prototype.wireEvents = function () {\n var _this = this;\n if (this.oneTimeReady) {\n var frzCols = this.parent.isFrozenGrid();\n this.content = this.parent.getContent().querySelector('.' + literals.content);\n this.header = this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n var mCont = this.content.querySelector('.' + literals.movableContent);\n var mHdr = this.header.querySelector('.' + literals.movableHeader);\n var mScrollBar = this.parent.getContent().querySelector('.e-movablescrollbar');\n if (this.parent.frozenRows) {\n EventHandler.add(frzCols ? mHdr : this.header, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(frzCols ? mHdr : this.header, 'touchmove pointermove', this.onTouchScroll(frzCols ? mCont : this.content), this);\n }\n if (this.parent.isFrozenGrid()) {\n EventHandler.add(mScrollBar, 'scroll', this.onCustomScrollbarScroll(mCont, mHdr), this);\n EventHandler.add(mCont, 'scroll', this.onCustomScrollbarScroll(mScrollBar, mHdr), this);\n EventHandler.add(mHdr, 'scroll', this.onCustomScrollbarScroll(mScrollBar, mCont), this);\n EventHandler.add(this.content, 'scroll', this.onFrozenContentScroll(), this);\n EventHandler.add(mHdr, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(mHdr, 'touchmove pointermove', this.onTouchScroll(mCont), this);\n EventHandler.add(mCont, 'touchstart pointerdown', this.setPageXY(), this);\n if (!(/macintosh|ipad/.test(Browser.userAgent.toLowerCase()) && Browser.isDevice)) {\n EventHandler.add(mCont, 'touchmove pointermove', this.onTouchScroll(mHdr), this);\n }\n }\n else {\n this.contentScrollHandler = this.onContentScroll(this.header);\n this.headerScrollHandler = this.onContentScroll(this.content);\n EventHandler.add(this.content, 'scroll', this.contentScrollHandler, this);\n EventHandler.add(this.header, 'scroll', this.headerScrollHandler, this);\n }\n if (this.parent.aggregates.length) {\n EventHandler.add(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll(this.content), this);\n }\n if (this.parent.enableStickyHeader) {\n this.addStickyListener(true);\n }\n this.refresh();\n this.oneTimeReady = false;\n }\n var table = this.parent.getContentTable();\n var sLeft;\n var sHeight;\n var clientHeight;\n getUpdateUsingRaf(function () {\n sLeft = _this.header.scrollLeft;\n sHeight = table.scrollHeight;\n clientHeight = _this.parent.getContent().clientHeight;\n }, function () {\n var args = { cancel: false };\n _this.parent.notify(checkScrollReset, args);\n if (sHeight < clientHeight) {\n _this.setLastRowCell();\n }\n if (!_this.parent.enableVirtualization && !_this.parent.enableInfiniteScrolling) {\n if (!args.cancel) {\n if ((_this.parent.frozenRows > 0 || _this.parent.isFrozenGrid()) && _this.header.querySelector('.' + literals.movableHeader)) {\n _this.header.querySelector('.' + literals.movableHeader).scrollLeft = _this.previousValues.left;\n }\n else {\n _this.header.scrollLeft = _this.previousValues.left;\n }\n _this.content.scrollLeft = _this.previousValues.left;\n _this.content.scrollTop = _this.previousValues.top;\n }\n }\n if (!_this.parent.enableColumnVirtualization) {\n _this.content.scrollLeft = sLeft;\n }\n if (_this.parent.isFrozenGrid() && _this.header.querySelector('.' + literals.movableHeader)) {\n _this.header.querySelector('.' + literals.movableHeader).scrollLeft =\n _this.content.querySelector('.' + literals.movableContent).scrollLeft;\n }\n });\n this.parent.isPreventScrollEvent = false;\n };\n /**\n * @returns {void} returns void\n * @hidden\n */\n Scroll.prototype.setLastRowCell = function () {\n var table = this.parent.getContentTable();\n if (table.querySelector('tr:nth-last-child(2)')) {\n removeClass(table.querySelector('tr:nth-last-child(2)').querySelectorAll('td'), 'e-lastrowcell');\n }\n addClass(table.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n if (this.parent.isFrozenGrid()) {\n var mTable = this.parent.getContent().querySelector('.' + literals.movableContent);\n if (mTable.querySelector('tr:nth-last-child(2)')) {\n removeClass(mTable.querySelector('tr:nth-last-child(2)').querySelectorAll('td'), 'e-lastrowcell');\n }\n addClass(mTable.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n if (this.parent.getFrozenRightColumnsCount()) {\n var frTable = this.parent.getContent().querySelector('.e-frozen-right-content');\n if (frTable.querySelector('tr:nth-last-child(2)')) {\n removeClass(frTable.querySelector('tr:nth-last-child(2)').querySelectorAll('td'), 'e-lastrowcell');\n }\n addClass(frTable.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n }\n }\n };\n /**\n * @param {boolean} rtl - specifies the rtl\n * @returns {ScrollCss} returns the ScrollCss\n * @hidden\n */\n Scroll.prototype.getCssProperties = function (rtl) {\n var css = {};\n var enableRtl = isNullOrUndefined(rtl) ? this.parent.enableRtl : rtl;\n css.border = enableRtl ? 'borderLeftWidth' : 'borderRightWidth';\n css.padding = enableRtl ? 'paddingLeft' : 'paddingRight';\n return css;\n };\n Scroll.prototype.ensureOverflow = function (content) {\n content.style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n };\n Scroll.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n this.setPadding();\n this.oneTimeReady = true;\n if (this.parent.height === 'auto') {\n this.removePadding();\n }\n this.wireEvents();\n this.setHeight();\n var width = 'width';\n this.setWidth(!isNullOrUndefined(e.properties[\"\" + width]));\n };\n Scroll.prototype.makeStickyHeader = function () {\n if (this.parent.enableStickyHeader && this.parent.element && this.parent.getContent()) {\n var contentRect = this.parent.getContent().getClientRects()[0];\n if (contentRect) {\n var headerEle = this.parent.getHeaderContent();\n var toolbarEle = this.parent.element.querySelector('.e-toolbar');\n var groupHeaderEle = this.parent.element.querySelector('.e-groupdroparea');\n var height = headerEle.offsetHeight + (toolbarEle ? toolbarEle.offsetHeight : 0) +\n (groupHeaderEle ? groupHeaderEle.offsetHeight : 0);\n var parentTop = this.parentElement.getClientRects()[0].top;\n var top_1 = contentRect.top - (parentTop < 0 ? 0 : parentTop);\n var left = contentRect.left;\n var colMenuEle = document.body.querySelector('#' + this.parent.element.id + '_columnmenu');\n if (top_1 < height && contentRect.bottom > 0) {\n headerEle.classList.add('e-sticky');\n var elemTop = 0;\n if (groupHeaderEle && this.parent.groupSettings.showDropArea) {\n this.setSticky(groupHeaderEle, elemTop, contentRect.width, left, true);\n elemTop += groupHeaderEle.getClientRects()[0].height;\n }\n if (toolbarEle) {\n this.setSticky(toolbarEle, elemTop, contentRect.width, left, true);\n elemTop += toolbarEle.getClientRects()[0].height;\n }\n this.setSticky(headerEle, elemTop, contentRect.width, left, true);\n if (!isNullOrUndefined(colMenuEle)) {\n colMenuEle.style.position = 'fixed';\n colMenuEle.style.top = height + 'px';\n }\n }\n else {\n if (headerEle.classList.contains('e-sticky')) {\n this.setSticky(headerEle, null, null, null, false);\n if (toolbarEle) {\n this.setSticky(toolbarEle, null, null, null, false);\n }\n if (groupHeaderEle) {\n this.setSticky(groupHeaderEle, null, null, null, false);\n }\n var ccDlg = this.parent.element.querySelector('.e-ccdlg');\n if (ccDlg) {\n ccDlg.classList.remove('e-sticky');\n }\n if (!isNullOrUndefined(colMenuEle)) {\n colMenuEle.style.position = 'absolute';\n var topStyle = contentRect.top - parentTop;\n colMenuEle.style.top = topStyle + 'px';\n }\n }\n }\n this.parent.notify(events.stickyScrollComplete, {});\n }\n }\n };\n Scroll.prototype.setSticky = function (ele, top, width, left, isAdd) {\n if (isAdd) {\n ele.style.width = width + 'px';\n ele.classList.add('e-sticky');\n }\n else {\n ele.classList.remove('e-sticky');\n }\n ele.style.top = top != null ? top + 'px' : '';\n ele.style.left = left !== null ? parseInt(ele.style.left, 10) !== left ? left + 'px' : ele.style.left : '';\n };\n /**\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n return;\n }\n this.removeEventListener();\n //Remove Dom event\n var cont = this.parent.getContent().querySelector('.' + literals.content);\n EventHandler.remove(cont, 'scroll', this.onContentScroll);\n if (this.parent.enableStickyHeader) {\n this.addStickyListener(false);\n }\n //Remove padding\n this.removePadding();\n removeClass([this.parent.getHeaderContent().querySelector('.' + literals.headerContent)], literals.headerContent);\n removeClass([cont], literals.content);\n //Remove height\n cont.style.height = '';\n //Remove width\n this.parent.element.style.width = '';\n };\n /**\n * Function to get the scrollbar width of the browser.\n *\n * @returns {number} return the width\n * @hidden\n */\n Scroll.getScrollBarWidth = function () {\n return getScrollBarWidth();\n };\n return Scroll;\n}());\nexport { Scroll };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { compile } from '@syncfusion/ej2-base';\nimport { getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { Property, Collection, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the Grid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.templateFn = {};\n return _this;\n }\n /**\n * @param {Function} value - specifies the value\n * @returns {void}\n * @hidden\n */\n AggregateColumn.prototype.setFormatter = function (value) {\n this.formatFn = value;\n };\n /**\n * @returns {Function} returns the Function\n * @hidden\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - specifies the helper\n * @returns {void}\n * @hidden\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n if (this.groupFooterTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.GroupSummary)] = { fn: compile(this.groupFooterTemplate, helper),\n property: 'groupFooterTemplate' };\n }\n if (this.groupCaptionTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = { fn: compile(this.groupCaptionTemplate, helper),\n property: 'groupCaptionTemplate' };\n }\n };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - returns the Object\n * @returns {void}\n * @hidden\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupFooterTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupCaptionTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\n/**\n * Configures the aggregate rows.\n */\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","import { Browser, remove, EventHandler, isUndefined, closest, classList } from '@syncfusion/ej2-base';\nimport { parentsUntil, isGroupAdaptive } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n */\nvar Clipboard = /** @class */ (function () {\n /**\n * Constructor for the Grid clipboard module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n * @hidden\n */\n function Clipboard(parent, serviceLocator) {\n this.copyContent = '';\n this.isSelect = false;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * @returns {void}\n * @hidden\n */\n Clipboard.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.keyPressed, this.keyDownHandler, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.onEmpty, this.initialEnd, this);\n EventHandler.add(this.parent.element, 'keydown', this.pasteHandler, this);\n };\n /**\n * @returns {void}\n * @hidden\n */\n Clipboard.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.keyPressed, this.keyDownHandler);\n this.parent.off(events.contentReady, this.initialEnd);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.onEmpty, this.initialEnd);\n EventHandler.remove(this.parent.element, 'keydown', this.pasteHandler);\n };\n Clipboard.prototype.clickHandler = function (e) {\n var target = e.target;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n target = parentsUntil(target, 'e-rowcell');\n };\n Clipboard.prototype.pasteHandler = function (e) {\n var _this = this;\n var grid = this.parent;\n var isMacLike = /(Mac)/i.test(navigator.platform);\n if (e.keyCode === 67 && isMacLike && e.metaKey && !grid.isEdit) {\n this.copy();\n }\n if (e.keyCode === 86 && (e.ctrlKey || (isMacLike && e.metaKey)) && !grid.isEdit) {\n var target = closest(document.activeElement, '.' + literals.rowCell);\n if (!target || !grid.editSettings.allowEditing || grid.editSettings.mode !== 'Batch' ||\n grid.selectionSettings.mode !== 'Cell' || grid.selectionSettings.cellSelectionMode === 'Flow' || !this.clipBoardTextArea) {\n return;\n }\n this.activeElement = document.activeElement;\n this.clipBoardTextArea.value = '';\n var x_1 = window.scrollX;\n var y_1 = window.scrollY;\n this.clipBoardTextArea.focus();\n setTimeout(function () {\n _this.activeElement.focus();\n window.scrollTo(x_1, y_1);\n _this.paste(_this.clipBoardTextArea.value, _this.parent.getSelectedRowCellIndexes()[0].rowIndex, _this.parent.getSelectedRowCellIndexes()[0].cellIndexes[0]);\n }, 10);\n }\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\n * @returns {void}\n */\n Clipboard.prototype.paste = function (data, rowIndex, colIndex) {\n var grid = this.parent;\n var cIdx = colIndex;\n var rIdx = rowIndex;\n var col;\n var value;\n var isAvail;\n if (!grid.editSettings.allowEditing || grid.editSettings.mode !== 'Batch' ||\n grid.selectionSettings.mode !== 'Cell' || grid.selectionSettings.cellSelectionMode === 'Flow') {\n return;\n }\n var rows = data.split('\\n');\n var cols;\n var dataRows = grid.getDataRows();\n var mRows;\n var frRows;\n var isFrozen = this.parent.isFrozenGrid();\n if (isFrozen) {\n mRows = grid.getMovableDataRows();\n if (grid.getFrozenRightColumnsCount()) {\n frRows = grid.getFrozenRightDataRows();\n }\n }\n for (var r = 0; r < rows.length; r++) {\n cols = rows[parseInt(r.toString(), 10)].split('\\t');\n cIdx = colIndex;\n if ((r === rows.length - 1 && rows[parseInt(r.toString(), 10)] === '') || isUndefined(grid.getRowByIndex(rIdx))) {\n cIdx++;\n break;\n }\n for (var c = 0; c < cols.length; c++) {\n isAvail = grid.getCellFromIndex(rIdx, cIdx);\n if (isFrozen) {\n var fTr = dataRows[parseInt(rIdx.toString(), 10)];\n var mTr = mRows[parseInt(rIdx.toString(), 10)];\n isAvail = !fTr.querySelector('[data-colindex=\"' + cIdx + '\"]') ?\n mTr.querySelector('[data-colindex=\"' + cIdx + '\"]') : true;\n if (frRows && !isAvail) {\n var frTr = frRows[parseInt(rIdx.toString(), 10)];\n isAvail = frTr.querySelector('[data-colindex=\"' + cIdx + '\"]');\n }\n }\n if (!isAvail) {\n cIdx++;\n break;\n }\n col = grid.getColumnByIndex(cIdx);\n value = col.getParser() ? col.getParser()(cols[parseInt(c.toString(), 10)]) : cols[parseInt(c.toString(), 10)];\n if (col.allowEditing && !col.isPrimaryKey && !col.template) {\n var args = {\n column: col,\n data: value,\n rowIndex: rIdx\n };\n this.parent.trigger(events.beforePaste, args);\n rIdx = args.rowIndex;\n if (!args.cancel) {\n if (grid.editModule) {\n if (col.type === 'number') {\n this.parent.editModule.updateCell(rIdx, col.field, parseFloat(args.data));\n }\n else {\n grid.editModule.updateCell(rIdx, col.field, args.data);\n }\n }\n }\n }\n cIdx++;\n }\n rIdx++;\n }\n grid.selectionModule.selectCellsByRange({ rowIndex: rowIndex, cellIndex: colIndex }, { rowIndex: rIdx - 1, cellIndex: cIdx - 1 });\n var cell = this.parent.getCellFromIndex(rIdx - 1, cIdx - 1);\n if (cell) {\n classList(cell, ['e-focus', 'e-focused'], []);\n }\n };\n Clipboard.prototype.initialEnd = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.parent.off(events.contentReady, this.initialEnd);\n this.clipBoardTextArea = this.parent.createElement('textarea', {\n className: 'e-clipboard',\n styles: 'opacity: 0',\n attrs: { tabindex: '-1', 'aria-label': this.l10n.getConstant('ClipBoard') }\n });\n this.parent.element.appendChild(this.clipBoardTextArea);\n };\n Clipboard.prototype.keyDownHandler = function (e) {\n if (e.action === 'ctrlPlusC') {\n this.copy();\n }\n else if (e.action === 'ctrlShiftPlusH') {\n this.copy(true);\n }\n };\n Clipboard.prototype.setCopyData = function (withHeader) {\n if (window.getSelection().toString() === '') {\n var isFrozen = this.parent.isFrozenGrid();\n this.clipBoardTextArea.value = this.copyContent = '';\n var mRows = void 0;\n var frRows = void 0;\n var rows = this.parent.getDataRows();\n if (isFrozen) {\n mRows = this.parent.getMovableDataRows();\n if (this.parent.getFrozenMode() === literals.leftRight || this.parent.getFrozenMode() === 'Right') {\n frRows = this.parent.getFrozenRightRows();\n }\n }\n if (this.parent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.parent.getSelectedRowIndexes().sort(function (a, b) { return a - b; });\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.parent.getVisibleColumns().length; i++) {\n headerTextArray[parseInt(i.toString(), 10)] = this.parent\n .getVisibleColumns()[parseInt(i.toString(), 10)].headerText;\n }\n this.getCopyData(headerTextArray, false, '\\t', withHeader);\n this.copyContent += '\\n';\n }\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.copyContent += '\\n';\n }\n var leftCols = [];\n var rightCols = [];\n var movableCols = [];\n if (isFrozen) {\n movableCols.push.apply(movableCols, [].slice.call(mRows[selectedIndexes[parseInt(i.toString(), 10)]].\n querySelectorAll('.e-rowcell:not(.e-hide)')));\n if (this.parent.getFrozenMode() === 'Right' || this.parent.getFrozenMode() === literals.leftRight) {\n rightCols.push.apply(rightCols, [].slice.call(frRows[selectedIndexes[parseInt(i.toString(), 10)]].\n querySelectorAll('.e-rowcell:not(.e-hide)')));\n }\n if (this.parent.getFrozenMode() === 'Left' || this.parent.getFrozenMode() === literals.leftRight ||\n (this.parent.isFrozenGrid() && !this.parent.getFrozenMode())) {\n leftCols.push.apply(leftCols, [].slice.call(rows[selectedIndexes[parseInt(i.toString(), 10)]].\n querySelectorAll('.e-rowcell:not(.e-hide)')));\n }\n }\n else {\n var idx = selectedIndexes[parseInt(i.toString(), 10)];\n if (!isGroupAdaptive(this.parent) && (this.parent.enableVirtualization ||\n (this.parent.enableInfiniteScrolling && this.parent.infiniteScrollSettings.enableCache) ||\n (this.parent.groupSettings.columns.length && this.parent.groupSettings.enableLazyLoading))) {\n idx = rows.map(function (m) { return m.getAttribute('data-rowindex'); }).indexOf(selectedIndexes[parseInt(i.toString(), 10)].toString());\n }\n leftCols.push.apply(leftCols, [].slice.call(rows[parseInt(idx.toString(), 10)].querySelectorAll('.e-rowcell:not(.e-hide)')));\n }\n var cells = leftCols.concat(movableCols).concat(rightCols);\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n }\n else {\n var obj = this.checkBoxSelection();\n if (obj.status) {\n if (withHeader) {\n var headers = [];\n for (var i = 0; i < obj.colIndexes.length; i++) {\n headers.push(this.parent.getColumnHeaderByIndex(obj.colIndexes[parseInt(i.toString(), 10)]));\n }\n this.getCopyData(headers, false, '\\t', withHeader);\n this.copyContent += '\\n';\n }\n for (var i = 0; i < obj.rowIndexes.length; i++) {\n if (i > 0) {\n this.copyContent += '\\n';\n }\n var cells = [].slice.call(rows[obj.rowIndexes[parseInt(i.toString(), 10)]].\n getElementsByClassName('e-cellselectionbackground'));\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[obj.rowIndexes[parseInt(i.toString(), 10)]]\n .getElementsByClassName('e-cellselectionbackground')));\n if (frRows) {\n cells.push.apply(cells, [].slice.call(frRows[obj.rowIndexes[parseInt(i.toString(), 10)]]\n .getElementsByClassName('e-cellselectionbackground')));\n }\n }\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n }\n else {\n this.getCopyData([].slice.call(this.parent.element.getElementsByClassName('e-cellselectionbackground')), true, '\\n', withHeader);\n }\n }\n var args = {\n data: this.copyContent,\n cancel: false\n };\n this.parent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this.copyContent = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this.isSelect = true;\n }\n };\n Clipboard.prototype.getCopyData = function (cells, isCell, splitKey, withHeader) {\n var isElement = typeof cells[0] !== 'string';\n for (var j = 0; j < cells.length; j++) {\n if (withHeader && isCell) {\n var colIdx = parseInt(cells[parseInt(j.toString(), 10)].getAttribute(literals.dataColIndex), 10);\n this.copyContent += this.parent.getColumns()[parseInt(colIdx.toString(), 10)].headerText + '\\n';\n }\n if (isElement) {\n if (!cells[parseInt(j.toString(), 10)].classList.contains('e-hide')) {\n this.copyContent += cells[parseInt(j.toString(), 10)].innerText;\n }\n }\n else {\n this.copyContent += cells[parseInt(j.toString(), 10)];\n }\n if (j < cells.length - 1) {\n this.copyContent += splitKey;\n }\n }\n };\n /**\n * Copy selected rows or cells data into clipboard.\n *\n * @returns {void}\n * @param {boolean} withHeader - Specifies whether the column header data need to be copied or not.\n */\n Clipboard.prototype.copy = function (withHeader) {\n if (document.queryCommandSupported('copy') && this.clipBoardTextArea) {\n this.setCopyData(withHeader);\n document.execCommand('copy');\n this.clipBoardTextArea.blur();\n }\n if (this.isSelect) {\n window.getSelection().removeAllRanges();\n this.isSelect = false;\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Clipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n Clipboard.prototype.destroy = function () {\n this.removeEventListener();\n if (this.clipBoardTextArea) {\n remove(this.clipBoardTextArea);\n }\n };\n Clipboard.prototype.checkBoxSelection = function () {\n var gridObj = this.parent;\n var obj = { status: false };\n if (gridObj.selectionSettings.mode === 'Cell') {\n var rowCellIndxes = gridObj.getSelectedRowCellIndexes();\n var str = void 0;\n var rowIndexes = [];\n var i = void 0;\n for (i = 0; i < rowCellIndxes.length; i++) {\n if (rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.length) {\n rowIndexes.push(rowCellIndxes[parseInt(i.toString(), 10)].rowIndex);\n }\n if (rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.length) {\n if (!str) {\n str = JSON.stringify(rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.sort());\n }\n if (str !== JSON.stringify(rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.sort())) {\n break;\n }\n }\n }\n rowIndexes.sort(function (a, b) { return a - b; });\n if (i === rowCellIndxes.length) {\n obj = { status: true, rowIndexes: rowIndexes, colIndexes: rowCellIndxes[0].cellIndexes };\n }\n }\n return obj;\n };\n return Clipboard;\n}());\nexport { Clipboard };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { Component, ChildProperty, Browser, closest, extend } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, append, remove, classList, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, Collection, Complex, Event, NotifyPropertyChanges, L10n } from '@syncfusion/ej2-base';\nimport { EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { DataManager, DataUtil, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner, Tooltip } from '@syncfusion/ej2-popups';\nimport { iterateArrayOrObject, prepareColumns, parentsUntil, wrap, templateCompiler, isGroupAdaptive, refreshForeignData } from './util';\nimport { getRowHeight, setColumnIndex, Global, ispercentageWidth, renderMovable, getNumberFormat, getTransformValues } from './util';\nimport { setRowElements, resetRowIndex, compareChanges, getCellByColAndRowIndex, performComplexDataOperation } from './util';\nimport * as events from '../base/constant';\nimport { Render } from '../renderer/render';\nimport { RenderType } from './enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { CellRendererFactory } from '../services/cell-render-factory';\nimport { ServiceLocator } from '../services/service-locator';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { ColumnWidthService } from '../services/width-controller';\nimport { AriaService } from '../services/aria-service';\nimport { FocusStrategy } from '../services/focus-strategy';\nimport { PageSettings } from '../models/page-settings';\nimport { ColumnChooserSettings } from '../models/column-chooser-settings';\nimport { Selection } from '../actions/selection';\nimport { Search } from '../actions/search';\nimport { ShowHide } from '../actions/show-hide';\nimport { Scroll } from '../actions/scroll';\nimport { Print } from '../actions/print';\nimport { AggregateRow } from '../models/aggregate';\nimport { Clipboard } from '../actions/clipboard';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport * as literals from '../base/string-literals';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n __decorate([\n Property(false)\n ], SortDescriptor.prototype, \"isFromGroup\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of Grid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n/**\n * Represents the predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property(false)\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"condition\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the infinite scroll behavior of Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n/**\n * Configures the filtering behavior of the Grid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property('OnEnter')\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"enableCaseSensitivity\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"showFilterBarOperator\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n/**\n * Configures the selection behavior of the Grid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enableSimpleMultiRowSelection\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"allowColumnSelection\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * Configures the search behavior of the Grid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('')\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreAccent\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n/**\n * Configures the row drop settings of the Grid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n/**\n * Configures the text wrap settings of the Grid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n/**\n * Configures the resize behavior of the Grid.\n */\nvar ResizeSettings = /** @class */ (function (_super) {\n __extends(ResizeSettings, _super);\n function ResizeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Normal')\n ], ResizeSettings.prototype, \"mode\", void 0);\n return ResizeSettings;\n}(ChildProperty));\nexport { ResizeSettings };\n/**\n * Configures the group behavior of the Grid.\n */\nvar GroupSettings = /** @class */ (function (_super) {\n __extends(GroupSettings, _super);\n function GroupSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showDropArea\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showToggleButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showGroupedColumn\", void 0);\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showUngroupButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"disablePageWiseAggregates\", void 0);\n __decorate([\n Property([])\n ], GroupSettings.prototype, \"columns\", void 0);\n __decorate([\n Property()\n ], GroupSettings.prototype, \"captionTemplate\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"enableLazyLoading\", void 0);\n return GroupSettings;\n}(ChildProperty));\nexport { GroupSettings };\n/**\n * Configures the edit behavior of the Grid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Normal')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n/**\n * Configures the Loading Indicator of the Grid.\n */\nvar LoadingIndicator = /** @class */ (function (_super) {\n __extends(LoadingIndicator, _super);\n function LoadingIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Spinner')\n ], LoadingIndicator.prototype, \"indicatorType\", void 0);\n return LoadingIndicator;\n}(ChildProperty));\nexport { LoadingIndicator };\n/**\n * Represents the Grid component.\n * ```html\n *
\n * \n * ```\n */\nvar Grid = /** @class */ (function (_super) {\n __extends(Grid, _super);\n /**\n * Constructor for creating the component\n *\n * @param {GridModel} options - specifies the options\n * @param {string | HTMLElement} element - specifies the element\n * @hidden\n */\n function Grid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isPreventScrollEvent = false;\n _this.inViewIndexes = [];\n _this.keyA = false;\n _this.frozenRightCount = 0;\n _this.frozenLeftCount = 0;\n _this.tablesCount = 1;\n _this.movableCount = 0;\n _this.visibleFrozenLeft = 0;\n _this.visibleFrozenRight = 0;\n _this.visibleMovable = 0;\n _this.frozenLeftColumns = [];\n _this.frozenRightColumns = [];\n _this.movableColumns = [];\n _this.media = {};\n _this.isFreezeRefresh = false;\n /** @hidden */\n _this.tableIndex = 0;\n _this.componentRefresh = Component.prototype.refresh;\n /** @hidden */\n _this.isVirtualAdaptive = false;\n /** @hidden */\n /**\n * * If `requireTemplateRef` is set to false in the load event, then the template element can't be accessed in grid queryCellInfo, and rowDataBound events.\n * * By default, React's grid queryCellInfo and rowDataBound events allow access to the template element.\n * * Avoid accessing the template elements in the grid queryCellInfo and rowDataBound events to improve rendering performance by setting this value as false.\n *\n * @default true\n */\n _this.requireTemplateRef = true;\n /** @hidden */\n _this.vRows = [];\n /** @hidden */\n _this.vcRows = [];\n /** @hidden */\n _this.vGroupOffsets = {};\n /** @hidden */\n _this.rowUid = 0;\n /** @hidden */\n _this.isManualRefresh = false;\n /** @hidden */\n _this.isAutoFitColumns = false;\n /** @hidden */\n _this.enableDeepCompare = false;\n /** @hidden */\n _this.totalDataRecordsCount = 0;\n /** @hidden */\n _this.disableSelectedRecords = [];\n /** @hidden */\n _this.partialSelectedRecords = [];\n /** @hidden */\n _this.islazyloadRequest = false;\n /** @hidden */\n _this.lockcolPositionCount = 0;\n /** @hidden */\n _this.prevPageMoving = false;\n /** @hidden */\n _this.pageTemplateChange = false;\n /** @hidden */\n _this.isAutoGen = false;\n _this.mediaBindInstance = {};\n /** @hidden */\n _this.commandDelIndex = undefined;\n /** @hidden */\n _this.asyncTimeOut = 50;\n /** @hidden */\n _this.isExportGrid = false;\n // enable/disable logger for MVC & Core\n _this.enableLogger = true;\n _this.needsID = true;\n Grid_1.Inject(Selection);\n setValue('mergePersistData', _this.mergePersistGridData, _this);\n return _this;\n }\n Grid_1 = Grid;\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} returns the persist data\n */\n Grid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'groupSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'scrollPosition'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent'],\n groupSettings: ['showDropArea', 'showToggleButton', 'showGroupedColumn', 'showUngroupButton',\n 'disablePageWiseAggregates', 'hideCaptionCount'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: [], scrollPosition: []\n };\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[parseInt(i.toString(), 10)]];\n for (var _i = 0, _a = ignoreOnPersist[keyEntity[parseInt(i.toString(), 10)]]; _i < _a.length; _i++) {\n var val = _a[_i];\n delete currentObject[\"\" + val];\n }\n }\n var temp = this.pageSettings.template;\n var settings = Object.assign({ template: undefined }, this.pageSettings);\n this.setProperties({ pageSettings: settings }, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular) {\n delete this.groupSettings['properties']['captionTemplate'];\n }\n this.pageTemplateChange = !isNullOrUndefined(this.pagerTemplate);\n var persistData = this.addOnPersist(keyEntity);\n settings.template = temp;\n this.setProperties({ pageSettings: settings }, true);\n return persistData;\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} Returns the module Declaration\n * @hidden\n */\n Grid.prototype.requiredModules = function () {\n this.setFrozenCount();\n this.enableInfiniteAggrgate();\n var modules = [];\n if (this.isDestroyed) {\n return modules;\n }\n if (this.allowFiltering) {\n modules.push({\n member: 'filter',\n args: [this, this.filterSettings, this.serviceLocator]\n });\n }\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport',\n args: [this, this.serviceLocator]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this, this.sortSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this, this.selectionSettings, this.serviceLocator]\n });\n }\n modules.push({\n member: 'resize',\n args: [this]\n });\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.allowGrouping) {\n modules.push({\n member: 'group',\n args: [this, this.groupSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.aggregates.length) {\n modules.push({ member: 'aggregate', args: [this, this.serviceLocator] });\n }\n if (this.isDetail()) {\n modules.push({\n member: 'detailRow',\n args: [this, this.serviceLocator]\n });\n }\n if (this.toolbar || this.toolbarTemplate) {\n modules.push({\n member: 'toolbar',\n args: [this, this.serviceLocator]\n });\n }\n if (this.enableVirtualization || this.enableColumnVirtualization) {\n modules.push({\n member: 'virtualscroll',\n args: [this, this.serviceLocator]\n });\n }\n if (this.getFrozenColumns() || this.frozenRows || this.frozenRightCount || this.frozenLeftCount) {\n modules.push({ member: 'freeze', args: [this, this.serviceLocator] });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this, this.serviceLocator]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this, this.serviceLocator]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n Grid.prototype.extendRequiredModules = function (modules) {\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this, this.serviceLocator]\n });\n }\n if (this.groupSettings.enableLazyLoading) {\n modules.push({\n member: 'lazyLoadGroup',\n args: [this, this.serviceLocator]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'columnChooser',\n args: [this, this.serviceLocator]\n });\n }\n if (this.isForeignKeyEnabled(this.columns)) {\n modules.push({ member: 'foreignKey', args: [this, this.serviceLocator] });\n }\n if (this.enableLogger) {\n modules.push({ member: 'logger', args: [this] });\n }\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @returns {void}\n * @private\n */\n Grid.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator;\n this.initProperties();\n this.initializeServices();\n };\n Grid.prototype.initProperties = function () {\n this.isInitial = true;\n this.sortedColumns = [];\n this.inViewIndexes = [];\n this.mediaCol = [];\n this.isInitialLoad = false;\n this.allowServerDataBinding = false;\n this.ignoreCollectionWatch = true;\n this.mergeCells = {};\n this.isEdit = false;\n this.checkAllRows = 'None';\n this.isCheckBoxSelection = false;\n this.isPersistSelection = false;\n this.componentRefresh = Component.prototype.refresh;\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith', wildCard: 'wildcard',\n isNull: 'isnull', notNull: 'notnull', like: 'like'\n };\n this.defaultLocale = {\n EmptyRecord: 'No records to display',\n True: 'true',\n False: 'false',\n InvalidFilterMessage: 'Invalid Filter Data',\n GroupDropArea: 'Drag a column header here to group its column',\n UnGroup: 'Click here to ungroup',\n UnGroupButton: 'Click here to ungroup',\n GroupDisable: 'Grouping is disabled for this column',\n FilterbarTitle: '\\'s filter bar cell',\n EmptyDataSourceError: 'DataSource must not be empty at initial load since columns are generated from dataSource in AutoGenerate Column Grid',\n // Toolbar Items\n Add: 'Add',\n Edit: 'Edit',\n Cancel: 'Cancel',\n Update: 'Update',\n Delete: 'Delete',\n Print: 'Print',\n Pdfexport: 'PDF Export',\n Excelexport: 'Excel Export',\n Wordexport: 'Word Export',\n Csvexport: 'CSV Export',\n Search: 'Search',\n Columnchooser: 'Columns',\n Save: 'Save',\n Item: 'item',\n Items: 'items',\n EditOperationAlert: 'No records selected for edit operation',\n DeleteOperationAlert: 'No records selected for delete operation',\n SaveButton: 'Save',\n OKButton: 'OK',\n CancelButton: 'Cancel',\n EditFormTitle: 'Details of ',\n AddFormTitle: 'Add New Record',\n BatchSaveConfirm: 'Are you sure you want to save changes?',\n BatchSaveLostChanges: 'Unsaved changes will be lost. Are you sure you want to continue?',\n ConfirmDelete: 'Are you sure you want to Delete Record?',\n CancelEdit: 'Are you sure you want to Cancel the changes?',\n ChooseColumns: 'Choose Column',\n SearchColumns: 'search columns',\n Matchs: 'No matches found',\n FilterButton: 'Filter',\n ClearButton: 'Clear',\n StartsWith: 'Starts With',\n NotStartsWith: 'Does Not Start With',\n Like: 'Like',\n EndsWith: 'Ends With',\n NotEndsWith: 'Does Not End With',\n Contains: 'Contains',\n NotContains: 'Does Not Contain',\n IsNull: 'Null',\n NotNull: 'Not Null',\n IsEmpty: 'Empty',\n IsNotEmpty: 'Not Empty',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n ChooseDate: 'Choose a Date',\n EnterValue: 'Enter the value',\n Copy: 'Copy',\n Group: 'Group by this column',\n Ungroup: 'Ungroup by this column',\n GroupButton: 'Group button',\n UnGroupAria: 'ungroup button',\n GroupSeperator: 'Separator for the grouped columns',\n UnGroupIcon: 'ungroup the grouped column ',\n GroupedSortIcon: 'sort the grouped column ',\n GroupedDrag: 'Drag the grouped column',\n GroupCaption: ' is groupcaption cell',\n CheckBoxLabel: 'checkbox',\n autoFitAll: 'Autofit all columns',\n autoFit: 'Autofit this column',\n AutoFitAll: 'Autofit all columns',\n AutoFit: 'Autofit this column',\n Export: 'Export',\n FirstPage: 'First Page',\n LastPage: 'Last Page',\n PreviousPage: 'Previous Page',\n NextPage: 'Next Page',\n SortAscending: 'Sort Ascending',\n SortDescending: 'Sort Descending',\n EditRecord: 'Edit Record',\n DeleteRecord: 'Delete Record',\n FilterMenu: 'Filter',\n SelectAll: 'Select All',\n AddCurrentSelection: 'Add current selection to filter',\n Blanks: 'Blanks',\n FilterTrue: 'True',\n FilterFalse: 'False',\n NoResult: 'No matches found',\n ClearFilter: 'Clear Filter',\n Clear: 'Clear',\n NumberFilter: 'Number Filters',\n TextFilter: 'Text Filters',\n DateFilter: 'Date Filters',\n DateTimeFilter: 'DateTime Filters',\n MatchCase: 'Match Case',\n Between: 'Between',\n CustomFilter: 'Custom Filter',\n CustomFilterPlaceHolder: 'Enter the value',\n CustomFilterDatePlaceHolder: 'Choose a date',\n AND: 'AND',\n OR: 'OR',\n ShowRowsWhere: 'Show rows where:',\n FilterMenuDialogARIA: 'Filter menu dialog',\n ExcelFilterDialogARIA: 'Excel filter dialog',\n DialogEditARIA: 'Edit dialog',\n ColumnChooserDialogARIA: 'Column chooser',\n ColumnMenuDialogARIA: 'Column menu dialog',\n CustomFilterDialogARIA: 'Customer filter dialog',\n SortAtoZ: 'Sort A to Z',\n SortZtoA: 'Sort Z to A',\n SortByOldest: 'Sort by Oldest',\n SortByNewest: 'Sort by Newest',\n SortSmallestToLargest: 'Sort Smallest to Largest',\n SortLargestToSmallest: 'Sort Largest to Smallest',\n Sort: 'Sort',\n FilterDescription: 'Press Alt Down to open filter Menu',\n SortDescription: 'Press Enter to sort',\n ColumnMenuDescription: 'Press Alt Down to open Column Menu',\n GroupDescription: 'Press Ctrl space to group',\n ColumnHeader: ' column header ',\n TemplateCell: ' is template cell',\n CommandColumnAria: 'is Command column column header ',\n DialogEdit: 'Dialog edit',\n ClipBoard: 'clipboard',\n AscendingText: 'Ascending',\n DescendingText: 'Descending',\n NoneText: 'None',\n Expanded: 'Expanded',\n Collapsed: 'Collapsed'\n };\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftRight: 'shift+rightarrow',\n shiftLeft: 'shift+leftarrow',\n home: 'home',\n end: 'end',\n escape: 'escape',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n ctrlAltPageUp: 'ctrl+alt+pageup',\n ctrlAltPageDown: 'ctrl+alt+pagedown',\n altPageUp: 'alt+pageup',\n altPageDown: 'alt+pagedown',\n altDownArrow: 'alt+downarrow',\n altUpArrow: 'alt+uparrow',\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlPlusA: 'ctrl+A',\n ctrlPlusP: 'ctrl+P',\n insert: 'insert',\n delete: 'delete',\n f2: 'f2',\n enter: 'enter',\n ctrlEnter: 'ctrl+enter',\n shiftEnter: 'shift+enter',\n tab: 'tab',\n shiftTab: 'shift+tab',\n space: 'space',\n ctrlPlusC: 'ctrl+C',\n ctrlShiftPlusH: 'ctrl+shift+H',\n ctrlSpace: 'ctrl+space',\n ctrlLeftArrow: 'ctrl+leftarrow',\n ctrlRightArrow: 'ctrl+rightarrow'\n };\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @returns {void}\n * @private\n */\n Grid.prototype.render = function () {\n this.log(['module_missing', 'promise_enabled', 'locale_missing', 'check_datasource_columns']);\n this.ariaService.setOptions(this.element, { datarole: 'grid' });\n createSpinner({ target: this.element, cssClass: this.cssClass ? this.cssClass : null }, this.createElement);\n this.renderModule = new Render(this, this.serviceLocator);\n this.searchModule = new Search(this);\n this.scrollModule = new Scroll(this);\n this.notify(events.initialLoad, {});\n if (this.getDataModule().dataManager.dataSource.offline === true || this.getDataModule().dataManager.dataSource.url === undefined) {\n this.isVirtualAdaptive = true;\n }\n if (this.isReact) {\n var args = { requireTemplateRef: this.requireTemplateRef };\n this.trigger(events.load, args);\n if (!args.requireTemplateRef) {\n this.requireTemplateRef = args.requireTemplateRef;\n }\n }\n else {\n this.trigger(events.load);\n }\n prepareColumns(this.columns, this.enableColumnVirtualization, this);\n if (this.enablePersistence) {\n this.notify(events.columnsPrepared, {});\n }\n this.getMediaColumns();\n setColumnIndex(this.columns);\n this.checkLockColumns(this.columns);\n this.getColumns();\n this.processModel();\n this.gridRender();\n this.wireEvents();\n this.addListener();\n this.updateDefaultCursor();\n this.updateStackedFilter();\n if (this.loadingIndicator.indicatorType === 'Spinner') {\n this.showSpinner();\n }\n this.notify(events.initialEnd, {});\n if (this.loadingIndicator.indicatorType === 'Shimmer') {\n this.refreshMaskRow();\n }\n if (this.refreshing) {\n this.trigger('created');\n }\n };\n /**\n * By default, grid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n Grid.prototype.showSpinner = function () {\n if (!this.isExportGrid) {\n showSpinner(this.element);\n }\n };\n /**\n * By default, grid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n Grid.prototype.hideSpinner = function () {\n if (!this.isExportGrid) {\n hideSpinner(this.element);\n }\n };\n Grid.prototype.showMaskRow = function (axisDirection, dialogElement) {\n if (isNullOrUndefined(this.headerModule) || isNullOrUndefined(this.contentModule)) {\n return;\n }\n var gridHeader = this.getHeaderContent().firstChild;\n var gridContent = this.getContent().firstChild;\n var gridFooter = this.getFooterContent();\n if (dialogElement) {\n var dialogHolder = dialogElement.querySelector('.e-checkboxlist');\n var maskRowCount = Math.floor(dialogHolder.getBoundingClientRect().height / this.getRowHeight());\n var maskTemplate = '
'\n + '
'\n + this.getShimmerTemplate() + this.getShimmerTemplate() + '
';\n dialogHolder.innerHTML = '';\n for (var i = 0; i < maskRowCount; i++) {\n dialogHolder.innerHTML += maskTemplate;\n var maskSpan = [].slice.call(dialogHolder\n .querySelectorAll('.e-mask:not(.e-mask-checkbox-filter-intent):not(.e-mask-checkbox-filter-span-intent)'));\n maskSpan[0].classList.add('e-mask-checkbox-filter-intent');\n maskSpan[1].classList.add('e-mask-checkbox-filter-span-intent');\n }\n return;\n }\n if ((!this.enableRtl && !this.getHeaderContent().style.paddingRight)\n || (this.enableRtl && !this.getHeaderContent().style.paddingLeft)) {\n gridContent.style.overflowY = 'hidden';\n }\n if (!this.isInitialLoad && !this.getColumns().length) {\n var contentHeight = gridContent.getBoundingClientRect().height;\n var maskTableHeight = contentHeight === 0 ? this.allowPaging ? this.pageSettings.pageSize * this.getRowHeight()\n : window.innerHeight : contentHeight;\n var contentRowCount = Math.ceil(maskTableHeight / this.getRowHeight());\n if (this.rowRenderingMode !== 'Vertical') {\n this.headerMaskTable = this.createEmptyMaskTable(gridHeader, 1);\n }\n this.contentMaskTable = this.createEmptyMaskTable(gridContent, contentRowCount);\n return;\n }\n this.maskRowContentScroll = this.enableVirtualization && axisDirection ? true : false;\n if (!this.contentMaskTable && !(this.isFrozenGrid() && this.enableColumnVirtualization && axisDirection === 'X')) {\n var content = gridContent;\n if (this.isFrozenGrid()) {\n if (!this.isInitialLoad && !this.enableVirtualization && this.frozenRows && this.height !== 'auto') {\n var contentHeight = content.getBoundingClientRect().height - (this.frozenRows * this.getRowHeight());\n content.style.height = contentHeight + 'px';\n }\n content = content.querySelector('.e-frozen-left-content, .e-frozen-right-content');\n }\n else if (this.enableVirtualization) {\n content = content.querySelector('.e-virtualtable');\n }\n if (!isNullOrUndefined(content.querySelector('tbody'))) {\n this.contentMaskTable = this.createMaskTable(content, this.getContentMaskColumns(), axisDirection);\n }\n }\n if (!this.headerMaskTable && (this.isFrozenGrid() || (this.enableColumnVirtualization && axisDirection === 'X'))\n && !((this.isFrozenGrid() && ((this.enableVirtualization && axisDirection === 'Y')\n || (this.enableColumnVirtualization && axisDirection === 'X')\n || (this.enableInfiniteScrolling && axisDirection === 'down'))))) {\n var content = gridHeader;\n if (this.isFrozenGrid()) {\n content = content.querySelector('.e-frozen-left-header, .e-frozen-right-header');\n }\n else if (this.enableColumnVirtualization && axisDirection === 'X') {\n content = content.querySelector('.e-virtualtable');\n }\n this.headerMaskTable = this.createMaskTable(content, this.getContentMaskColumns(), axisDirection);\n }\n if (!this.movableHeaderMaskTable && this.isFrozenGrid() && !((this.enableVirtualization && axisDirection === 'Y')\n || (this.enableInfiniteScrolling && axisDirection === 'down'))) {\n var content = gridHeader.querySelector('.e-movableheader');\n if (this.enableColumnVirtualization) {\n content = content.querySelector('.e-virtualtable');\n }\n this.movableHeaderMaskTable = this.createMaskTable(content, this.getMovableContentMaskColumns(), axisDirection);\n }\n if (!this.rightHeaderMaskTable && this.isFrozenGrid() && this.getFrozenMode() === 'Left-Right'\n && !((this.enableVirtualization && axisDirection === 'Y') || (this.enableInfiniteScrolling && axisDirection === 'down'))) {\n this.rightHeaderMaskTable = this.createMaskTable(gridHeader\n .querySelector('.e-frozen-right-header'), this.getRightContentMaskColumns(), axisDirection);\n }\n if (!this.movableContentMaskTable && this.isFrozenGrid()) {\n var content = gridContent.querySelector('.e-movablecontent');\n if (this.enableColumnVirtualization) {\n content = content.querySelector('.e-virtualtable');\n }\n if (!isNullOrUndefined(content.querySelector('tbody'))) {\n this.movableContentMaskTable = this.createMaskTable(content, this.getMovableContentMaskColumns(), axisDirection);\n }\n }\n if (!this.rightContentMaskTable && this.isFrozenGrid() && this.getFrozenMode() === 'Left-Right') {\n this.rightContentMaskTable = this.createMaskTable(gridContent\n .querySelector('.e-frozen-right-content'), this.getRightContentMaskColumns(), axisDirection);\n }\n if (gridFooter && gridFooter.querySelector('.e-summaryrow')) {\n var gridFooterContent = gridFooter.firstChild;\n if (!this.footerContentMaskTable) {\n var footerContent = gridFooterContent;\n if (this.isFrozenGrid()) {\n footerContent = footerContent.querySelector('.e-frozen-left-footercontent, .e-frozen-right-footercontent');\n }\n this.footerContentMaskTable = this.createMaskTable(footerContent);\n }\n if (this.isFrozenGrid()) {\n if (!this.movableFooterContentMaskTable) {\n this.movableFooterContentMaskTable = this.createMaskTable(gridFooterContent\n .querySelector('.e-movablefootercontent'));\n }\n if (this.getFrozenMode() === 'Left-Right' && !this.rightFooterContentMaskTable) {\n this.rightFooterContentMaskTable = this.createMaskTable(gridFooterContent\n .querySelector('.e-frozen-right-footercontent'));\n }\n }\n }\n if (!(this.enableVirtualization && axisDirection)) {\n EventHandler.add(gridContent, 'scroll', this.translateMaskRow, this);\n }\n };\n Grid.prototype.getContentMaskColumns = function () {\n var columns = this.getColumns();\n if (this.isFrozenGrid()) {\n if (this.getFrozenMode() === 'Left' || this.getFrozenMode() === 'Left-Right') {\n columns = this.frozenColumns ? columns.slice(0, this.frozenColumns) : this.getFrozenLeftColumns();\n }\n else if (this.getFrozenMode() === 'Right') {\n columns = this.getFrozenRightColumns();\n }\n }\n return columns;\n };\n Grid.prototype.getMovableContentMaskColumns = function () {\n var gridColumns = this.getColumns();\n var columns = this.frozenColumns ? gridColumns.slice(this.frozenColumns, gridColumns.length)\n : this.getMovableColumns();\n return columns;\n };\n Grid.prototype.getRightContentMaskColumns = function () {\n return this.getFrozenRightColumns();\n };\n Grid.prototype.createEmptyMaskTable = function (maskElement, rowCount) {\n var table = this.createElement('table', { className: 'e-table e-masked-table' });\n var tbody = this.createElement('tbody', { className: 'e-masked-tbody' });\n var row = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {\n style: 'height: ' + this.getRowHeight() + 'px;'\n } });\n var cell = this.createElement('td', { className: 'e-masked-cell e-rowcell' });\n cell.innerHTML = this.getShimmerTemplate();\n row.appendChild(cell);\n for (var i = 0; i < rowCount; i++) {\n tbody.appendChild(row.cloneNode(true));\n }\n table.appendChild(tbody);\n maskElement.appendChild(table);\n return table;\n };\n Grid.prototype.createMaskTable = function (element, columns, axisDirection) {\n var parentElement = element;\n var header = closest(parentElement, '.e-gridheader') ? true : false;\n var content = closest(parentElement, '.e-gridcontent') ? true : false;\n var footer = closest(parentElement, '.e-gridfooter') ? true : false;\n var gridContent = this.getContent().firstChild;\n var gridContentScrollHeight = gridContent.scrollHeight;\n var table = parentElement.querySelector('table');\n if (this.isFrozenGrid()) {\n if (content) {\n parentElement.style.overflow = 'hidden';\n }\n parentElement.style.position = 'relative';\n }\n var maskTable = table.cloneNode();\n maskTable.removeAttribute('role');\n maskTable.removeAttribute('id');\n maskTable.removeAttribute('aria-multiselectable');\n maskTable.removeAttribute('aria-colcount');\n maskTable.removeAttribute('aria-rowcount');\n maskTable.style.position = 'absolute';\n maskTable.style.zIndex = '1';\n maskTable.style.width = table.getBoundingClientRect().width + 'px';\n if (header && !(this.enableColumnVirtualization && axisDirection === 'X')) {\n maskTable.style.transform = 'translate(0px,'\n + table.querySelector('thead').getBoundingClientRect().height + 'px)';\n }\n maskTable.setAttribute('class', 'e-table e-masked-table');\n var maskColgroup = table.querySelector('colgroup').cloneNode(true);\n maskColgroup.removeAttribute('id');\n maskColgroup.setAttribute('class', 'e-masked-colgroup');\n maskTable.appendChild(maskColgroup);\n if (header && this.enableColumnVirtualization && axisDirection === 'X') {\n var row = this.createMaskRow(maskColgroup, columns);\n var thead = table.querySelector('thead');\n var rows = [].slice.call(thead.querySelectorAll('tr'));\n var maskTHead = thead.cloneNode();\n maskTHead.removeAttribute('role');\n maskTHead.setAttribute('class', 'e-masked-thead');\n var rowCount = rows.length;\n for (var i = 0; i < rowCount; i++) {\n maskTHead.appendChild(row.cloneNode(true));\n maskTHead.childNodes[parseInt(i.toString(), 10)].style\n .height = rows[parseInt(i.toString(), 10)].getBoundingClientRect().height + 'px';\n }\n maskTable.appendChild(maskTHead);\n }\n var maskTBody = table.querySelector('tbody').cloneNode();\n maskTBody.removeAttribute('role');\n maskTBody.setAttribute('class', 'e-masked-tbody');\n var tbody = table.querySelector('tbody');\n if (content || (header && this.isFrozenGrid())) {\n var rowCountElement = gridContent;\n var rowCount = header && this.isFrozenGrid() ? this.frozenRows\n : Math.ceil(rowCountElement.getBoundingClientRect().height / this.getRowHeight());\n if (tbody.querySelector('.e-emptyrow') || !tbody.childNodes.length || (content && this.childGrid)) {\n var row = this.createMaskRow(maskColgroup, columns);\n var altRow = row.cloneNode(true);\n altRow.classList.add('e-altrow');\n for (var i = 0; i < rowCount; i++) {\n var altNumber = content && this.isFrozenGrid() && this.frozenRows ? this.frozenRows + 1 : 1;\n maskTBody.appendChild((i + altNumber) % 2 === 0 ? altRow.cloneNode(true) : row.cloneNode(true));\n }\n }\n else {\n var rowsQuery = 'tr:not([style*=\"display:none\"]):not([style*=\"display: none\"])';\n var rows = [].slice.call(tbody.querySelectorAll(rowsQuery));\n var addEditRow = tbody.querySelector('.e-addedrow, .e-editedrow');\n var addEditRowIndex = void 0;\n if (addEditRow) {\n addEditRowIndex = rows.indexOf(addEditRow);\n if (addEditRow.classList.contains('e-addedrow')) {\n rows.splice(addEditRowIndex, 2);\n }\n else {\n rows.splice(addEditRowIndex, 1);\n }\n }\n rowCount = (header && this.isFrozenGrid()) || (this.enableVirtualization && axisDirection) ? rows.length\n : rowCount <= rows.length ? rowCount : rows.length;\n for (var i = 0; i < rowCount; i++) {\n maskTBody.appendChild(this.applyMaskRow(rows[parseInt(i.toString(), 10)].cloneNode(true), rows[parseInt(i.toString(), 10)].getBoundingClientRect().height));\n }\n if (addEditRow && addEditRow.classList.contains('e-editedrow') && addEditRowIndex < rowCount) {\n var addEditMaskRow = maskTBody.childNodes[parseInt(addEditRowIndex.toString(), 10)];\n addEditMaskRow.style.height = this.getRowHeight() + 'px';\n addEditMaskRow.classList.add('e-row');\n if (addEditRow.classList.contains('e-altrow')) {\n addEditMaskRow.classList.add('e-altrow');\n }\n }\n }\n }\n maskTable.appendChild(maskTBody);\n if (footer) {\n var tfoot = table.querySelector('tfoot');\n var maskTFoot = tfoot.cloneNode();\n maskTFoot.setAttribute('class', 'e-masked-tfoot');\n var rows = [].slice.call(tfoot.querySelectorAll('tr'));\n for (var i = 0; i < rows.length; i++) {\n maskTFoot.appendChild(this.applyMaskRow(rows[parseInt(i.toString(), 10)].cloneNode(true), rows[parseInt(i.toString(), 10)].getBoundingClientRect().height));\n }\n maskTable.appendChild(maskTFoot);\n }\n parentElement.insertBefore(maskTable, parentElement.firstChild);\n if (header && this.isFrozenGrid() && tbody\n .getBoundingClientRect().height < maskTable.querySelector('tbody').getBoundingClientRect().height) {\n var maskTableHolderHeight = maskTable.querySelector('tbody')\n .getBoundingClientRect().height - tbody.getBoundingClientRect().height;\n var maskTableHolder = this.createElement('div', { className: 'e-masked-table-holder', attrs: {\n style: 'height: ' + maskTableHolderHeight + 'px;'\n } });\n parentElement.appendChild(maskTableHolder);\n }\n else if (header && this.isFrozenGrid() && !(this.enableColumnVirtualization && axisDirection === 'X')) {\n maskTable.style.height = parentElement\n .getBoundingClientRect().height - table.querySelector('thead').getBoundingClientRect().height + 'px';\n }\n if (content && !(this.enableVirtualization && axisDirection)) {\n var minScrollTop = gridContentScrollHeight - maskTable.getBoundingClientRect().height;\n minScrollTop = minScrollTop < 0 ? 0 : minScrollTop;\n var scrollTop = gridContent.scrollTop <= minScrollTop ? gridContent.scrollTop : minScrollTop;\n if (this.enableVirtualization) {\n scrollTop -= getTransformValues(closest(parentElement, '.e-virtualtable')).height;\n }\n maskTable.style.transform = 'translate(0px,' + scrollTop + 'px)';\n }\n return maskTable;\n };\n Grid.prototype.applyMaskRow = function (row, rowHeight) {\n var maskRow = row;\n maskRow.removeAttribute('role');\n maskRow.removeAttribute('aria-rowindex');\n maskRow.removeAttribute('data-rowindex');\n maskRow.removeAttribute('data-uid');\n maskRow.classList.add('e-masked-row');\n maskRow.style.height = rowHeight + 'px';\n var maskCells = [].slice.call(maskRow.childNodes);\n for (var i = 0; i < maskCells.length; i++) {\n var maskCell = maskCells[parseInt(i.toString(), 10)];\n var displayAsCheckBoxCell = maskCell.firstChild && maskCell.firstChild.classList\n && maskCell.firstChild.classList.contains('e-checkbox-wrapper');\n maskCell.removeAttribute('role');\n maskCell.removeAttribute('tabindex');\n maskCell.removeAttribute('aria-label');\n maskCell.removeAttribute('data-colindex');\n maskCell.removeAttribute('aria-colindex');\n maskCell.removeAttribute('index');\n maskCell.removeAttribute('ej-mappingname');\n maskCell.removeAttribute('ej-mappingvalue');\n maskCell.removeAttribute('e-mappinguid');\n maskCell.removeAttribute('aria-expanded');\n maskCell.classList.add('e-masked-cell');\n maskCell.innerHTML = this.getShimmerTemplate();\n if (maskCell.classList.contains('e-recordplusexpand') || maskCell.classList.contains('e-recordpluscollapse')) {\n maskCell.firstChild.classList.add('e-mask-group-intent');\n }\n else if (maskCell.classList.contains('e-gridchkbox') || displayAsCheckBoxCell) {\n maskCell.firstChild.classList.add('e-mask-checkbox-intent');\n }\n else if (maskCell.classList.contains('e-rowdragdrop')) {\n maskCell.firstChild.classList.add('e-mask-drag-intent');\n }\n else if (maskCell.classList.contains('e-indentcell')) {\n maskCell.innerHTML = '';\n }\n }\n return maskRow;\n };\n Grid.prototype.createMaskRow = function (refColgroup, refColumns) {\n var colgroup = refColgroup;\n var columns = refColumns;\n var row = this.createElement('tr', { className: 'e-masked-row e-row' });\n if (this.rowRenderingMode !== 'Vertical') {\n row.style.height = this.getRowHeight() + 'px';\n }\n var td = this.createElement('td', { className: 'e-masked-cell e-rowcell' });\n for (var i = 0, colIndex = 0; i < colgroup.childNodes.length; i++) {\n var col = colgroup.childNodes[parseInt(i.toString(), 10)];\n var localTD = td.cloneNode();\n localTD.innerHTML = this.getShimmerTemplate();\n if (!(col.classList.contains('e-group-intent') || col.classList.contains('e-detail-intent')\n || col.classList.contains('e-drag-intent'))) {\n if (this.rowRenderingMode === 'Vertical' && columns[parseInt(colIndex.toString(), 10)]) {\n localTD.setAttribute('data-cell', columns[parseInt(colIndex.toString(), 10)].headerText ?\n columns[parseInt(colIndex.toString(), 10)].headerText : columns[parseInt(colIndex.toString(), 10)].field);\n }\n if (col.style.display === 'none') {\n localTD.classList.add('e-hide');\n }\n else {\n localTD.style.textAlign = columns[parseInt(colIndex.toString(), 10)]\n && columns[parseInt(colIndex.toString(), 10)].textAlign ?\n columns[parseInt(colIndex.toString(), 10)].textAlign.toLowerCase()\n : this.enableRtl ? 'right' : 'left';\n if (columns[parseInt(colIndex.toString(), 10)] && (columns[parseInt(colIndex.toString(), 10)].type === 'checkbox'\n || columns[parseInt(colIndex.toString(), 10)].displayAsCheckBox)) {\n localTD.firstChild.classList.add('e-mask-checkbox-intent');\n }\n }\n colIndex++;\n }\n else {\n if (col.classList.contains('e-group-intent')) {\n localTD.firstChild.classList.add('e-mask-group-intent');\n }\n else if (col.classList.contains('e-detail-intent')) {\n localTD.firstChild.classList.add('e-mask-detail-intent');\n }\n else if (col.classList.contains('e-drag-intent')) {\n localTD.firstChild.classList.add('e-mask-drag-intent');\n }\n }\n row.appendChild(localTD);\n }\n return row;\n };\n Grid.prototype.getShimmerTemplate = function () {\n if (this.maskRowContentScroll) {\n return '';\n }\n return '';\n };\n Grid.prototype.addShimmerEffect = function () {\n this.maskRowContentScroll = false;\n var maskSpan = [].slice.call(this.element.querySelectorAll('.e-mask:not(.e-shimmer-wave)'));\n for (var i = 0; i < maskSpan.length; i++) {\n if (maskSpan[parseInt(i.toString(), 10)]) {\n maskSpan[parseInt(i.toString(), 10)].classList.add('e-shimmer-wave');\n }\n }\n };\n Grid.prototype.translateMaskRow = function (e) {\n var target = e.target;\n var maskTables = target.querySelectorAll('.e-masked-table');\n for (var i = 0; i < maskTables.length; i++) {\n var maskTable = maskTables[parseInt(i.toString(), 10)];\n if (maskTable) {\n var minScrollTop = target.scrollHeight - maskTable.getBoundingClientRect().height;\n minScrollTop = minScrollTop < 0 ? 0 : minScrollTop;\n var scrollTop = target.scrollTop <= minScrollTop ? target.scrollTop : minScrollTop;\n if (this.enableVirtualization) {\n scrollTop -= getTransformValues(closest(maskTable, '.e-virtualtable')).height;\n }\n maskTable.style.transform = 'translate(0px,' + scrollTop + 'px)';\n }\n }\n };\n Grid.prototype.removeMaskRow = function () {\n if (!isNullOrUndefined(this.contentModule)) {\n var gridContent = this.getContent().firstChild;\n EventHandler.remove(gridContent, 'scroll', this.translateMaskRow);\n }\n var maskTables = [this.headerMaskTable, this.movableHeaderMaskTable, this.rightHeaderMaskTable,\n this.contentMaskTable, this.movableContentMaskTable, this.rightContentMaskTable, this.footerContentMaskTable,\n this.movableFooterContentMaskTable, this.rightFooterContentMaskTable];\n for (var i = 0; i < maskTables.length; i++) {\n var maskTable = maskTables[parseInt(i.toString(), 10)];\n if (maskTable) {\n if (this.isFrozenGrid() && !closest(maskTable, '.e-gridfooter')) {\n var parent_1 = maskTable.parentElement;\n parent_1.style.overflow = '';\n parent_1.style.position = '';\n if (closest(maskTable, '.e-frozen-left-header') || closest(maskTable, '.e-movableheader')\n || closest(maskTable, '.e-frozen-right-header')) {\n var maskTableHolder = parent_1.querySelector('.e-masked-table-holder');\n if (maskTableHolder) {\n remove(maskTableHolder);\n }\n }\n }\n remove(maskTable);\n }\n }\n this.headerMaskTable = null;\n this.movableHeaderMaskTable = null;\n this.rightHeaderMaskTable = null;\n this.contentMaskTable = null;\n this.movableContentMaskTable = null;\n this.rightContentMaskTable = null;\n this.footerContentMaskTable = null;\n this.movableFooterContentMaskTable = null;\n this.rightFooterContentMaskTable = null;\n };\n Grid.prototype.refreshMaskRow = function () {\n var gridHeader = this.getHeaderContent().firstChild;\n var gridContent = this.getContent().firstChild;\n if (!this.isInitialLoad && !this.getColumns().length) {\n return;\n }\n if (this.contentMaskTable && gridContent.querySelector('.e-masked-table')) {\n var content = gridContent;\n if (this.isFrozenGrid()) {\n content = content.querySelector('.e-frozen-left-content, .e-frozen-right-content');\n }\n else if (this.enableVirtualization) {\n content = content.querySelector('.e-virtualtable');\n }\n this.refreshMaskRowColgroupWidth(content);\n }\n if (this.headerMaskTable && this.isFrozenGrid()) {\n this.refreshMaskRowColgroupWidth(gridHeader.querySelector('.e-frozen-left-header, .e-frozen-right-header'));\n }\n if (this.movableHeaderMaskTable && this.isFrozenGrid()) {\n var content = gridHeader.querySelector('.e-movableheader');\n if (this.enableColumnVirtualization) {\n content = content.querySelector('.e-virtualtable');\n }\n this.refreshMaskRowColgroupWidth(content);\n }\n if (this.rightHeaderMaskTable && this.isFrozenGrid() && this.getFrozenMode() === 'Left-Right') {\n this.refreshMaskRowColgroupWidth(gridHeader.querySelector('.e-frozen-right-header'));\n }\n if (this.movableContentMaskTable && this.isFrozenGrid()) {\n var content = gridContent.querySelector('.e-movablecontent');\n if (this.enableColumnVirtualization) {\n content = content.querySelector('.e-virtualtable');\n }\n this.refreshMaskRowColgroupWidth(content);\n }\n if (this.rightContentMaskTable && this.isFrozenGrid() && this.getFrozenMode() === 'Left-Right') {\n this.refreshMaskRowColgroupWidth(gridContent.querySelector('.e-frozen-right-content'));\n }\n };\n Grid.prototype.refreshMaskRowColgroupWidth = function (content) {\n var table = content.querySelector('table:not(.e-masked-table)');\n var colgroup = table.querySelector(literals.colGroup).cloneNode(true);\n var maskTable = content.querySelector('.e-masked-table');\n colgroup.removeAttribute('id');\n colgroup.setAttribute('class', 'e-masked-colgroup');\n for (var i = 0; i < colgroup.childNodes.length; i++) {\n colgroup.childNodes[parseInt(i.toString(), 10)].removeAttribute('class');\n }\n remove(maskTable.querySelector('.e-masked-colgroup'));\n maskTable.insertBefore(colgroup, maskTable.firstChild);\n maskTable.style.width = table.getBoundingClientRect().width + 'px';\n };\n Grid.prototype.updateStackedFilter = function () {\n if (this.allowFiltering && this.filterSettings.type === 'FilterBar' &&\n this.getHeaderContent().getElementsByClassName('e-stackedheadercell').length) {\n this.getHeaderContent().classList.add('e-stackedfilter');\n }\n else {\n this.getHeaderContent().classList.remove('e-stackedfilter');\n }\n };\n Grid.prototype.getMediaColumns = function () {\n if (!this.enableColumnVirtualization) {\n var gcol = this.getColumns();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n if (!isNullOrUndefined(gcol)) {\n for (var index = 0; index < gcol.length; index++) {\n if (!isNullOrUndefined(gcol[parseInt(index.toString(), 10)].hideAtMedia)\n && (isNullOrUndefined(gcol[parseInt(index.toString(), 10)].visible)\n || gcol[parseInt(index.toString(), 10)].visible)) {\n this.pushMediaColumn(gcol[parseInt(index.toString(), 10)], index);\n }\n }\n }\n }\n };\n Grid.prototype.pushMediaColumn = function (col, index) {\n this.mediaCol.push(col);\n this.media[col.uid] = window.matchMedia(col.hideAtMedia);\n this.mediaQueryUpdate(index, this.media[col.uid]);\n this.mediaBindInstance[parseInt(index.toString(), 10)] = this.mediaQueryUpdate.bind(this, index);\n this.media[col.uid].addListener(this.mediaBindInstance[parseInt(index.toString(), 10)]);\n };\n /**\n * @param {Column} col - specifies the column\n * @returns {void}\n * @hidden\n */\n Grid.prototype.updateMediaColumns = function (col) {\n if (!this.enableColumnVirtualization) {\n var index = this.getColumnIndexByUid(col.uid);\n for (var i = 0; i < this.mediaCol.length; i++) {\n if (col.uid === this.mediaCol[parseInt(i.toString(), 10)].uid) {\n this.mediaCol.splice(i, 1);\n return;\n }\n }\n this.pushMediaColumn(col, index);\n }\n };\n /**\n * @param {number} columnIndex - specifies the column index\n * @param {MediaQueryList} e - specifies the MediaQueryList\n * @returns {void}\n * @hidden\n */\n Grid.prototype.mediaQueryUpdate = function (columnIndex, e) {\n var col = this.getColumns()[parseInt(columnIndex.toString(), 10)];\n if (this.mediaCol.some(function (mediaColumn) { return mediaColumn.uid === col.uid; })) {\n col.visible = e.matches;\n if (this.isInitialLoad) {\n this.invokedFromMedia = true;\n if (col.visible) {\n this.showHider.show(col.headerText, 'headerText');\n }\n else {\n this.showHider.hide(col.headerText, 'headerText');\n }\n }\n }\n };\n Grid.prototype.refreshMediaCol = function () {\n this.isInitialLoad = true;\n var footerContent = this.element.querySelector('.' + literals.gridFooter);\n if (this.aggregates.length && this.element.scrollHeight > this.height && footerContent) {\n addClass([footerContent], ['e-footerpadding']);\n }\n var checkboxColumn = this.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length && this.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n this.isCheckBoxSelection = false;\n }\n if (this.rowRenderingMode === 'Vertical') {\n if (this.enableHover) {\n this.setProperties({ enableAdaptiveUI: true, enableHover: false }, true);\n removeClass([this.element], 'e-gridhover');\n }\n }\n if (this.enableAdaptiveUI && this.scrollModule) {\n this.scrollModule.refresh();\n }\n };\n Grid.prototype.removeMediaListener = function () {\n for (var i = 0; i < this.mediaCol.length; i++) {\n this.media[this.mediaCol[parseInt(i.toString(), 10)].uid]\n .removeListener(this.mediaBindInstance[this.mediaCol[parseInt(i.toString(), 10)].index]);\n }\n };\n /**\n * For internal use only - Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Grid.prototype.eventInitializer = function () {\n //eventInitializer\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @function destroy\n * @returns {void}\n */\n Grid.prototype.destroy = function () {\n var gridElement = this.element;\n if (!gridElement) {\n return;\n }\n var hasGridChild = gridElement.querySelector('.' + literals.gridHeader) &&\n gridElement.querySelector('.' + literals.gridContent) ? true : false;\n if (hasGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n this.removeMediaListener();\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n if (this.isReact || this.isVue) {\n this.destroyTemplate(['template']);\n }\n if (hasGridChild) {\n _super.prototype.destroy.call(this);\n }\n this.toolTipObj.destroy();\n if (this.isReact && !Browser.isIE) {\n this.element.innerHTML = '';\n }\n var modules = ['renderModule', 'headerModule', 'contentModule', 'valueFormatterService',\n 'serviceLocator', 'ariaService', 'keyboardModule', 'widthService', 'searchModule', 'showHider',\n 'scrollModule', 'printModule', 'clipboardModule', 'focusModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[parseInt(i.toString(), 10)]]) {\n this[modules[parseInt(i.toString(), 10)]] = null;\n }\n }\n this.element.innerHTML = '';\n classList(this.element, [], ['e-rtl', 'e-gridhover', 'e-responsive', 'e-default', 'e-device', 'e-grid-min-height']);\n this.isFreezeRefresh = false;\n };\n Grid.prototype.destroyDependentModules = function () {\n var gridElement = this.element;\n if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n return;\n }\n this.scrollModule.destroy();\n this.keyboardModule.destroy();\n this.focusModule.destroy();\n this.clipboardModule.destroy();\n this.printModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Grid.prototype.getModuleName = function () {\n return 'grid';\n };\n Grid.prototype.enableBoxSelection = function () {\n if (this.enableAutoFill) {\n this.selectionSettings.cellSelectionMode = 'BoxWithBorder';\n this.element.classList.add('e-afenabled');\n }\n else {\n this.element.classList.remove('e-afenabled');\n }\n };\n Grid.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {GridModel} newProp - Defines new properties\n * @param {GridModel} oldProp - Defines old properties\n * @returns {void}\n * @hidden\n */\n Grid.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n var requireGridRefresh = false;\n var freezeRefresh = false;\n var checkCursor;\n var args = { requestType: 'refresh' };\n var childGridParent = null;\n var parentInstance = null;\n if (this.isDestroyed) {\n return;\n }\n this.log('module_missing');\n if (this.isEllipsisTooltip()) {\n this.toolTipObj.close();\n }\n var properties = Object.keys(newProp);\n if (properties.indexOf('columns') > -1) {\n if (this.enableColumnVirtualization) {\n this.columnModel = [];\n }\n this.updateColumnObject();\n requireGridRefresh = true;\n }\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'allowPaging':\n this.notify(events.uiUpdate, { module: 'pager', enable: this.allowPaging });\n requireRefresh = true;\n break;\n case 'pageSettings':\n if (this.pageTemplateChange) {\n this.pageTemplateChange = false;\n this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n break;\n }\n this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n if (isNullOrUndefined(newProp.pageSettings.currentPage) && isNullOrUndefined(newProp.pageSettings.pageSize)\n && isNullOrUndefined(newProp.pageSettings.totalRecordsCount)\n || !isNullOrUndefined(oldProp.pageSettings) &&\n ((newProp.pageSettings.currentPage !== oldProp.pageSettings.currentPage)\n && !this.enableColumnVirtualization && !this.enableVirtualization\n && this.pageSettings.totalRecordsCount <= this.pageSettings.pageSize)) {\n requireRefresh = true;\n }\n break;\n case 'allowSorting':\n this.notify(events.uiUpdate, { module: 'sort', enable: this.allowSorting });\n requireRefresh = true;\n checkCursor = true;\n break;\n case 'allowFiltering':\n this.updateStackedFilter();\n this.notify(events.uiUpdate, { module: 'filter', enable: this.allowFiltering });\n requireRefresh = true;\n if (this.filterSettings.type !== 'FilterBar') {\n this.refreshHeader();\n }\n break;\n case 'height':\n case 'width':\n this.notify(events.uiUpdate, { module: 'scroll', properties: { width: newProp.width, height: newProp.height } });\n if (this.allowPaging) {\n this.pagerModule.refresh();\n }\n break;\n case 'allowReordering':\n this.headerModule.refreshUI();\n checkCursor = true;\n break;\n case 'allowRowDragAndDrop':\n this.notify(events.uiUpdate, { module: 'rowDragAndDrop', enable: this.allowRowDragAndDrop });\n this.renderModule.refresh();\n this.headerModule.refreshUI();\n break;\n case 'allowSelection':\n this.notify(events.uiUpdate, { module: 'selection', enable: this.allowSelection });\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enableAutoFill':\n if (this.selectionModule) {\n this.enableBoxSelection();\n this.selectionModule.updateAutoFillPosition();\n }\n break;\n case 'rowTemplate':\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n requireRefresh = true;\n break;\n case 'detailTemplate':\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n requireRefresh = true;\n break;\n case 'allowGrouping':\n this.notify(events.uiUpdate, { module: 'group', enable: this.allowGrouping });\n this.headerModule.refreshUI();\n requireRefresh = true;\n checkCursor = true;\n break;\n case 'enableInfiniteScrolling':\n case 'childGrid':\n requireRefresh = true;\n childGridParent = this.parentDetails ? document.querySelector(\"#\" + this.parentDetails.parentID) : null;\n parentInstance = childGridParent ? childGridParent.ej2_instances[0] : null;\n if (this.childGrid && parentInstance && isNullOrUndefined(parentInstance.childGrid.childGrid)) {\n var childGridObject = Object.assign({}, parentInstance.childGrid, { childGrid: newProp.childGrid });\n parentInstance.setProperties({ childGrid: childGridObject }, true);\n while (!isNullOrUndefined(parentInstance.parentDetails)) {\n var currentParent = document.querySelector(\"#\" + parentInstance.parentDetails.parentID);\n var currentParentInstance = currentParent ? currentParent.ej2_instances[0] : null;\n if (currentParentInstance) {\n var currentChildObject = Object.assign({}, currentParentInstance.childGrid);\n currentChildObject.childGrid = parentInstance.childGrid;\n currentParentInstance.setProperties({ childGrid: currentChildObject }, true);\n }\n parentInstance = currentParentInstance;\n }\n }\n break;\n case 'toolbar':\n this.notify(events.uiUpdate, { module: 'toolbar' });\n break;\n case 'groupSettings':\n this.notify(events.inBoundModelChanged, {\n module: 'group', properties: newProp.groupSettings,\n oldProperties: oldProp.groupSettings\n });\n break;\n case 'aggregates':\n if (!this.aggregates.length && this.allowGrouping && this.groupSettings.columns.length) {\n requireRefresh = true;\n }\n this.notify(events.uiUpdate, { module: 'aggregate', properties: newProp });\n break;\n case 'frozenColumns':\n case 'frozenRows':\n case 'enableVirtualization':\n case 'currencyCode':\n case 'locale':\n this.log('frozen_rows_columns');\n freezeRefresh = true;\n requireGridRefresh = true;\n break;\n case 'query':\n if (!this.getDataModule().isQueryInvokedFromData) {\n requireRefresh = true;\n }\n this.getDataModule().isQueryInvokedFromData = false;\n break;\n case 'autoFit':\n if (this.autoFit) {\n this.preventAdjustColumns();\n }\n else {\n this.restoreAdjustColumns();\n }\n break;\n default:\n this.extendedPropertyChange(prop, newProp, requireGridRefresh);\n }\n }\n if (checkCursor) {\n this.updateDefaultCursor();\n }\n if (requireGridRefresh) {\n if (freezeRefresh || this.getFrozenColumns() || this.frozenRows) {\n this.freezeRefresh();\n }\n else {\n this.refresh();\n }\n }\n else if (requireRefresh) {\n this.notify(events.modelChanged, args);\n requireRefresh = false;\n this.maintainSelection(newProp.selectedRowIndex);\n }\n };\n Grid.prototype.extendedPropertyChange = function (prop, newProp, requireGridRefresh) {\n switch (prop) {\n case 'enableRtl':\n this.updateRTL();\n if (this.allowPaging) {\n this.element.querySelector('.e-gridpager').ej2_instances[0].enableRtl = newProp.enableRtl;\n this.element.querySelector('.e-gridpager').ej2_instances[0].dataBind();\n }\n if (this.height !== 'auto') {\n this.scrollModule.removePadding(!newProp.enableRtl);\n this.scrollModule.setPadding();\n }\n if (this.toolbar && this.toolbarModule) {\n this.toolbarModule.getToolbar().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.toolbarModule.getToolbar().ej2_instances[0].dataBind();\n }\n if (this.contextMenuItems && this.contextMenuModule) {\n this.contextMenuModule.getContextMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.contextMenuModule.getContextMenu().ej2_instances[0].dataBind();\n }\n if (this.showColumnMenu && this.columnMenuModule) {\n this.columnMenuModule.getColumnMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.columnMenuModule.getColumnMenu().ej2_instances[0].dataBind();\n }\n if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator) {\n this.refreshHeader();\n }\n this.notify(events.rtlUpdated, {});\n break;\n case 'enableAltRow':\n this.renderModule.refresh();\n break;\n case 'allowResizing':\n this.headerModule.refreshUI();\n this.updateResizeLines();\n break;\n case 'rowHeight':\n if (this.rowHeight) {\n addClass([this.element], 'e-grid-min-height');\n }\n else {\n removeClass([this.element], 'e-grid-min-height');\n }\n this.renderModule.refresh();\n this.headerModule.refreshUI();\n break;\n case 'gridLines':\n this.updateGridLines();\n break;\n case 'showColumnMenu':\n this.headerModule.refreshUI();\n this.notify(events.uiUpdate, { module: 'columnMenu', enable: true });\n break;\n case 'columnMenuItems':\n this.notify(events.uiUpdate, { module: 'columnMenu', enable: this.columnMenuItems });\n break;\n case 'contextMenuItems':\n this.notify(events.uiUpdate, { module: 'contextMenu', enable: this.contextMenuItems });\n break;\n case 'showColumnChooser':\n this.notify(events.uiUpdate, { module: 'columnChooser', enable: this.showColumnChooser });\n break;\n case 'filterSettings':\n this.updateStackedFilter();\n this.notify(events.inBoundModelChanged, { module: 'filter', properties: newProp.filterSettings });\n break;\n case 'searchSettings':\n this.notify(events.inBoundModelChanged, { module: 'search', properties: newProp.searchSettings });\n break;\n case 'sortSettings':\n this.notify(events.inBoundModelChanged, { module: 'sort' });\n break;\n case 'selectionSettings':\n this.notify(events.inBoundModelChanged, { module: 'selection', properties: newProp.selectionSettings });\n break;\n case 'editSettings':\n this.notify(events.inBoundModelChanged, { module: 'edit', properties: newProp.editSettings });\n break;\n case 'allowTextWrap':\n case 'textWrapSettings':\n if (this.allowTextWrap) {\n this.applyTextWrap();\n }\n else {\n this.removeTextWrap();\n }\n this.notify(events.freezeRender, { case: 'textwrap', isModeChg: (prop === 'textWrapSettings') });\n break;\n case 'dataSource':\n // eslint-disable-next-line no-case-declarations\n var pending_1 = this.getDataModule().getState();\n if (Object.getPrototypeOf(newProp).deepWatch) {\n var pKeyField = this.getPrimaryKeyFieldNames()[0];\n for (var i = 0, props = Object.keys(newProp.dataSource); i < props.length; i++) {\n this.setRowData(getValue(pKeyField, this.dataSource[props[parseInt(i.toString(), 10)]]), this.dataSource[props[parseInt(i.toString(), 10)]]);\n }\n }\n else if (pending_1.isPending) {\n var gResult = !isNullOrUndefined(this.dataSource) ? this.dataSource.result : [];\n var names = (pending_1.group || []);\n for (var i = 0; i < names.length; i++) {\n gResult = DataUtil.group(gResult, names[parseInt(i.toString(), 10)], pending_1.aggregates || []);\n }\n this.dataSource = {\n result: gResult, count: this.dataSource.count,\n aggregates: this.dataSource.aggregates\n };\n this.getDataModule().setState({});\n pending_1.resolver(this.dataSource);\n }\n else {\n this.getDataModule().setState({ isDataChanged: false });\n this.notify(events.dataSourceModified, {});\n if (!requireGridRefresh) {\n this.renderModule.refresh();\n if (this.isCheckBoxSelection) {\n this.notify(events.beforeRefreshOnDataChange, {});\n }\n }\n }\n this.scrollRefresh();\n break;\n case 'enableHover':\n // eslint-disable-next-line no-case-declarations\n var action = newProp.enableHover ? addClass : removeClass;\n action([this.element], 'e-gridhover');\n break;\n case 'selectedRowIndex':\n if (!this.isSelectedRowIndexUpdating) {\n this.selectRow(newProp.selectedRowIndex);\n }\n this.isSelectedRowIndexUpdating = false;\n break;\n case 'resizeSettings':\n this.widthService.setWidthToTable();\n break;\n case 'enableAdaptiveUI':\n this.notify(events.setFullScreenDialog, {});\n break;\n case 'rowRenderingMode':\n this.enableVerticalRendering();\n this.notify(events.rowModeChange, {});\n this.refresh();\n break;\n case 'enableStickyHeader':\n this.scrollModule.addStickyListener(newProp.enableStickyHeader);\n break;\n }\n };\n Grid.prototype.maintainSelection = function (index) {\n var _this = this;\n if (index !== -1) {\n var fn_1 = function () {\n _this.selectRow(index);\n _this.off(events.contentReady, fn_1);\n };\n this.on(events.contentReady, fn_1, this);\n }\n };\n /**\n * @param {Object} prop - Defines the property\n * @param {boolean} muteOnChange - Defines the mute on change\n * @returns {void}\n * @private\n */\n Grid.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n var filterSettings = 'filterSettings';\n if (prop[\"\" + filterSettings] && this.filterModule && muteOnChange) {\n this.filterModule.refreshFilter();\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.setTablesCount = function () {\n var frozenCols = this.getFrozenColumns();\n var frozenLeft = this.getFrozenLeftColumnsCount();\n var frozenRight = this.getFrozenRightColumnsCount();\n if (frozenCols && !frozenLeft && !frozenRight) {\n this.tablesCount = 2;\n }\n else if (!frozenCols && (frozenLeft || frozenRight)) {\n if ((frozenLeft && !frozenRight) || (frozenRight && !frozenLeft)) {\n this.tablesCount = 2;\n }\n else if (frozenLeft && frozenRight) {\n this.tablesCount = 3;\n }\n }\n };\n /**\n * @hidden\n * @returns {number} - Returns the tables count\n */\n Grid.prototype.getTablesCount = function () {\n return this.tablesCount;\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.updateDefaultCursor = function () {\n var headerCells = [].slice.call(this.getHeaderContent().querySelectorAll('.e-headercell:not(.e-stackedheadercell)'));\n var stdHdrCell = [].slice.call(this.getHeaderContent().getElementsByClassName('e-stackedheadercell'));\n var cols = this.getColumns();\n if (this.enableColumnVirtualization && this.getFrozenColumns()) {\n var cells = this.contentModule.getHeaderCells();\n headerCells = cells.length ? cells : headerCells;\n }\n for (var i = 0; i < headerCells.length; i++) {\n var cell = headerCells[parseInt(i.toString(), 10)];\n if (this.allowGrouping || this.allowReordering || this.allowSorting) {\n if (!cols[parseInt(i.toString(), 10)].allowReordering || !cols[parseInt(i.toString(), 10)].allowSorting\n || !cols[parseInt(i.toString(), 10)].allowGrouping) {\n cell.classList.add('e-defaultcursor');\n }\n else {\n cell.classList.add('e-mousepointer');\n }\n }\n }\n for (var count = 0; count < stdHdrCell.length; count++) {\n if (this.allowReordering) {\n stdHdrCell[parseInt(count.toString(), 10)].classList.add('e-mousepointer');\n }\n }\n };\n Grid.prototype.updateColumnModel = function (columns, isRecursion) {\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n this.updateColumnModel(columns[parseInt(i.toString(), 10)].columns, true);\n }\n else {\n this.columnModel.push(columns[parseInt(i.toString(), 10)]);\n }\n }\n if (isNullOrUndefined(isRecursion) || !isRecursion) {\n this.updateColumnLevelFrozen();\n this.updateFrozenColumns();\n this.updateLockableColumns();\n }\n };\n Grid.prototype.updateColumnLevelFrozen = function () {\n var cols = this.columnModel;\n var leftCols = [];\n var rightCols = [];\n var movableCols = [];\n if (this.frozenLeftCount || this.frozenRightCount) {\n for (var i = 0, len = cols.length; i < len; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var col = cols[parseInt(i.toString(), 10)];\n if (col.freeze === 'Left') {\n col.freezeTable = literals.frozenLeft;\n leftCols.push(col);\n }\n else if (col.freeze === 'Right') {\n col.freezeTable = literals.frozenRight;\n rightCols.push(col);\n }\n else {\n col.freezeTable = 'movable';\n movableCols.push(col);\n }\n }\n this.columnModel = leftCols.concat(movableCols).concat(rightCols);\n }\n };\n Grid.prototype.updateFrozenColumns = function () {\n if (this.frozenLeftCount || this.frozenRightCount) {\n return;\n }\n var cols = this.columnModel;\n var directFrozenCount = this.frozenColumns;\n var totalFrozenCount = this.getFrozenColumns();\n var count = 0;\n for (var i = 0, len = cols.length; i < len; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var col = cols[parseInt(i.toString(), 10)];\n if (directFrozenCount) {\n if (i < directFrozenCount) {\n col.freezeTable = literals.frozenLeft;\n }\n else {\n col.freezeTable = 'movable';\n }\n }\n if (col.isFrozen && i >= directFrozenCount) {\n col.freezeTable = literals.frozenLeft;\n cols.splice(this.frozenColumns + count, 0, cols.splice(i, 1)[0]);\n count++;\n }\n else if (totalFrozenCount && !directFrozenCount) {\n col.freezeTable = 'movable';\n }\n if (!totalFrozenCount && !directFrozenCount && !isNullOrUndefined(col.freezeTable)) {\n col.freezeTable = undefined;\n }\n }\n };\n Grid.prototype.getFrozenLeftCount = function () {\n return this.getFrozenColumns() || this.getFrozenLeftColumnsCount();\n };\n Grid.prototype.isFrozenGrid = function () {\n return this.getFrozenColumns() !== 0 || this.getFrozenLeftColumnsCount() !== 0 || this.getFrozenRightColumnsCount() !== 0;\n };\n Grid.prototype.getFrozenMode = function () {\n return this.frozenName;\n };\n Grid.prototype.updateLockableColumns = function () {\n var cols = this.columnModel;\n var frozenCount = 0;\n var movableCount = 0;\n var frozenColumns = this.getFrozenColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].lockColumn) {\n if (i < frozenColumns) {\n cols.splice(frozenCount, 0, cols.splice(i, 1)[0]);\n frozenCount++;\n }\n else {\n cols.splice(frozenColumns + movableCount, 0, cols.splice(i, 1)[0]);\n movableCount++;\n }\n }\n }\n };\n Grid.prototype.checkLockColumns = function (cols) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].columns) {\n this.checkLockColumns(cols[parseInt(i.toString(), 10)].columns);\n }\n else if (cols[parseInt(i.toString(), 10)].lockColumn) {\n this.lockcolPositionCount++;\n }\n }\n };\n /**\n * Gets the columns from the Grid.\n *\n * @param {boolean} isRefresh - Defines the boolean whether to refresh\n * @returns {Column[]} - returns the column\n */\n Grid.prototype.getColumns = function (isRefresh) {\n var _this = this;\n var inview = this.inViewIndexes.map(function (v) { return v - _this.groupSettings.columns.length; }).filter(function (v) { return v > -1; });\n var vLen = inview.length;\n if (!this.enableColumnVirtualization || isNullOrUndefined(this.columnModel) || this.columnModel.length === 0 || isRefresh) {\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n }\n var columns = vLen === 0 ? this.columnModel :\n this.columnModel.slice(inview[0], inview[vLen - 1] + 1);\n if (this.contentModule && this.enableColumnVirtualization && this.isFrozenGrid() && inview.length\n && inview[0] > 0) {\n var frozenCols = this.contentModule.ensureFrozenCols(columns);\n columns = frozenCols;\n }\n return columns;\n };\n /**\n * @private\n * @param {string} stackedHeader - Defines the stacked header\n * @param {Column[]} col - Defines the column\n * @returns {Column} Returns the Column\n */\n Grid.prototype.getStackedHeaderColumnByHeaderText = function (stackedHeader, col) {\n for (var i = 0; i < col.length; i++) {\n var individualColumn = col[parseInt(i.toString(), 10)];\n if (individualColumn.field === stackedHeader || individualColumn.headerText === stackedHeader) {\n this.stackedColumn = individualColumn;\n break;\n }\n else if (individualColumn.columns) {\n this.getStackedHeaderColumnByHeaderText(stackedHeader, individualColumn.columns);\n }\n }\n return this.stackedColumn;\n };\n /**\n * @private\n * @returns {number[]} Returns the column indexes\n */\n Grid.prototype.getColumnIndexesInView = function () {\n return this.inViewIndexes;\n };\n /**\n * @private\n * @returns {Query} - returns the query\n */\n Grid.prototype.getQuery = function () {\n return this.query;\n };\n /**\n * @private\n * @returns {object} - returns the locale constants\n */\n Grid.prototype.getLocaleConstants = function () {\n return this.defaultLocale;\n };\n /**\n * @param {number[]} indexes - specifies the indexes\n * @returns {void}\n * @private\n */\n Grid.prototype.setColumnIndexesInView = function (indexes) {\n this.inViewIndexes = indexes;\n };\n /**\n * Gets the visible columns from the Grid.\n *\n * @returns {Column[]} returns the column\n */\n Grid.prototype.getVisibleColumns = function () {\n return this.getCurrentVisibleColumns();\n };\n /**\n * Gets the header div of the Grid.\n *\n * @returns {Element} - Returns the element\n */\n Grid.prototype.getHeaderContent = function () {\n return this.headerModule.getPanel();\n };\n /**\n * Sets the header div of the Grid to replace the old header.\n *\n * @param {Element} element - Specifies the Grid header.\n *\n * @returns {void}\n */\n Grid.prototype.setGridHeaderContent = function (element) {\n this.headerModule.setPanel(element);\n };\n /**\n * Gets the content table of the Grid.\n *\n * @returns {Element} - Returns the element\n */\n Grid.prototype.getContentTable = function () {\n return this.contentModule.getTable();\n };\n /**\n * Sets the content table of the Grid to replace the old content table.\n *\n * @param {Element} element - Specifies the Grid content table.\n *\n * @returns {void}\n */\n Grid.prototype.setGridContentTable = function (element) {\n this.contentModule.setTable(element);\n };\n /**\n * Gets the content div of the Grid.\n *\n * @returns {Element} Returns the element\n */\n Grid.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Sets the content div of the Grid to replace the old Grid content.\n *\n * @param {Element} element - Specifies the Grid content.\n *\n * @returns {void}\n */\n Grid.prototype.setGridContent = function (element) {\n this.contentModule.setPanel(element);\n };\n /**\n * Gets the header table element of the Grid.\n *\n * @returns {Element} returns the element\n */\n Grid.prototype.getHeaderTable = function () {\n return this.headerModule.getTable();\n };\n /**\n * Sets the header table of the Grid to replace the old one.\n *\n * @param {Element} element - Specifies the Grid header table.\n *\n * @returns {void}\n */\n Grid.prototype.setGridHeaderTable = function (element) {\n this.headerModule.setTable(element);\n };\n /**\n * Gets the footer div of the Grid.\n *\n * @returns {Element} returns the element\n */\n Grid.prototype.getFooterContent = function () {\n this.footerElement = this.element.getElementsByClassName(literals.gridFooter)[0];\n return this.footerElement;\n };\n /**\n * Gets the footer table element of the Grid.\n *\n * @returns {Element} returns the element\n */\n Grid.prototype.getFooterContentTable = function () {\n this.footerElement = this.element.getElementsByClassName(literals.gridFooter)[0];\n return this.footerElement.firstChild.firstChild;\n };\n /**\n * Gets the pager of the Grid.\n *\n * @returns {Element} returns the element\n */\n Grid.prototype.getPager = function () {\n return this.gridPager; //get element from pager\n };\n /**\n * Sets the pager of the Grid to replace the old pager.\n *\n * @param {Element} element - Specifies the Grid pager.\n *\n * @returns {void}\n */\n Grid.prototype.setGridPager = function (element) {\n this.gridPager = element;\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n *\n * @returns {Element} returns the element\n */\n Grid.prototype.getRowByIndex = function (index) {\n if (this.enableVirtualization && this.groupSettings.enableLazyLoading) {\n return this.lazyLoadRender.getRowByIndex(index);\n }\n else {\n return this.contentModule.getRowByIndex(index);\n }\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n *\n * @returns {Element} returns the element\n */\n Grid.prototype.getMovableRowByIndex = function (index) {\n return this.contentModule.getMovableRowByIndex(index);\n };\n /**\n * Gets a frozen tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n Grid.prototype.getFrozenRowByIndex = function (index) {\n return this.getFrozenDataRows()[parseInt(index.toString(), 10)];\n };\n /**\n * Gets all the data rows of the Grid.\n *\n * @returns {Element[]} returns the element\n */\n Grid.prototype.getRows = function () {\n return this.contentModule.getRowElements();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n Grid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.contentModule.getFrozenRightRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - specifies the element\n *\n * @returns {RowInfo} returns the row info\n */\n Grid.prototype.getRowInfo = function (target) {\n var ele = target;\n var args = { target: target };\n if (!isNullOrUndefined(target) && isNullOrUndefined(parentsUntil(ele, 'e-detailrowcollapse')\n && isNullOrUndefined(parentsUntil(ele, 'e-recordplusexpand')))) {\n var cell = closest(ele, '.' + literals.rowCell);\n if (!cell) {\n var row = closest(ele, '.' + literals.row);\n if (!isNullOrUndefined(row) && !row.classList.contains('e-addedrow')) {\n var rowObj = this.getRowObjectFromUID(row.getAttribute('data-uid'));\n var rowIndex = parseInt(row.getAttribute(literals.dataRowIndex), 10);\n args = { row: row, rowData: rowObj.data, rowIndex: rowIndex };\n }\n return args;\n }\n var cellIndex = parseInt(cell.getAttribute(literals.dataColIndex), 10);\n if (!isNullOrUndefined(cell) && !isNaN(cellIndex)) {\n var row_1 = closest(cell, '.' + literals.row);\n var rowIndex = parseInt(row_1.getAttribute(literals.dataRowIndex), 10);\n var frzCols = this.getFrozenColumns();\n var tableName = this.columnModel[parseInt(cellIndex.toString(), 10)].getFreezeTableName();\n var rows = this.contentModule.getRows();\n var index = cellIndex + this.getIndentCount();\n if (this.isFrozenGrid()) {\n if (tableName === literals.frozenLeft) {\n rows = this.contentModule.getRows();\n }\n else if (tableName === 'movable') {\n index = cellIndex - frzCols - this.frozenLeftCount;\n rows = this.contentModule.getMovableRows();\n }\n else if (tableName === literals.frozenRight) {\n index = cellIndex - (this.frozenLeftCount + this.movableCount);\n rows = this.contentModule.getFrozenRightRows();\n }\n }\n var rowsObject = rows.filter(function (r) { return r.uid === row_1.getAttribute('data-uid'); });\n var rowData = {};\n var column = void 0;\n if (Object.keys(rowsObject).length) {\n rowData = rowsObject[0].data;\n column = rowsObject[0].cells[parseInt(index.toString(), 10)].column;\n }\n args = { cell: cell, cellIndex: cellIndex, row: row_1, rowIndex: rowIndex, rowData: rowData, column: column, target: target };\n }\n }\n return args;\n };\n /**\n * Gets the Grid's movable content rows from frozen grid.\n *\n * @returns {Element[]} returns the element\n */\n Grid.prototype.getMovableRows = function () {\n return this.contentModule.getMovableRowElements();\n };\n /**\n * Gets the Grid's frozen right content rows from frozen grid.\n *\n * @returns {Element[]} returns the element\n */\n Grid.prototype.getFrozenRightRows = function () {\n return this.contentModule.getFrozenRightRowElements();\n };\n /**\n * Gets all the Grid's data rows.\n *\n * @returns {Element[]} returns the element\n */\n Grid.prototype.getDataRows = function () {\n return this.getAllDataRows();\n };\n /**\n * @param {boolean} includeAdd - specifies includeAdd\n * @returns {Element[]} returns the element\n * @hidden\n */\n Grid.prototype.getAllDataRows = function (includeAdd) {\n if (isNullOrUndefined(this.getContentTable().querySelector(literals.tbody))) {\n return [];\n }\n var tbody = this.isFrozenGrid() ? this.getFrozenLeftContentTbody()\n : this.getContentTable().querySelector(literals.tbody);\n var rows = [].slice.call(tbody.children);\n if (this.frozenRows) {\n var hdrTbody = this.isFrozenGrid() ? this.getHeaderContent().querySelector('.' + literals.frozenHeader).querySelector(literals.tbody)\n : this.getHeaderTable().querySelector(literals.tbody);\n var freezeRows = [].slice.call(hdrTbody.children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows, includeAdd);\n return dataRows;\n };\n /**\n * @param {HTMLElement[]} fRows - Defines the frozen Rows\n * @param {HTMLElement[]} mrows - Defines the movable Rows\n * @returns {HTMLElement[]} Returns the element\n * @hidden\n */\n Grid.prototype.addMovableRows = function (fRows, mrows) {\n for (var i = 0, len = mrows.length; i < len; i++) {\n fRows.push(mrows[parseInt(i.toString(), 10)]);\n }\n return fRows;\n };\n Grid.prototype.generateDataRows = function (rows, includAdd) {\n var dRows = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[parseInt(i.toString(), 10)].classList.contains(literals.row)\n && (!rows[parseInt(i.toString(), 10)].classList.contains('e-hiddenrow') || includAdd)) {\n if (this.isCollapseStateEnabled()) {\n dRows[parseInt(rows[parseInt(i.toString(), 10)].getAttribute('data-rowindex'), 10)] = rows[parseInt(i.toString(), 10)];\n }\n else {\n dRows.push(rows[parseInt(i.toString(), 10)]);\n }\n }\n }\n return dRows;\n };\n /**\n * Gets all the Grid's movable table data rows.\n *\n * @returns {Element[]} Returns the element\n */\n Grid.prototype.getMovableDataRows = function () {\n return this.getAllMovableDataRows();\n };\n /**\n * @param {boolean} includeAdd Defines the include add in boolean\n * @returns {Element[]} Returns the element\n * @hidden\n */\n Grid.prototype.getAllMovableDataRows = function (includeAdd) {\n if (!this.isFrozenGrid()) {\n return [];\n }\n var rows = [].slice.call(this.getContent().querySelector('.' + literals.movableContent).querySelector(literals.tbody).children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderContent().querySelector('.' + literals.movableHeader).querySelector(literals.tbody).children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows, includeAdd);\n return dataRows;\n };\n /**\n * Gets all the Grid's frozen table data rows.\n *\n * @returns {Element[]} returns the element\n */\n Grid.prototype.getFrozenDataRows = function () {\n return this.getAllFrozenDataRows();\n };\n /**\n * @param {boolean} includeAdd Defines the include add in boolean\n * @returns {Element[]} Returns the element\n * @hidden\n */\n Grid.prototype.getAllFrozenDataRows = function (includeAdd) {\n var rows = [].slice.call(this.getContent().querySelector('.' + literals.frozenContent).querySelector(literals.tbody).children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderContent().querySelector('.' + literals.frozenHeader).querySelector(literals.tbody).children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows, includeAdd);\n return dataRows;\n };\n /**\n * Gets all the Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n Grid.prototype.getFrozenRightDataRows = function () {\n return this.getAllFrozenRightDataRows();\n };\n /**\n * @param {boolean} includeAdd Defines the include add in boolean\n * @returns {Element[]} Returns the element\n * @hidden\n */\n Grid.prototype.getAllFrozenRightDataRows = function (includeAdd) {\n if (this.getFrozenMode() !== 'Right' && this.getFrozenMode() !== 'Left-Right') {\n return [];\n }\n var rows = [].slice.call(this.getContent().querySelector('.e-frozen-right-content').querySelector(literals.tbody).children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderContent().querySelector('.e-frozen-right-header').querySelector(literals.tbody).children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows, includeAdd);\n return dataRows;\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n *\n * @returns {void}\n */\n Grid.prototype.setCellValue = function (key, field, value) {\n var cells = 'cells';\n var rowData = 'data';\n var rowIdx = 'index';\n var rowuID = 'uid';\n var isRight = this.getFrozenMode() === 'Right';\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var cell = new CellRenderer(this, this.serviceLocator);\n var fieldIdx = this.getColumnIndexByField(field);\n var col = this.getColumnByField(field);\n var rowObjects = col.getFreezeTableName() === 'movable' ? this.contentModule.getMovableRows() :\n col.getFreezeTableName() === 'frozen-right' ? this.getFrozenRightRowsObject() : this.contentModule.getRows();\n var selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n var tr = selectedRow ? this.element.querySelector('[data-uid=' + selectedRow[\"\" + rowuID] + ']') : null;\n if (!isNullOrUndefined(tr)) {\n if (typeof value === 'string') {\n value = this.sanitize(value);\n }\n setValue(field, value, selectedRow[\"\" + rowData]);\n var left = this.getFrozenLeftColumnsCount() || this.getFrozenColumns();\n var movable = this.getMovableColumnsCount();\n if (this.isRowDragable() && !isRight) {\n left++;\n }\n var frIdx = left + movable;\n var td = this.enableVirtualization ? tr.children[parseInt(fieldIdx.toString(), 10)]\n : this.getCellFromIndex(selectedRow[\"\" + rowIdx], fieldIdx);\n if (!isNullOrUndefined(td)) {\n var Idx = col.getFreezeTableName() === 'movable' ? left : col.getFreezeTableName() === 'frozen-right' ? frIdx : 0;\n if (this.groupSettings.columns.length) {\n fieldIdx = fieldIdx + this.groupSettings.columns.length;\n }\n if (this.childGrid || this.detailTemplate) {\n fieldIdx++;\n }\n if (this.isRowDragable() && !isRight) {\n fieldIdx++;\n }\n var sRow = selectedRow[\"\" + cells][fieldIdx - Idx];\n cell.refreshTD(td, sRow, selectedRow[\"\" + rowData], { index: selectedRow[\"\" + rowIdx] });\n if (this.isReact) {\n td = this.enableVirtualization ? tr.children[parseInt(fieldIdx.toString(), 10)]\n : this.getCellFromIndex(selectedRow[\"\" + rowIdx], fieldIdx);\n }\n if (this.aggregates.length > 0) {\n this.notify(events.refreshFooterRenderer, {});\n if (this.groupSettings.columns.length > 0) {\n this.notify(events.groupAggregates, {});\n }\n }\n /* tslint:disable:no-string-literal */\n if (!isNullOrUndefined(selectedRow) && !isNullOrUndefined(selectedRow['changes'])) {\n selectedRow['changes'][\"\" + field] = value;\n }\n /* tslint:disable:no-string-literal */\n this.trigger(events.queryCellInfo, {\n cell: td, column: col, data: selectedRow[\"\" + rowData]\n });\n if (this.isReact && td.getAttribute('tabindex') === '0' && td.classList.contains('e-focused')) {\n td.focus();\n }\n }\n }\n else {\n return;\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @param {boolean} renderTemplates - Defines renderTemplates need to invoke\n * @returns {void}\n * @hidden\n */\n Grid.prototype.refreshReactColumnTemplateByUid = function (columnUid, renderTemplates) {\n var _this = this;\n if (this.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.clearTemplate(['columnTemplate'], undefined, function () {\n var isChildGrid = _this.childGrid && _this.element.querySelectorAll('.e-childgrid').length ? true : false;\n var rows = isChildGrid ? _this.getContentTable().querySelectorAll('.e-row') :\n _this.getDataRows();\n _this.refreshReactTemplateTD(rows, isChildGrid);\n var mCont = _this.getContent().querySelector('.' + literals.movableContent);\n var frCont = _this.getContent().querySelector('.e-frozen-right-content');\n if (mCont && mCont.querySelectorAll('.e-templatecell').length) {\n _this.refreshReactTemplateTD(_this.getMovableDataRows(), isChildGrid, true);\n }\n if (frCont && frCont.querySelectorAll('.e-templatecell').length) {\n _this.refreshReactTemplateTD(_this.getFrozenRightDataRows(), isChildGrid, true);\n }\n if (renderTemplates) {\n _this.renderTemplates();\n }\n });\n }\n };\n /**\n * @param {Element[] | NodeListOf} rows - Defines the rows\n * @param {boolean} isChildGrid - Defines whether it is a Hierarchy Grid.\n * @param {boolean} isFrozen - Defines whether it is a Frozen Grid\n * @returns {void}\n * @hidden\n */\n Grid.prototype.refreshReactTemplateTD = function (rows, isChildGrid, isFrozen) {\n var cells = 'cells';\n var rowIdx = 'index';\n var indent = this.getIndentCount();\n var childIndent = 0;\n var isChildRow = false;\n for (var j = 0; j < rows.length; j++) {\n var rowsObj = this.getRowObjectFromUID(rows[parseInt(j.toString(), 10)].getAttribute('data-uid'));\n if (isChildGrid && !rowsObj && parentsUntil(rows[parseInt(j.toString(), 10)], 'e-childgrid')) {\n var gridObj = parentsUntil(rows[parseInt(j.toString(), 10)], 'e-childgrid').ej2_instances[0];\n rowsObj = gridObj.getRowObjectFromUID(rows[parseInt(j.toString(), 10)].getAttribute('data-uid'));\n childIndent = gridObj.getIndentCount();\n isChildRow = true;\n }\n if (rowsObj && rowsObj.isDataRow && !isNullOrUndefined(rowsObj.index) &&\n !rows[parseInt(j.toString(), 10)].classList.contains('e-editedrow')) {\n for (var i = 0; i < rowsObj[\"\" + cells].length; i++) {\n var cell = rowsObj[\"\" + cells][parseInt(i.toString(), 10)];\n if (cell.isTemplate) {\n var cellRenderer = new CellRenderer(this, this.serviceLocator);\n var td = isChildGrid ? rows[parseInt(j.toString(), 10)]\n .children[cell.index + (isChildRow ? childIndent : indent)] : this.getCellFromIndex(j, isFrozen ? cell.index : i - indent);\n cellRenderer.refreshTD(td, cell, rowsObj.data, { index: rowsObj[\"\" + rowIdx] });\n }\n }\n }\n isChildRow = false;\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Grid.prototype.refreshGroupCaptionFooterTemplate = function () {\n var isChildGrid = this.childGrid && this.element.querySelectorAll('.e-childgrid').length ? true : false;\n var rows = this.getContentTable().querySelectorAll('.e-groupcaptionrow, .e-groupfooterrow');\n for (var i = 0; i < rows.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var gridObj = this;\n var rowsObj = this.getRowObjectFromUID(rows[parseInt(i.toString(), 10)].getAttribute('data-uid'));\n if (isChildGrid && !rowsObj && parentsUntil(rows[parseInt(i.toString(), 10)], 'e-childgrid')) {\n gridObj = parentsUntil(rows[parseInt(i.toString(), 10)], 'e-childgrid').ej2_instances[0];\n rowsObj = gridObj.getRowObjectFromUID(rows[parseInt(i.toString(), 10)].getAttribute('data-uid'));\n }\n if (rowsObj) {\n var cells = rowsObj.cells.filter(function (cell) { return cell.isDataCell; });\n var args = { cells: cells, data: rowsObj.data, dataUid: rowsObj.uid };\n gridObj.notify(events.refreshAggregateCell, args);\n }\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Grid.prototype.refreshReactHeaderTemplateByUid = function (columnUid) {\n if (this.isReact) {\n var cells = 'cells';\n var rowsObj = this.headerModule.rows;\n var cellIndex = this.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n var cell = rowsObj[parseInt(j.toString(), 10)][\"\" + cells][parseInt(cellIndex.toString(), 10)];\n if (cell && cell.column.uid === columnUid) {\n var headerCellRenderer = new HeaderCellRenderer(this, this.serviceLocator);\n var td = parentsUntil(this.element.querySelectorAll('[e-mappinguid=' + columnUid + ']')[0], 'e-templatecell');\n headerCellRenderer.refresh(cell, td);\n }\n }\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n *\n * @returns {void}\n */\n Grid.prototype.setRowData = function (key, rowData) {\n var rowuID = 'uid';\n var rowObjects = this.contentModule.getRows();\n var pkName = this.getPrimaryKeyFieldNames()[0];\n if (this.groupSettings.columns.length > 0 && this.aggregates.length > 0) {\n rowObjects = rowObjects.filter(function (row) { return row.isDataRow; });\n }\n var selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n var selectRowEle = selectedRow ? [].slice.call(this.element.querySelectorAll('[data-uid=' + selectedRow[\"\" + rowuID] + ']')) : undefined;\n if (!isNullOrUndefined(selectedRow) && selectRowEle.length) {\n selectedRow.changes = rowData;\n if (this.isFrozenGrid()) {\n var currentTbl = parentsUntil(selectRowEle[0], 'e-table');\n var currentTblName = currentTbl.parentElement.matches('.e-frozen-left-header,.e-frozen-left-content') ? 'left'\n : currentTbl.parentElement.matches('.e-frozen-right-header,.e-frozen-right-content') ? 'right' : 'movable';\n var mTr = this.getMovableRowsObject()[selectedRow.index];\n this.setFrozenRowData(mTr, rowData);\n if (currentTblName === 'left') {\n var lTr = this.getRowsObject()[selectedRow.index];\n this.setFrozenRowData(lTr, rowData);\n }\n if (currentTblName === 'right' || this.frozenRightColumns.length > 0) {\n var rTr = this.getFrozenRightRowsObject()[selectedRow.index];\n this.setFrozenRowData(rTr, rowData);\n }\n }\n else if (this.frozenRows) {\n var fRowTr = this.getRowsObject()[selectedRow.index];\n this.setFrozenRowData(fRowTr, rowData);\n }\n else {\n this.setFrozenRowData(selectedRow, rowData);\n }\n if (this.aggregates.length > 0) {\n this.notify(events.refreshFooterRenderer, {});\n if (this.groupSettings.columns.length > 0) {\n this.notify(events.groupAggregates, {});\n }\n }\n }\n else {\n return;\n }\n };\n Grid.prototype.setFrozenRowData = function (fTr, rowData) {\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this);\n fTr.changes = rowData;\n refreshForeignData(fTr, this.getForeignKeyColumns(), fTr.changes);\n rowRenderer.refresh(fTr, this.getColumns(), true);\n };\n /**\n * Gets a cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n *\n * @returns {Element} Returns the Element\n */\n Grid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n var col = this.getColumnByIndex(columnIndex);\n return getCellByColAndRowIndex(this, col, rowIndex, columnIndex);\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n *\n * @returns {Element} Returns the Element\n */\n Grid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n if (this.frozenName === 'Left-Right' && columnIndex >= this.movableCount) {\n return undefined;\n }\n var index = this.getFrozenColumns() || this.getFrozenLeftColumnsCount();\n return this.getMovableDataRows()[parseInt(rowIndex.toString(), 10)] &&\n this.getMovableDataRows()[parseInt(rowIndex.toString(), 10)].getElementsByClassName(literals.rowCell)[columnIndex - index];\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n Grid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n var index = this.getFrozenLeftColumnsCount() + this.getMovableColumnsCount();\n var rows = this.getFrozenRightDataRows();\n return rows[parseInt(rowIndex.toString(), 10)] && rows[parseInt(rowIndex.toString(), 10)]\n .getElementsByClassName(literals.rowCell)[columnIndex - index];\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n *\n * @returns {Element} Returns the Element\n */\n Grid.prototype.getColumnHeaderByIndex = function (index) {\n return this.getHeaderTable().getElementsByClassName('e-headercell')[parseInt(index.toString(), 10)];\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n Grid.prototype.getMovableColumnHeaderByIndex = function (index) {\n var left = this.getFrozenColumns() || this.getFrozenLeftColumnsCount();\n return this.getMovableVirtualHeader().getElementsByClassName('e-headercell')[index - left];\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n Grid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n var left = this.getFrozenLeftColumnsCount() + this.getMovableColumnsCount();\n return this.getFrozenRightHeader().getElementsByClassName('e-headercell')[index - left];\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n Grid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.getFrozenVirtualHeader().getElementsByClassName('e-headercell')[parseInt(index.toString(), 10)];\n };\n /**\n * @param {string} uid - Defines the uid\n * @param {boolean} isMovable - Defines isMovable\n * @param {boolean} isFrozenRight - Defines isFrozenRight\n * @returns {Row} Returns the row object\n * @hidden\n */\n Grid.prototype.getRowObjectFromUID = function (uid, isMovable, isFrozenRight) {\n var rows = this.contentModule.getRows();\n var row = this.rowObject(rows, uid);\n if (this.isFrozenGrid()) {\n if (!row || isMovable || isFrozenRight) {\n row = this.rowObject(this.contentModule.getMovableRows(), uid);\n if ((!row && this.getFrozenMode() === 'Left-Right') || isFrozenRight) {\n row = this.rowObject(this.contentModule.getFrozenRightRows(), uid);\n }\n return row;\n }\n }\n if (isNullOrUndefined(row) && this.enableVirtualization && this.groupSettings.columns.length > 0) {\n row = this.rowObject(this.vRows, uid);\n return row;\n }\n return row;\n };\n Grid.prototype.rowObject = function (rows, uid) {\n if (rows) {\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.uid === uid) {\n return row;\n }\n }\n }\n return null;\n };\n /**\n * @hidden\n * @returns {Row[]} Returns the Row object\n */\n Grid.prototype.getRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * @hidden\n * @returns {Row[]} Returns the Row object\n */\n Grid.prototype.getMovableRowsObject = function () {\n var rows = [];\n if (this.isFrozenGrid()) {\n rows = this.contentModule.getMovableRows();\n }\n return rows;\n };\n /**\n * @hidden\n * @returns {Row[]} Returns the Row object\n */\n Grid.prototype.getFrozenRightRowsObject = function () {\n var rows = [];\n if (this.getFrozenMode() === 'Right' || this.getFrozenMode() === 'Left-Right') {\n rows = this.contentModule.getFrozenRightRows();\n }\n return rows;\n };\n /**\n * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n *\n * @returns {Element} - Returns the element\n */\n Grid.prototype.getColumnHeaderByField = function (field) {\n var column = this.getColumnByField(field);\n return column ? this.getColumnHeaderByUid(column.uid) : undefined;\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n *\n * @returns {Element} - Returns the element\n */\n Grid.prototype.getColumnHeaderByUid = function (uid) {\n var element = this.getHeaderContent().querySelector('[e-mappinguid=' + uid + ']');\n return element ? element.parentElement : undefined;\n };\n /**\n * @hidden\n * @param {number} index - Defines the index\n * @returns {Column} Returns the column\n */\n Grid.prototype.getColumnByIndex = function (index) {\n var column;\n this.getColumns().some(function (col, i) {\n column = col;\n return i === index;\n });\n return column;\n };\n /**\n * Gets a Column by column name.\n *\n * @param {string} field - Specifies the column name.\n *\n * @returns {Column} Returns the column\n */\n Grid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n *\n * @returns {number} Returns the index by field\n */\n Grid.prototype.getColumnIndexByField = function (field) {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n *\n * @returns {Column} Returns the column\n */\n Grid.prototype.getColumnByUid = function (uid) {\n return iterateArrayOrObject(this.getColumns().concat(this.getStackedColumns(this.columns)), function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * @param {Column[]} columns - Defines the columns\n * @param {Column[]} stackedColumn - Defines the stacked columns\n * @returns {Column[]} Returns the columns\n * @hidden\n */\n Grid.prototype.getStackedColumns = function (columns, stackedColumn) {\n if (stackedColumn === void 0) { stackedColumn = []; }\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (column.columns) {\n stackedColumn.push(column);\n this.getStackedColumns(column.columns, stackedColumn);\n }\n }\n return stackedColumn;\n };\n /**\n * Gets a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n *\n * @returns {number} Returns the column by index\n */\n Grid.prototype.getColumnIndexByUid = function (uid) {\n var index = iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n *\n * @returns {string} Returns the column by field\n */\n Grid.prototype.getUidByColumnField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item) {\n if (item.field === field) {\n return item.uid;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets column index by column uid value.\n *\n * @private\n * @param {string} uid - Specifies the column uid.\n * @returns {number} Returns the column by field\n */\n Grid.prototype.getNormalizedColumnIndex = function (uid) {\n var index = this.getColumnIndexByUid(uid);\n return index + this.getIndentCount();\n };\n /**\n * Gets indent cell count.\n *\n * @private\n * @returns {number} Returns the indent count\n */\n Grid.prototype.getIndentCount = function () {\n var index = 0;\n if (this.allowGrouping) {\n index += this.groupSettings.columns.length;\n }\n if (this.isDetail()) {\n index++;\n }\n if (this.isRowDragable() && isNullOrUndefined(this.rowDropSettings.targetID)) {\n index++;\n }\n /**\n * TODO: index normalization based on the stacked header, grouping and detailTemplate\n * and frozen should be handled here\n */\n return index;\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} Returns the Field names\n */\n Grid.prototype.getColumnFieldNames = function () {\n var columnNames = [];\n var column;\n for (var i = 0, len = this.getColumns().length; i < len; i++) {\n column = this.getColumns()[parseInt(i.toString(), 10)];\n if (column.visible) {\n columnNames.push(column.field);\n }\n }\n return columnNames;\n };\n /**\n * Gets a compiled row template.\n *\n * @returns {Function} Returns the row TEmplate\n * @private\n */\n Grid.prototype.getRowTemplate = function () {\n return this.rowTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n *\n * @private\n * @returns {Function} Returns the Detail template\n */\n Grid.prototype.getDetailTemplate = function () {\n return this.detailTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n *\n * @private\n * @returns {Function}Returns the Edit template\n */\n Grid.prototype.getEditTemplate = function () {\n return this.editTemplateFn;\n };\n /**\n * Gets a compiled dialog edit header template.\n *\n * @private\n * @returns {Function} returns template function\n */\n Grid.prototype.getEditHeaderTemplate = function () {\n return this.editHeaderTemplateFn;\n };\n /**\n * Gets a compiled dialog edit footer template.\n *\n * @private\n * @returns {Function} Returns the Footer template\n */\n Grid.prototype.getEditFooterTemplate = function () {\n return this.editFooterTemplateFn;\n };\n /**\n * Get the names of the primary key columns of the Grid.\n *\n * @returns {string[]} Returns the field names\n */\n Grid.prototype.getPrimaryKeyFieldNames = function () {\n var keys = [];\n for (var k = 0; k < this.columnModel.length; k++) {\n if (this.columnModel[parseInt(k.toString(), 10)].isPrimaryKey) {\n keys.push(this.columnModel[parseInt(k.toString(), 10)].field);\n }\n }\n return keys;\n };\n /**\n * Refreshes the Grid header and content.\n *\n * @returns {void}\n */\n Grid.prototype.refresh = function () {\n if (!this.isDestroyed) {\n this.isManualRefresh = true;\n this.headerModule.refreshUI();\n this.updateStackedFilter();\n this.renderModule.refresh();\n }\n };\n /**\n * Refreshes the Grid header.\n *\n * @returns {void}\n */\n Grid.prototype.refreshHeader = function () {\n this.headerModule.refreshUI();\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} Returns the element\n */\n Grid.prototype.getSelectedRows = function () {\n return this.selectionModule ? this.selectionModule.selectedRecords : [];\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} Returns the Selected row indexes\n */\n Grid.prototype.getSelectedRowIndexes = function () {\n return this.selectionModule ? this.selectionModule.selectedRowIndexes : [];\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {number[]} Returns the Selected row cell indexes\n */\n Grid.prototype.getSelectedRowCellIndexes = function () {\n return this.selectionModule ? this.selectionModule.selectedRowCellIndexes : [];\n };\n /**\n * Gets the collection of selected records.\n *\n * @returns {Object[]} Returns the selected records\n * @isGenericType true\n */\n Grid.prototype.getSelectedRecords = function () {\n return this.selectionModule ? this.selectionModule.getSelectedRecords() : [];\n };\n /**\n * Gets the collection of selected columns uid.\n *\n * @returns {string[]} Returns the selected column uid\n * @isGenericType true\n */\n Grid.prototype.getSelectedColumnsUid = function () {\n var _this = this;\n var uid = [];\n if (this.selectionModule) {\n this.selectionModule.selectedColumnsIndexes.filter(function (i) { return uid.push(_this.getColumns()[parseInt(i.toString(), 10)].uid); });\n }\n return uid;\n };\n /**\n * Gets the data module.\n *\n * @returns {Data} Returns the data\n */\n Grid.prototype.getDataModule = function () {\n return this.renderModule.data;\n };\n /**\n * Shows a column by its column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n *\n * @returns {void}\n */\n Grid.prototype.showColumns = function (keys, showBy) {\n showBy = showBy ? showBy : 'headerText';\n this.showHider.show(keys, showBy);\n };\n /**\n * Hides a column by column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n *\n * @returns {void}\n */\n Grid.prototype.hideColumns = function (keys, hideBy) {\n hideBy = hideBy ? hideBy : 'headerText';\n this.showHider.hide(keys, hideBy);\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen column\n */\n Grid.prototype.getFrozenColumns = function () {\n return this.frozenColumns + this.getFrozenCount(this.columns, 0, 0);\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n Grid.prototype.getFrozenRightColumnsCount = function () {\n return this.frozenRightCount;\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n Grid.prototype.getFrozenLeftColumnsCount = function () {\n return this.frozenLeftCount;\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n Grid.prototype.getMovableColumnsCount = function () {\n return this.movableCount;\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.setFrozenCount = function () {\n this.frozenLeftCount = this.frozenRightCount = this.movableCount = 0;\n this.visibleFrozenLeft = this.visibleFrozenRight = this.visibleMovable = 0;\n this.frozenLeftColumns = [];\n this.frozenRightColumns = [];\n this.movableColumns = [];\n this.splitFrozenCount(this.columns);\n if (this.frozenColumns && (this.frozenLeftCount || this.frozenRightCount)) {\n this.setProperties({ frozenColumns: 0 }, true);\n }\n this.setTablesCount();\n if (this.frozenLeftCount && !this.frozenRightCount) {\n this.frozenName = 'Left';\n }\n else if (this.frozenRightCount && !this.frozenLeftCount) {\n this.frozenName = 'Right';\n }\n else if (this.frozenLeftCount && this.frozenRightCount) {\n this.frozenName = 'Left-Right';\n }\n else if (this.frozenColumns || this.frozenRows) {\n this.frozenName = 'Left';\n }\n else {\n this.frozenName = undefined;\n }\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n Grid.prototype.getVisibleFrozenLeftCount = function () {\n return this.visibleFrozenLeft;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n Grid.prototype.getVisibleFrozenRightCount = function () {\n return this.visibleFrozenRight;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n Grid.prototype.getVisibleMovableCount = function () {\n return this.visibleMovable;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n Grid.prototype.getFrozenRightColumns = function () {\n return this.frozenRightColumns;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n Grid.prototype.getFrozenLeftColumns = function () {\n return this.frozenLeftColumns;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n Grid.prototype.getMovableColumns = function () {\n return this.movableColumns;\n };\n Grid.prototype.splitFrozenCount = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n this.splitFrozenCount(columns[parseInt(i.toString(), 10)].columns);\n }\n else {\n if (columns[parseInt(i.toString(), 10)].freeze === 'Right') {\n if (columns[parseInt(i.toString(), 10)].visible !== false) {\n this.visibleFrozenRight++;\n }\n this.frozenRightColumns.push(columns[parseInt(i.toString(), 10)]);\n this.frozenRightCount++;\n }\n else if (columns[parseInt(i.toString(), 10)].freeze === 'Left') {\n if (columns[parseInt(i.toString(), 10)].visible !== false) {\n this.visibleFrozenLeft++;\n }\n this.frozenLeftColumns.push(columns[parseInt(i.toString(), 10)]);\n this.frozenLeftCount++;\n }\n else {\n if (columns[parseInt(i.toString(), 10)].visible !== false) {\n this.visibleMovable++;\n }\n this.movableColumns.push(columns[parseInt(i.toString(), 10)]);\n this.movableCount++;\n }\n }\n }\n };\n /**\n * @hidden\n * @returns {number} Returns the visible frozen columns count\n */\n Grid.prototype.getVisibleFrozenColumns = function () {\n return this.getVisibleFrozenColumnsCount() + this.getVisibleFrozenCount(this.columns, 0);\n };\n /**\n * Get the current Filter operator and field.\n *\n * @returns {FilterUI} Returns the filter UI\n */\n Grid.prototype.getFilterUIInfo = function () {\n return this.filterModule ? this.filterModule.getFilterUIInfo() : {};\n };\n Grid.prototype.getVisibleFrozenColumnsCount = function () {\n var visibleFrozenColumns = 0;\n var columns = this.columnModel;\n for (var i = 0; i < this.frozenColumns; i++) {\n if (columns[parseInt(i.toString(), 10)].visible) {\n visibleFrozenColumns++;\n }\n }\n if (this.frozenLeftCount || this.frozenRightCount) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].visible && (columns[parseInt(i.toString(), 10)].freeze === 'Left'\n || columns[parseInt(i.toString(), 10)].freeze === 'Right')) {\n visibleFrozenColumns++;\n }\n }\n }\n return visibleFrozenColumns;\n };\n Grid.prototype.getVisibleFrozenCount = function (cols, cnt) {\n if (!this.frozenLeftCount && !this.frozenRightCount) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[parseInt(i.toString(), 10)].columns) {\n cnt = this.getVisibleFrozenCount(cols[parseInt(i.toString(), 10)].columns, cnt);\n }\n else {\n if (cols[parseInt(i.toString(), 10)].isFrozen && cols[parseInt(i.toString(), 10)].visible) {\n cnt++;\n }\n }\n }\n }\n return cnt;\n };\n Grid.prototype.getFrozenCount = function (cols, cnt, index) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[parseInt(i.toString(), 10)].columns) {\n cnt = this.getFrozenCount(cols[parseInt(i.toString(), 10)].columns, cnt, index);\n }\n else {\n if (cols[parseInt(i.toString(), 10)].isFrozen && index > this.frozenColumns - 1) {\n cnt++;\n }\n index++;\n }\n }\n return cnt;\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n *\n * @returns {void}\n */\n Grid.prototype.goToPage = function (pageNo) {\n if (this.pagerModule) {\n this.pagerModule.goToPage(pageNo);\n }\n };\n /**\n * Defines the text of external message.\n *\n * @param {string} message - Defines the message to update.\n *\n * @returns {void}\n */\n Grid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n *\n * @returns {void}\n */\n Grid.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Remove the existing columns along with the grid actions like sorting, filtering, searching, grouping, aggregate, etc., and grid will refresh with new columns based on the updated new data source.\n * > * If no columns are specified while changing the data source, then the columns are auto generated in the Grid based on the list of columns in the updated data source.\n *\n * @param {Object | DataManager | DataResult} dataSource - Assign the new datasource.\n * @param {Column[] | string[] | ColumnModel[]} columns - Defines columns.\n * @returns {void}\n *\n *\n * ```typescript\n * \n *
\n * \n * ```\n *\n */\n Grid.prototype.changeDataSource = function (dataSource, columns) {\n this.setProperties({ sortSettings: { columns: [] } }, true);\n this.setProperties({ filterSettings: { columns: [] } }, true);\n this.setProperties({ searchSettings: { key: '' } }, true);\n if (this.allowGrouping) {\n this.setProperties({ groupSettings: { columns: [] } }, true);\n }\n if (columns && columns.length) {\n this.setProperties({ columns: columns }, true);\n }\n if (dataSource) {\n if (isNullOrUndefined(columns)) {\n this.setProperties({ columns: [] }, true);\n }\n this.setProperties({ dataSource: dataSource }, true);\n }\n this.freezeRefresh();\n };\n /**\n * Clears all the sorted columns of the Grid.\n *\n * @returns {void}\n */\n Grid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n Grid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.clearGridActions = function () {\n this.setProperties({ sortSettings: { columns: [] } }, true);\n this.setProperties({ filterSettings: { columns: [] } }, true);\n this.setProperties({ searchSettings: { key: '' } }, true);\n if (this.allowGrouping) {\n this.setProperties({ groupSettings: { columns: [] } }, false);\n }\n else {\n this.freezeRefresh();\n }\n };\n /**\n * Filters grid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the grid filters the records with exact match. if false, it filters case\n * insensitive records (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true,\n * then filter ignores the diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for the filter column.\n * @param {string} actualOperator - Defines the actual filter operator for the filter column.\n *\n * @returns {void}\n */\n Grid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n if (this.filterModule) {\n this.filterModule.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n }\n };\n /**\n * Clears all the filtered rows of the Grid.\n *\n * @param {string[]} fields - Defines the Fields\n * @returns {void}\n */\n Grid.prototype.clearFiltering = function (fields) {\n if (this.filterModule) {\n this.filterModule.clearFiltering(fields);\n }\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @returns {void}\n * @hidden\n */\n Grid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n if (this.filterModule) {\n this.filterModule.removeFilteredColsByField(field, isClearFilterBar);\n }\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n *\n * @returns {void}\n */\n Grid.prototype.selectRow = function (index, isToggle) {\n if (this.selectionModule) {\n this.selectionModule.selectRow(index, isToggle);\n }\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n *\n * @returns {void}\n */\n Grid.prototype.selectRows = function (rowIndexes) {\n if (this.selectionModule) {\n this.selectionModule.selectRows(rowIndexes);\n }\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n Grid.prototype.clearSelection = function () {\n if (this.selectionModule) {\n this.selectionModule.clearSelection();\n }\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n *\n * @returns {void}\n */\n Grid.prototype.selectCell = function (cellIndex, isToggle) {\n if (this.selectionModule) {\n this.selectionModule.selectCell(cellIndex, isToggle);\n }\n };\n /**\n * Selects a range of cells from start and end indexes.\n *\n * @param {IIndex} startIndex - Specifies the row and column's start index.\n * @param {IIndex} endIndex - Specifies the row and column's end index.\n *\n * @returns {void}\n */\n Grid.prototype.selectCellsByRange = function (startIndex, endIndex) {\n this.selectionModule.selectCellsByRange(startIndex, endIndex);\n };\n /**\n * Searches Grid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n *\n * @returns {void}\n */\n Grid.prototype.search = function (searchString) {\n if (this.searchModule) {\n this.searchModule.search(searchString);\n }\n };\n /**\n * By default, prints all the pages of the Grid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n Grid.prototype.print = function () {\n if (this.printModule) {\n this.printModule.print();\n }\n };\n /**\n * Delete a record with Given options. If fieldname and data is not given then grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldname - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n * @returns {void}\n */\n Grid.prototype.deleteRecord = function (fieldname, data) {\n if (this.editModule) {\n this.editModule.deleteRecord(fieldname, data);\n }\n };\n /**\n * Starts edit the selected row. At least one row must be selected before invoking this method.\n * `editSettings.allowEditing` should be true.\n * {% codeBlock src='grid/startEdit/index.md' %}{% endcodeBlock %}\n *\n * @returns {void}\n */\n Grid.prototype.startEdit = function () {\n if (this.editModule) {\n this.editModule.startEdit();\n }\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n Grid.prototype.endEdit = function () {\n if (this.editModule) {\n this.editModule.endEdit();\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n Grid.prototype.closeEdit = function () {\n if (this.editModule) {\n this.editModule.closeEdit();\n }\n };\n /**\n * Adds a new record to the Grid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n * @returns {void}\n */\n Grid.prototype.addRecord = function (data, index) {\n if (this.editModule) {\n this.editModule.addRecord(data, index);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n Grid.prototype.deleteRow = function (tr) {\n if (this.editModule) {\n this.editModule.deleteRow(tr);\n }\n };\n /**\n * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.\n *\n * @param {number} index - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform batch edit.\n *\n * @returns {void}\n */\n Grid.prototype.editCell = function (index, field) {\n if (this.editModule) {\n this.editModule.editCell(index, field);\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n * {% codeBlock src='grid/saveCell/index.md' %}{% endcodeBlock %}\n */\n Grid.prototype.saveCell = function () {\n if (this.editModule) {\n this.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n *\n * @returns {void}\n */\n Grid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.editModule) {\n this.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * {% codeBlock src='grid/updateRow/index.md' %}{% endcodeBlock %}\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n *\n * @returns {void}\n */\n Grid.prototype.updateRow = function (index, data) {\n if (this.editModule) {\n this.editModule.updateRow(index, data);\n }\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} Returns the batch changes\n */\n Grid.prototype.getBatchChanges = function () {\n if (this.editModule) {\n return this.editModule.getBatchChanges();\n }\n return {};\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n *\n * @returns {void}\n */\n Grid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.toolbarModule) {\n this.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n Grid.prototype.copy = function (withHeader) {\n if (this.clipboardModule) {\n this.clipboardModule.copy(withHeader);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.recalcIndentWidth = function () {\n var _this = this;\n if (!this.getHeaderTable().querySelector('.e-emptycell')) {\n return;\n }\n if ((!this.groupSettings.columns.length && !this.isDetail() && !this.isRowDragable()) ||\n this.getHeaderTable().querySelector('.e-emptycell').getAttribute('indentRefreshed') ||\n !this.getContentTable()) {\n return;\n }\n var indentWidth = this.getHeaderTable().querySelector('.e-emptycell').parentElement.offsetWidth;\n var headerCol = [].slice.call(this.getHeaderTable().querySelector(literals.colGroup).childNodes);\n var contentCol = [].slice.call(this.getContentTable().querySelector(literals.colGroup).childNodes);\n var perPixel = indentWidth / 30;\n var i = this.getFrozenMode() === 'Right' ? this.frozenRightCount : 0;\n var parentOffset = this.element.offsetWidth;\n var applyWidth = function (index, width) {\n if (ispercentageWidth(_this)) {\n var newWidth = (width / parentOffset * 100).toFixed(1) + '%';\n headerCol[parseInt(index.toString(), 10)].style.width = newWidth;\n contentCol[parseInt(index.toString(), 10)].style.width = newWidth;\n }\n else {\n headerCol[parseInt(index.toString(), 10)].style.width = width + 'px';\n contentCol[parseInt(index.toString(), 10)].style.width = width + 'px';\n }\n _this.notify(events.columnWidthChanged, { index: index, width: width });\n };\n if (perPixel >= 1) {\n indentWidth = (30 / perPixel);\n }\n if (indentWidth < 1) {\n indentWidth = 1;\n }\n if (this.enableColumnVirtualization || this.isAutoGen || (this.columns.length === this.groupSettings.columns.length)) {\n indentWidth = 30;\n }\n while (i < this.groupSettings.columns.length) {\n applyWidth(i, indentWidth);\n i++;\n }\n if (this.isDetail()) {\n applyWidth(i, indentWidth);\n i++;\n }\n if (this.isRowDragable()) {\n applyWidth(i, indentWidth);\n }\n this.isAutoGen = false;\n this.getHeaderTable().querySelector('.e-emptycell').setAttribute('indentRefreshed', 'true');\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.resetIndentWidth = function () {\n if (ispercentageWidth(this)) {\n this.getHeaderTable().querySelector('.e-emptycell').removeAttribute('indentRefreshed');\n this.widthService.setWidthToColumns();\n this.recalcIndentWidth();\n if (this.autoFit) {\n this.preventAdjustColumns();\n }\n }\n if ((this.width === 'auto' || typeof (this.width) === 'string' && this.width.indexOf('%') !== -1)\n && this.getColumns().filter(function (col) { return (!col.width || col.width === 'auto') && col.minWidth; }).length > 0) {\n var tgridWidth = this.widthService.getTableWidth(this.getColumns());\n this.widthService.setMinwidthBycalculation(tgridWidth);\n }\n if (this.isFrozenGrid() && this.widthService) {\n this.widthService.refreshFrozenScrollbar();\n }\n if (this.allowTextWrap && this.textWrapSettings.wrapMode !== 'Content') {\n this.notify(events.refreshHandlers, {});\n }\n };\n /**\n * @hidden\n * @returns {boolean} Returns isRowDragable\n */\n Grid.prototype.isRowDragable = function () {\n return this.allowRowDragAndDrop && !this.rowDropSettings.targetID;\n };\n /**\n * Changes the Grid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n *\n * @returns {void}\n */\n Grid.prototype.reorderColumns = function (fromFName, toFName) {\n if (this.reorderModule) {\n this.reorderModule.reorderColumns(fromFName, toFName);\n }\n };\n /**\n * Changes the Grid column positions by field index. If you invoke reorderColumnByIndex multiple times,\n * then you won't get the same results every time.\n *\n * @param {number} fromIndex - Defines the origin field index.\n * @param {number} toIndex - Defines the destination field index.\n *\n * @returns {void}\n */\n Grid.prototype.reorderColumnByIndex = function (fromIndex, toIndex) {\n if (this.reorderModule) {\n this.reorderModule.reorderColumnByIndex(fromIndex, toIndex);\n }\n };\n /**\n * Changes the Grid column positions by field index. If you invoke reorderColumnByTargetIndex multiple times,\n * then you will get the same results every time.\n *\n * @param {string} fieldName - Defines the field name.\n * @param {number} toIndex - Defines the destination field index.\n *\n * @returns {void}\n */\n Grid.prototype.reorderColumnByTargetIndex = function (fieldName, toIndex) {\n if (this.reorderModule) {\n this.reorderModule.reorderColumnByTargetIndex(fieldName, toIndex);\n }\n };\n /**\n * Changes the Grid Row position with given indexes.\n *\n * @param {number} fromIndexes - Defines the origin Indexes.\n * @param {number} toIndex - Defines the destination Index.\n *\n * @returns {void}\n */\n Grid.prototype.reorderRows = function (fromIndexes, toIndex) {\n if (this.rowDragAndDropModule) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex);\n }\n };\n /**\n * @param {ReturnType} e - Defines the Return type\n * @returns {void}\n * @hidden\n */\n Grid.prototype.refreshDataSource = function (e) {\n this.notify('refreshdataSource', e);\n };\n /**\n * @param {boolean} enable -Defines the enable\n * @returns {void}\n * @hidden\n */\n Grid.prototype.disableRowDD = function (enable) {\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n var headerRows = headerTable.querySelectorAll('th.e-rowdragheader, th.e-mastercell');\n var rows = this.getRows();\n var disValue = enable ? 'none' : '';\n setStyleAttribute(headerTable.querySelector(literals.colGroup).childNodes[0], { 'display': disValue });\n setStyleAttribute(contentTable.querySelector(literals.colGroup).childNodes[0], { 'display': disValue });\n for (var i = 0; i < this.getRows().length; i++) {\n var ele = rows[parseInt(i.toString(), 10)].firstElementChild;\n if (enable) {\n addClass([ele], 'e-hide');\n }\n else {\n removeClass([ele], ['e-hide']);\n }\n }\n for (var j = 0; j < headerTable.querySelectorAll('th.e-rowdragheader, th.e-mastercell').length; j++) {\n var ele = headerRows[parseInt(j.toString(), 10)];\n if (enable) {\n addClass([ele], 'e-hide');\n }\n else {\n removeClass([ele], ['e-hide']);\n }\n }\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n * ```typescript\n *
\n * \n * ```\n *\n */\n Grid.prototype.autoFitColumns = function (fieldNames) {\n if (this.resizeModule) {\n this.resizeModule.autoFitColumns(fieldNames);\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Grid.prototype.preventAdjustColumns = function () {\n if (this.isFrozenGrid() || (this.enableAdaptiveUI && this.rowRenderingMode === 'Vertical')\n || (this.allowResizing && this.resizeSettings.mode === 'Auto')) {\n return;\n }\n var columns = this.getColumns();\n var headerTable = this.getHeaderTable();\n var tableWidth = 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].visible) {\n if (this.groupSettings.columns.length\n && this.groupSettings.columns.indexOf(columns[parseInt(i.toString(), 10)].field) > -1) {\n var headerCol = [].slice.call(headerTable.querySelector('colgroup')\n .querySelectorAll(':not(.e-group-intent):not(.e-detail-intent):not(.e-drag-intent)'));\n if (headerCol[parseInt(i.toString(), 10)].style.display === 'none') {\n continue;\n }\n }\n if (columns[parseInt(i.toString(), 10)].width) {\n tableWidth += parseFloat(columns[parseInt(i.toString(), 10)].width.toString());\n }\n else {\n tableWidth = 0;\n break;\n }\n }\n }\n if (tableWidth) {\n var percentageWidth = this.isPercentageWidthGrid();\n var unit = this.widthUnit(percentageWidth);\n var contentTable = this.getContentTable();\n if (this.groupSettings.columns.length || this.isDetail() || this.isRowDragable()) {\n var indentWidth = this.defaultIndentWidth(percentageWidth);\n var indentWidthUnitFormat = indentWidth.toString() + unit;\n var headerIndentCol = [].slice.call(headerTable.querySelector('colgroup')\n .querySelectorAll('.e-group-intent, .e-detail-intent, .e-drag-intent'));\n var contentIndentCol = [].slice.call(contentTable.querySelector('colgroup')\n .querySelectorAll('.e-group-intent, .e-detail-intent, .e-drag-intent'));\n for (var i = 0; i < headerIndentCol.length; i++) {\n headerIndentCol[parseInt(i.toString(), 10)].style.setProperty('width', indentWidthUnitFormat);\n contentIndentCol[parseInt(i.toString(), 10)].style.setProperty('width', indentWidthUnitFormat);\n tableWidth += indentWidth;\n }\n }\n if ((percentageWidth && tableWidth < 100)\n || (!percentageWidth && tableWidth < contentTable.parentElement.clientWidth)) {\n addClass([headerTable, contentTable], ['e-tableborder']);\n }\n var tableWidthUnitFormat = tableWidth.toString() + unit;\n headerTable.style.setProperty('width', tableWidthUnitFormat);\n contentTable.style.setProperty('width', tableWidthUnitFormat);\n }\n else {\n this.restoreAdjustColumns();\n }\n };\n Grid.prototype.restoreAdjustColumns = function () {\n if (this.isFrozenGrid() || (this.enableAdaptiveUI && this.rowRenderingMode === 'Vertical')\n || (this.allowResizing && this.resizeSettings.mode === 'Auto')) {\n return;\n }\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n removeClass([headerTable, contentTable], ['e-tableborder']);\n headerTable.style.removeProperty('width');\n contentTable.style.removeProperty('width');\n if (this.groupSettings.columns.length || this.isDetail() || this.isRowDragable()) {\n var percentageWidth = this.isPercentageWidthGrid();\n var indentWidthUnitFormat_1 = this.defaultIndentWidth(percentageWidth).toString() + this.widthUnit(percentageWidth);\n var headerIndentCol = [].slice.call(headerTable.querySelector('colgroup')\n .querySelectorAll('.e-group-intent, .e-detail-intent, .e-drag-intent'));\n headerIndentCol.forEach(function (element) {\n element.style.setProperty('width', indentWidthUnitFormat_1);\n });\n headerTable.querySelector('.e-emptycell').removeAttribute('indentRefreshed');\n this.recalcIndentWidth();\n }\n };\n Grid.prototype.widthUnit = function (percentageWidth) {\n return percentageWidth ? '%' : 'px';\n };\n Grid.prototype.defaultIndentWidth = function (percentageWidth) {\n return percentageWidth ? parseFloat((30 / this.element.offsetWidth * 100).toFixed(1)) : 30;\n };\n Grid.prototype.isPercentageWidthGrid = function () {\n return this.getColumns()[0].width.toString().indexOf('%') > -1;\n };\n /**\n * @param {number} x - Defines the number\n * @param {number} y - Defines the number\n * @param {Element} target - Defines the Element\n * @returns {void}\n * @hidden\n */\n Grid.prototype.createColumnchooser = function (x, y, target) {\n if (this.columnChooserModule) {\n this.columnChooserModule.renderColumnChooser(x, y, target);\n }\n };\n Grid.prototype.initializeServices = function () {\n this.serviceLocator.register('widthService', this.widthService = new ColumnWidthService(this));\n this.serviceLocator.register('cellRendererFactory', new CellRendererFactory);\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('localization', this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale));\n this.serviceLocator.register('valueFormatter', this.valueFormatterService = new ValueFormatter(this.locale));\n this.serviceLocator.register('showHideService', this.showHider = new ShowHide(this));\n this.serviceLocator.register('ariaService', this.ariaService = new AriaService());\n this.serviceLocator.register('focus', this.focusModule = new FocusStrategy(this));\n };\n Grid.prototype.processModel = function () {\n var gCols = this.groupSettings.columns;\n var sCols = this.sortSettings.columns;\n var flag;\n var j;\n if (this.allowGrouping) {\n var _loop_1 = function (i, len) {\n j = 0;\n for (var sLen = sCols.length; j < sLen; j++) {\n if (sCols[parseInt(j.toString(), 10)].field === gCols[parseInt(i.toString(), 10)]) {\n flag = true;\n break;\n }\n }\n if (!flag) {\n sCols.push({ field: gCols[parseInt(i.toString(), 10)], direction: 'Ascending', isFromGroup: true });\n }\n else {\n if (this_1.allowSorting) {\n this_1.sortedColumns.push(sCols[parseInt(j.toString(), 10)].field);\n }\n else {\n sCols[parseInt(j.toString(), 10)].direction = 'Ascending';\n }\n }\n if (!this_1.groupSettings.showGroupedColumn) {\n var column = this_1.enableColumnVirtualization ?\n this_1.columns.filter(function (c) { return c.field === gCols[parseInt(i.toString(), 10)]; })[0]\n : this_1.getColumnByField(gCols[parseInt(i.toString(), 10)]);\n if (column) {\n column.visible = false;\n }\n else {\n this_1.log('initial_action', { moduleName: 'group', columnName: gCols[parseInt(i.toString(), 10)] });\n }\n }\n };\n var this_1 = this;\n for (var i = 0, len = gCols.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n if (!gCols.length) {\n for (var i = 0; i < sCols.length; i++) {\n this.sortedColumns.push(sCols[parseInt(i.toString(), 10)].field);\n }\n }\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n this.editTemplateFn = templateCompiler(this.editSettings.template);\n this.editHeaderTemplateFn = templateCompiler(this.editSettings.headerTemplate);\n this.editFooterTemplateFn = templateCompiler(this.editSettings.footerTemplate);\n if (!isNullOrUndefined(this.parentDetails)) {\n var value = isNullOrUndefined(this.parentDetails.parentKeyFieldValue) ? 'undefined' :\n this.parentDetails.parentKeyFieldValue;\n this.query.where(this.queryString, 'equal', value, true);\n }\n this.initForeignColumn();\n };\n Grid.prototype.initForeignColumn = function () {\n if (this.isForeignKeyEnabled(this.getColumns())) {\n this.notify(events.initForeignKeyColumn, this.getForeignKeyColumns());\n }\n };\n Grid.prototype.enableVerticalRendering = function () {\n if (this.rowRenderingMode === 'Vertical') {\n this.element.classList.add('e-row-responsive');\n }\n else {\n this.element.classList.remove('e-row-responsive');\n }\n };\n Grid.prototype.gridRender = function () {\n var _a;\n this.updateRTL();\n if (this.rowRenderingMode === 'Vertical') {\n this.element.classList.add('e-row-responsive');\n }\n if (this.enableHover) {\n this.element.classList.add('e-gridhover');\n }\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n if (this.rowHeight) {\n this.element.classList.add('e-grid-min-height');\n }\n if (this.cssClass) {\n if (this.cssClass.indexOf(' ') !== -1) {\n (_a = this.element.classList).add.apply(_a, this.cssClass.split(' '));\n }\n else {\n this.element.classList.add(this.cssClass);\n }\n }\n // If the below if statement is removed, then drag and drop between grids will not work in firefox browser.\n if (this.allowRowDragAndDrop && this.rowDropSettings.targetID && Browser.info.name === 'mozilla') {\n this.element.classList.add('e-disableuserselect');\n }\n classList(this.element, ['e-responsive', 'e-default'], []);\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.headerModule = rendererFactory.getRenderer(RenderType.Header);\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.printModule = new Print(this, this.scrollModule);\n this.clipboardModule = new Clipboard(this, this.serviceLocator);\n this.renderModule.render();\n this.eventInitializer();\n this.createGridPopUpElement();\n this.widthService.setWidthToColumns();\n this.updateGridLines();\n this.applyTextWrap();\n this.createTooltip(); //for clip mode ellipsis\n this.enableBoxSelection();\n };\n Grid.prototype.dataReady = function () {\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n if (this.height !== 'auto') {\n this.scrollModule.setPadding();\n }\n };\n Grid.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Grid.prototype.createGridPopUpElement = function () {\n var popup = this.createElement('div', { className: 'e-gridpopup', styles: 'display:none;' });\n var content = this.createElement('div', { className: literals.content, attrs: { tabIndex: '-1' } });\n append([content, this.createElement('div', { className: 'e-uptail e-tail' })], popup);\n content.appendChild(this.createElement('span'));\n append([content, this.createElement('div', { className: 'e-downtail e-tail' })], popup);\n this.element.appendChild(popup);\n };\n Grid.prototype.updateGridLines = function () {\n classList(this.element, [], ['e-verticallines', 'e-horizontallines', 'e-hidelines', 'e-bothlines']);\n switch (this.gridLines) {\n case 'Horizontal':\n this.element.classList.add('e-horizontallines');\n break;\n case 'Vertical':\n this.element.classList.add('e-verticallines');\n break;\n case 'None':\n this.element.classList.add('e-hidelines');\n break;\n case 'Both':\n this.element.classList.add('e-bothlines');\n break;\n }\n this.updateResizeLines();\n };\n Grid.prototype.updateResizeLines = function () {\n if (this.allowResizing &&\n !(this.gridLines === 'Vertical' || this.gridLines === 'Both')) {\n this.element.classList.add('e-resize-lines');\n }\n else {\n this.element.classList.remove('e-resize-lines');\n }\n };\n /**\n * The function is used to apply text wrap\n *\n * @returns {void}\n * @hidden\n */\n Grid.prototype.applyTextWrap = function () {\n if (this.allowTextWrap) {\n var headerRows = [].slice.call(this.element.getElementsByClassName('e-columnheader'));\n switch (this.textWrapSettings.wrapMode) {\n case 'Header':\n wrap(this.element, false);\n wrap(this.getContent(), false);\n wrap(headerRows, true);\n break;\n case 'Content':\n wrap(this.getContent(), true);\n wrap(this.element, false);\n wrap(headerRows, false);\n break;\n default:\n wrap(this.element, true);\n wrap(this.getContent(), false);\n wrap(headerRows, false);\n }\n if (this.textWrapSettings.wrapMode !== 'Content') {\n this.notify(events.refreshHandlers, {});\n }\n }\n };\n /**\n * The function is used to remove text wrap\n *\n * @returns {void}\n * @hidden\n */\n Grid.prototype.removeTextWrap = function () {\n wrap(this.element, false);\n var headerRows = [].slice.call(this.element.getElementsByClassName('e-columnheader'));\n wrap(headerRows, false);\n wrap(this.getContent(), false);\n if (this.textWrapSettings.wrapMode !== 'Content') {\n this.notify(events.refreshHandlers, {});\n }\n };\n /**\n * The function is used to add Tooltip to the grid cell that has ellipsiswithtooltip clip mode.\n *\n * @returns {void}\n * @hidden\n */\n Grid.prototype.createTooltip = function () {\n this.toolTipObj = new Tooltip({\n opensOn: 'custom',\n content: '',\n cssClass: this.cssClass ? this.cssClass : null\n }, this.element);\n };\n /** @hidden\n * @returns {void}\n */\n Grid.prototype.freezeRefresh = function () {\n this.isFreezeRefresh = true;\n if (this.enableVirtualization || this.enableInfiniteScrolling) {\n this.pageSettings.currentPage = 1;\n }\n this.componentRefresh();\n };\n Grid.prototype.getTooltipStatus = function (element) {\n var headerTable = this.getHeaderTable();\n var headerDivTag = 'e-gridheader';\n var htable = this.createTable(headerTable, headerDivTag, 'header');\n var ctable = this.createTable(headerTable, headerDivTag, 'content');\n var table = element.classList.contains('e-headercell') ? htable : ctable;\n var ele = element.classList.contains('e-headercell') ? 'th' : 'tr';\n table.querySelector(ele).className = element.className;\n table.querySelector(ele).innerHTML = element.innerHTML;\n var width = table.querySelector(ele).getBoundingClientRect().width;\n document.body.removeChild(htable);\n document.body.removeChild(ctable);\n if (width > element.getBoundingClientRect().width) {\n return true;\n }\n return false;\n };\n Grid.prototype.mouseMoveHandler = function (e) {\n if (this.isEllipsisTooltip()) {\n var element = parentsUntil(e.target, 'e-ellipsistooltip');\n if (this.prevElement !== element || e.type === 'mouseout') {\n this.toolTipObj.close();\n }\n var tagName = e.target.tagName;\n var elemNames = ['A', 'BUTTON', 'INPUT'];\n if (element && e.type !== 'mouseout' && !(Browser.isDevice && elemNames.indexOf(tagName) !== -1)) {\n if (element.getAttribute('data-tooltip-id')) {\n return;\n }\n if (this.getTooltipStatus(element)) {\n var col = this.getColumns()[parseInt(element.getAttribute(literals.dataColIndex), 10)];\n var domSetter = col.disableHtmlEncode ? 'innerText' : 'innerHTML';\n var contentDiv = this.createElement('div');\n if (element.getElementsByClassName('e-headertext').length) {\n var innerElement = element.getElementsByClassName('e-headertext')[0];\n contentDiv[\"\" + domSetter] = this.sanitize(innerElement.innerText);\n this.toolTipObj.content = contentDiv;\n }\n else {\n contentDiv[\"\" + domSetter] = this.sanitize(element.innerText);\n this.toolTipObj.content = contentDiv;\n }\n this.prevElement = element;\n if (this.enableHtmlSanitizer) {\n this.toolTipObj.enableHtmlSanitizer = true;\n }\n if (col.disableHtmlEncode) {\n this.toolTipObj.enableHtmlParse = false;\n }\n this.toolTipObj['open'](element);\n }\n }\n }\n this.hoverFrozenRows(e);\n };\n /**\n * @param {MouseEvent} e - Defines the mouse event\n * @returns {void}\n * @hidden\n */\n Grid.prototype.hoverFrozenRows = function (e) {\n if (this.isFrozenGrid()) {\n var row = parentsUntil(e.target, literals.row);\n if ([].slice.call(this.element.getElementsByClassName('e-frozenhover')).length && e.type === 'mouseout') {\n var rows = [].slice.call(this.element.getElementsByClassName('e-frozenhover'));\n for (var i = 0; i < rows.length; i++) {\n rows[parseInt(i.toString(), 10)].classList.remove('e-frozenhover');\n }\n }\n else if (row) {\n var rows = [].slice.call(this.element.querySelectorAll('tr[data-rowindex=\"' + row.getAttribute(literals.dataRowIndex) + '\"]'));\n rows.splice(rows.indexOf(row), 1);\n for (var i = 0; i < rows.length; i++) {\n if (row.getAttribute('aria-selected') !== 'true' && rows[parseInt(i.toString(), 10)]) {\n rows[parseInt(i.toString(), 10)].classList.add('e-frozenhover');\n }\n else if (rows[parseInt(i.toString(), 10)]) {\n rows[parseInt(i.toString(), 10)].classList.remove('e-frozenhover');\n }\n }\n }\n }\n };\n Grid.prototype.isEllipsisTooltip = function () {\n var cols = this.getColumns();\n if (this.clipMode === 'EllipsisWithTooltip') {\n return true;\n }\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].clipMode === 'EllipsisWithTooltip') {\n return true;\n }\n }\n return false;\n };\n Grid.prototype.scrollHandler = function () {\n if (this.isEllipsisTooltip()) {\n this.toolTipObj.close();\n }\n };\n /**\n * To create table for ellipsiswithtooltip\n *\n * @param {Element} table - Defines the table\n * @param {string} tag - Defines the tag\n * @param {string} type - Defines the type\n * @returns {HTMLDivElement} Returns the HTML div ELement\n * @hidden\n */\n Grid.prototype.createTable = function (table, tag, type) {\n var myTableDiv = this.createElement('div');\n myTableDiv.className = this.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = this.createElement('div');\n mySubDiv.className = tag;\n var myTable = this.createElement('table', { attrs: { role: 'grid' } });\n myTable.className = table.className;\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var ele = (type === 'header') ? 'th' : 'td';\n var myTr = this.createElement('tr');\n var mytd = this.createElement(ele);\n myTr.appendChild(mytd);\n myTable.appendChild(myTr);\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n return myTableDiv;\n };\n Grid.prototype.onKeyPressed = function (e) {\n if (e.action === 'tab' || e.action === 'shiftTab') {\n this.toolTipObj.close();\n }\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n Grid.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(this.element, 'dblclick', this.dblClickHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyPressHandler, this);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.add(window, 'resize', this.resetIndentWidth, this);\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.getContent().firstElementChild, 'scroll', this.scrollHandler, this);\n EventHandler.add(this.element, 'mousemove', this.mouseMoveHandler, this);\n EventHandler.add(this.element, 'mouseout', this.mouseMoveHandler, this);\n EventHandler.add(this.getContent(), 'touchstart', this.tapEvent, this);\n EventHandler.add(document.body, 'keydown', this.keyDownHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n Grid.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.mouseClickHandler);\n EventHandler.remove(this.element, 'touchend', this.mouseClickHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.element, 'dblclick', this.dblClickHandler);\n EventHandler.remove(this.getContent().firstElementChild, 'scroll', this.scrollHandler);\n EventHandler.remove(this.element, 'mousemove', this.mouseMoveHandler);\n EventHandler.remove(this.element, 'mouseout', this.mouseMoveHandler);\n EventHandler.remove(this.element, 'keydown', this.keyPressHandler);\n EventHandler.remove(this.getContent(), 'touchstart', this.tapEvent);\n EventHandler.remove(document.body, 'keydown', this.keyDownHandler);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.remove(window, 'resize', this.resetIndentWidth);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.on(events.dataReady, this.dataReady, this);\n this.on(events.contentReady, this.recalcIndentWidth, this);\n this.on(events.headerRefreshed, this.recalcIndentWidth, this);\n this.dataBoundFunction = this.refreshMediaCol.bind(this);\n this.addEventListener(events.dataBound, this.dataBoundFunction);\n this.on(events.keyPressed, this.onKeyPressed, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.dataReady, this.dataReady);\n this.off(events.contentReady, this.recalcIndentWidth);\n this.off(events.headerRefreshed, this.recalcIndentWidth);\n this.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.off(events.keyPressed, this.onKeyPressed);\n };\n /**\n * Get current visible data of grid.\n *\n * @returns {Object[]} Returns the current view records\n *\n * @isGenericType true\n */\n Grid.prototype.getCurrentViewRecords = function () {\n if (isGroupAdaptive(this)) {\n return isNullOrUndefined(this.currentViewData.records) ?\n this.currentViewData : this.currentViewData.records;\n }\n if (this.groupSettings.enableLazyLoading) {\n return this.currentViewData;\n }\n return (this.allowGrouping && this.groupSettings.columns.length && this.currentViewData.length\n && this.currentViewData.records) ? this.currentViewData.records\n : this.currentViewData;\n };\n Grid.prototype.mouseClickHandler = function (e) {\n if (this.isChildGrid(e) || (parentsUntil(e.target, 'e-gridpopup') && e.touches) ||\n this.element.getElementsByClassName('e-cloneproperties').length || this.checkEdit(e)) {\n return;\n }\n if (((!this.allowRowDragAndDrop && (parentsUntil(e.target, literals.gridContent) ||\n e.target.tagName === 'TD')) || (!(this.allowGrouping || this.allowReordering) &&\n parentsUntil(e.target, 'e-gridheader'))) && e.touches) {\n return;\n }\n if (parentsUntil(e.target, 'e-gridheader') && this.allowRowDragAndDrop &&\n !(parentsUntil(e.target, 'e-filterbarcell')) && (e.target &&\n ['A', 'BUTTON', 'INPUT'].indexOf(e.target.tagName) === -1)) {\n e.preventDefault();\n }\n var args = this.getRowInfo(e.target);\n var cancel = 'cancel';\n args[\"\" + cancel] = false;\n var isDataRow = false;\n var tr = closest(e.target, 'tr');\n if (tr && tr.getAttribute('data-uid')) {\n var rowObj = this.getRowObjectFromUID(tr.getAttribute('data-uid'));\n isDataRow = rowObj ? rowObj.isDataRow : false;\n }\n if (isDataRow) {\n this.trigger(events.recordClick, args);\n }\n this.notify(events.click, e);\n };\n Grid.prototype.checkEdit = function (e) {\n var tr = parentsUntil(e.target, literals.row);\n var isEdit = this.editSettings.mode !== 'Batch' &&\n this.isEdit && tr && (tr.classList.contains(literals.editedRow) || tr.classList.contains(literals.addedRow));\n return !parentsUntil(e.target, 'e-unboundcelldiv') && (isEdit || (parentsUntil(e.target, literals.rowCell) &&\n parentsUntil(e.target, literals.rowCell).classList.contains('e-editedbatchcell')));\n };\n Grid.prototype.dblClickHandler = function (e) {\n var grid = parentsUntil(e.target, 'e-grid');\n if (isNullOrUndefined(grid) || grid.id !== this.element.id || closest(e.target, '.e-unboundcelldiv')) {\n return;\n }\n var dataRow = false;\n var tr = closest(e.target, 'tr');\n if (tr && tr.getAttribute('data-uid')) {\n var rowObj = this.getRowObjectFromUID(tr.getAttribute('data-uid'));\n dataRow = rowObj ? rowObj.isDataRow : false;\n }\n var args = this.getRowInfo(e.target);\n args.target = e.target;\n if (dataRow) {\n this.trigger(events.recordDoubleClick, args);\n }\n this.notify(events.dblclick, e);\n };\n Grid.prototype.focusOutHandler = function (e) {\n if (this.isChildGrid(e)) {\n return;\n }\n if (!parentsUntil(e.target, 'e-grid')) {\n this.element.querySelector('.e-gridpopup').style.display = 'None';\n }\n var filterClear = this.element.querySelector('.e-cancel:not(.e-hide)');\n if (filterClear && !filterClear.parentElement.classList.contains('e-tbar-btn')) {\n filterClear.classList.add('e-hide');\n }\n var relatedTarget = e.relatedTarget;\n var ariaOwns = relatedTarget ? relatedTarget.getAttribute('aria-owns') : null;\n if ((!relatedTarget || (!parentsUntil(relatedTarget, 'e-grid') &&\n (!isNullOrUndefined(ariaOwns) &&\n (ariaOwns)) !== e.target.getAttribute('aria-owns')))\n && !this.keyPress && this.isEdit && !Browser.isDevice) {\n if (this.editSettings.mode === 'Batch' && !((parentsUntil(relatedTarget, 'e-ddl') || parentsUntil(relatedTarget, 'e-ddt')) &&\n parentsUntil(relatedTarget, 'e-input-group')) && (parentsUntil(relatedTarget, 'e-uploader') || !isNullOrUndefined(parentsUntil(relatedTarget, 'e-input-group')))) {\n this.editModule.saveCell();\n this.notify(events.editNextValCell, {});\n }\n if (this.editSettings.mode === 'Normal') {\n this.editModule.editFormValidate();\n }\n }\n this.keyPress = false;\n };\n Grid.prototype.isChildGrid = function (e) {\n var gridElement = parentsUntil(e.target, 'e-grid');\n if ((gridElement && gridElement.id !== this.element.id) || (parentsUntil(e.target, 'e-unboundcelldiv') &&\n isNullOrUndefined(gridElement))) {\n return true;\n }\n return false;\n };\n /**\n * @param {Object} persistedData - Defines the persisted data\n * @returns {void}\n * @hidden\n */\n Grid.prototype.mergePersistGridData = function (persistedData) {\n var data = this.getLocalData();\n if (!(isNullOrUndefined(data) || (data === '')) || !isNullOrUndefined(persistedData)) {\n var dataObj = !isNullOrUndefined(persistedData) ? persistedData : JSON.parse(data);\n if (this.enableVirtualization && dataObj.pageSettings) {\n dataObj.pageSettings.currentPage = 1;\n }\n var keys = Object.keys(dataObj);\n this.isProtectedOnChange = true;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if ((typeof this[\"\" + key] === 'object') && !isNullOrUndefined(this[\"\" + key])) {\n if (Array.isArray(this[\"\" + key]) && key === 'columns') {\n setColumnIndex(this[\"\" + key]);\n this.mergeColumns(dataObj[\"\" + key], this[\"\" + key]);\n this[\"\" + key] = dataObj[\"\" + key];\n }\n else {\n extend(this[\"\" + key], dataObj[\"\" + key]);\n }\n }\n else {\n this[\"\" + key] = dataObj[\"\" + key];\n }\n }\n this.isProtectedOnChange = false;\n }\n };\n Grid.prototype.mergeColumns = function (storedColumn, columns) {\n var storedColumns = storedColumn;\n var _loop_2 = function (i) {\n var localCol = columns.filter(function (tCol) { return tCol.index === storedColumns[parseInt(i.toString(), 10)].index; })[0];\n if (!isNullOrUndefined(localCol)) {\n if (localCol.columns && localCol.columns.length) {\n this_2.mergeColumns(storedColumns[parseInt(i.toString(), 10)].columns, localCol.columns);\n storedColumns[parseInt(i.toString(), 10)] = extend(localCol, storedColumns[parseInt(i.toString(), 10)], {}, true);\n }\n else {\n storedColumns[parseInt(i.toString(), 10)] = extend(localCol, storedColumns[parseInt(i.toString(), 10)], {}, true);\n }\n }\n };\n var this_2 = this;\n for (var i = 0; i < storedColumns.length; i++) {\n _loop_2(i);\n }\n };\n /**\n * @hidden\n * @returns {boolean} Returns the isDetail\n */\n Grid.prototype.isDetail = function () {\n return !isNullOrUndefined(this.detailTemplate) || !isNullOrUndefined(this.childGrid);\n };\n Grid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n Grid.prototype.isForeignKeyEnabled = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isForeignKeyEnabled(col.columns);\n }\n return !!(col.dataSource && col.foreignKeyValue);\n });\n };\n Grid.prototype.keyPressHandler = function (e) {\n var presskey = extend(e, { cancel: false });\n this.trigger('keyPressed', presskey);\n if (presskey.cancel === true) {\n e.stopImmediatePropagation();\n }\n };\n Grid.prototype.keyDownHandler = function (e) {\n if (e.altKey) {\n if (e.keyCode === 74) { //alt j\n if (this.keyA) { //alt A J\n this.notify(events.groupCollapse, { target: e.target, collapse: false });\n this.keyA = false;\n }\n else {\n if (this.focusModule && this.focusModule.currentInfo && this.focusModule.currentInfo.element) {\n removeClass([this.focusModule.currentInfo.element, this.focusModule.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n this.focusModule.currentInfo.element.tabIndex = -1;\n }\n if (!this.element.classList.contains('e-childgrid')) {\n this.element.focus();\n }\n }\n }\n if (e.keyCode === 87) { //alt w\n var focusModule = this.focusModule;\n if (focusModule) {\n if (!this.currentViewData.length) {\n return;\n }\n focusModule.focusContent();\n focusModule.addOutline();\n }\n }\n if (e.keyCode === 65) { //alt A\n this.keyA = true;\n }\n if (e.keyCode === 72 && this.keyA) { //alt A H\n this.notify(events.groupCollapse, { target: e.target, collapse: true });\n this.keyA = false;\n }\n }\n if (e.keyCode === 13) {\n this.notify(events.enterKeyHandler, e);\n }\n };\n Grid.prototype.keyActionHandler = function (e) {\n if (this.isChildGrid(e) ||\n (this.isEdit && e.action !== 'escape' && e.action !== 'enter' && e.action !== 'shiftEnter'\n && e.action !== 'tab' && e.action !== 'shiftTab')) {\n return;\n }\n else {\n this.keyPress = true;\n }\n if (this.allowKeyboard) {\n if (e.action === 'ctrlPlusP') {\n e.preventDefault();\n this.print();\n }\n this.notify(events.keyPressed, e);\n }\n };\n /**\n * @param {Function[]} modules - Defines the modules\n * @returns {void}\n * @hidden\n */\n Grid.prototype.setInjectedModules = function (modules) {\n this.injectedModules = modules;\n };\n Grid.prototype.updateColumnObject = function () {\n prepareColumns(this.columns, this.enableColumnVirtualization, this);\n setColumnIndex(this.columns);\n this.initForeignColumn();\n this.notify(events.autoCol, {});\n };\n /**\n * Gets the foreign columns from Grid.\n *\n * @returns {Column[]} Returns Foreign key column\n */\n Grid.prototype.getForeignKeyColumns = function () {\n return this.getColumns().filter(function (col) {\n return col.isForeignColumn();\n });\n };\n /**\n * @hidden\n * @returns {number} Returns row height\n */\n Grid.prototype.getRowHeight = function () {\n return this.rowHeight ? this.rowHeight : getRowHeight(this.element);\n };\n /**\n * Refreshes the Grid column changes.\n *\n * @returns {void}\n */\n Grid.prototype.refreshColumns = function () {\n this.setFrozenCount();\n var fCnt = this.getContent().querySelector('.e-frozen-left-content');\n var frCnt = this.getContent().querySelector('.e-frozen-right-content');\n var isColFrozen = !this.frozenRightCount && !this.frozenLeftCount;\n var isFrozen = this.getFrozenColumns() !== 0;\n if (!isFrozen && ((!fCnt && this.frozenLeftCount) || (!frCnt && this.frozenRightCount) || (fCnt && !this.frozenLeftCount)\n || (frCnt && !this.frozenRightCount))) {\n this.tableIndex = 0;\n this.tablesCount = 1;\n if (this.enableColumnVirtualization) {\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n }\n this.freezeRefresh();\n }\n else if (isColFrozen && ((this.getFrozenColumns() === 1 && !fCnt) || (this.getFrozenColumns() === 0 && fCnt))) {\n this.tableIndex = 0;\n this.tablesCount = 1;\n if (this.enableColumnVirtualization) {\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n }\n this.freezeRefresh();\n }\n else {\n this.isPreventScrollEvent = true;\n this.updateColumnObject();\n this.checkLockColumns(this.getColumns());\n this.refresh();\n if (this.isFrozenGrid()) {\n var mTbl = this.contentModule.getMovableContent().querySelector('.' + literals.table);\n remove(mTbl.querySelector(literals.colGroup));\n var colGroup = ((this.getHeaderContent()\n .querySelector('.' + literals.movableHeader).querySelector(literals.colGroup)).cloneNode(true));\n mTbl.insertBefore(colGroup, mTbl.querySelector(literals.tbody));\n if (this.getFrozenMode() === 'Left-Right') {\n var frTbl = this.contentModule.getFrozenRightContent().querySelector('.' + literals.table);\n remove(frTbl.querySelector(literals.colGroup));\n var colGrp = ((this.getHeaderContent()\n .querySelector('.e-frozen-right-header').querySelector(literals.colGroup)).cloneNode(true));\n frTbl.insertBefore(colGrp, frTbl.querySelector(literals.tbody));\n }\n }\n }\n if (this.isFrozenGrid()) {\n var left = this.getContent().querySelector('.e-movablescrollbar').scrollLeft;\n this.headerModule.getMovableHeader().scrollLeft = left;\n this.contentModule.getMovableContent().scrollLeft = left;\n }\n };\n /**\n * Export Grid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise} Returns the excelexport\n */\n Grid.prototype.excelExport = function (excelExportProperties, isMultipleExport, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n workbook, isBlob) {\n return this.excelExportModule ?\n this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, false, isBlob) : null;\n };\n /**\n * Export Grid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise} Returns csv export\n */\n Grid.prototype.csvExport = function (excelExportProperties, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isMultipleExport, workbook, isBlob) {\n return this.excelExportModule ?\n this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, true, isBlob) : null;\n };\n /**\n * Export Grid data to PDF document.\n *\n * @param {pdfExportProperties} pdfExportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Define to enable multiple export.\n * @param {pdfDoc} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n *\n * @returns {Promise} Returns pdfexport\n */\n Grid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule ? this.pdfExportModule.Map(this, pdfExportProperties, isMultipleExport, pdfDoc, isBlob) : null;\n };\n /**\n * Groups a column by column name.\n *\n * @param {string} columnName - Defines the column name to group.\n *\n * @returns {void}\n */\n Grid.prototype.groupColumn = function (columnName) {\n if (this.groupModule) {\n this.groupModule.groupColumn(columnName);\n }\n };\n /**\n * Expands all the grouped rows of the Grid.\n *\n * @returns {void}\n */\n Grid.prototype.groupExpandAll = function () {\n if (this.groupModule) {\n this.groupModule.expandAll();\n }\n };\n /**\n * Collapses all the grouped rows of the Grid.\n *\n * @returns {void}\n */\n Grid.prototype.groupCollapseAll = function () {\n if (this.groupModule) {\n this.groupModule.collapseAll();\n }\n };\n /**\n * Expands or collapses grouped rows by target element.\n *\n * @param {Element} target - Defines the target element of the grouped row.\n * @returns {void}\n */\n // public expandCollapseRows(target: Element): void {\n // if (this.groupModule) {\n // this.groupModule.expandCollapseRows(target);\n // }\n // }\n /**\n * Clears all the grouped columns of the Grid.\n *\n * @returns {void}\n */\n Grid.prototype.clearGrouping = function () {\n if (this.groupModule) {\n this.groupModule.clearGrouping();\n }\n };\n /**\n * Ungroups a column by column name.\n *\n * {% codeBlock src='grid/ungroupColumn/index.md' %}{% endcodeBlock %}\n *\n * @param {string} columnName - Defines the column name to ungroup.\n *\n * @returns {void}\n */\n Grid.prototype.ungroupColumn = function (columnName) {\n if (this.groupModule) {\n this.groupModule.ungroupColumn(columnName);\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n *\n * @returns {void}\n */\n Grid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n Grid.prototype.scrollRefresh = function () {\n var _this = this;\n var refresh = function () {\n _this.scrollModule.refresh();\n _this.off(events.contentReady, refresh);\n };\n this.on(events.contentReady, refresh, this);\n };\n /**\n * Collapses a detail row with the given target.\n *\n * @param {Element} target - Defines the expanded element to collapse.\n * @returns {void}\n */\n // public detailCollapse(target: number | Element): void {\n // if (this.detailRowModule) {\n // this.detailRowModule.collapse(target);\n // }\n // }\n /**\n * Collapses all the detail rows of the Grid.\n *\n * @returns {void}\n */\n Grid.prototype.detailCollapseAll = function () {\n if (this.detailRowModule) {\n this.detailRowModule.collapseAll();\n }\n };\n /**\n * Expands a detail row with the given target.\n *\n * @param {Element} target - Defines the collapsed element to expand.\n * @returns {void}\n */\n // public detailExpand(target: number | Element): void {\n // if (this.detailRowModule) {\n // this.detailRowModule.expand(target);\n // }\n // }\n /**\n * Expands all the detail rows of the Grid.\n *\n * @returns {void}\n */\n Grid.prototype.detailExpandAll = function () {\n if (this.detailRowModule) {\n this.detailRowModule.expandAll();\n }\n };\n /**\n * Deselects the currently selected cells.\n *\n * @returns {void}\n */\n Grid.prototype.clearCellSelection = function () {\n if (this.selectionModule) {\n this.selectionModule.clearCellSelection();\n }\n };\n /**\n * Deselects the currently selected rows.\n *\n * @returns {void}\n */\n Grid.prototype.clearRowSelection = function () {\n if (this.selectionModule) {\n this.selectionModule.clearRowSelection();\n }\n };\n /**\n * Selects a collection of cells by row and column indexes.\n *\n * @param {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n *\n * @returns {void}\n */\n Grid.prototype.selectCells = function (rowCellIndexes) {\n if (this.selectionModule) {\n this.selectionModule.selectCells(rowCellIndexes);\n }\n };\n /**\n * Selects a range of rows from start and end row indexes.\n *\n * @param {number} startIndex - Specifies the start row index.\n * @param {number} endIndex - Specifies the end row index.\n *\n * @returns {void}\n */\n Grid.prototype.selectRowsByRange = function (startIndex, endIndex) {\n if (this.selectionModule) {\n this.selectionModule.selectRowsByRange(startIndex, endIndex);\n }\n };\n /**\n * @hidden\n * @returns {boolean} Returns whether context menu is open or not\n */\n Grid.prototype.isContextMenuOpen = function () {\n return this.contextMenuModule && this.contextMenuModule.isOpen;\n };\n /**\n * @param {Function} module - Defines the module\n * @returns {boolean} return the injected modules\n * @hidden\n */\n Grid.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n /**\n * Destroys the given template reference.\n *\n * @param {string[]} propertyNames - Defines the collection of template name.\n * @param {any} index - specifies the index\n *\n * @returns {void}\n */\n // eslint-disable-next-line\n Grid.prototype.destroyTemplate = function (propertyNames, index) {\n this.clearTemplate(propertyNames, index);\n };\n /**\n * @param {string | string[]} type - Defines the type\n * @param {Object} args - Defines the arguments\n * @returns {void}\n * @hidden\n * @private\n */\n Grid.prototype.log = function (type, args) {\n // eslint-disable-next-line\n this.loggerModule ? this.loggerModule.log(type, args) : (function () { return 0; })();\n };\n /**\n * @param {Element} element - Defines the element\n * @returns {void}\n * @hidden\n */\n Grid.prototype.applyBiggerTheme = function (element) {\n if (this.element.classList.contains('e-bigger')) {\n element.classList.add('e-bigger');\n }\n };\n /**\n * @hidden\n * @returns {Object} Returns the previous row data\n */\n Grid.prototype.getPreviousRowData = function () {\n var previousRowData = this.getRowsObject()[this.getRows().length - 1].data;\n return previousRowData;\n };\n /**\n * Hides the scrollbar placeholder of Grid content when grid content is not overflown.\n *\n * @returns {void}\n */\n Grid.prototype.hideScroll = function () {\n var content = this.getContent().querySelector('.' + literals.content);\n var scrollBar = this.getContent().querySelector('.e-scrollbar');\n if (content.scrollHeight <= content.clientHeight) {\n this.scrollModule.removePadding();\n content.style.overflowY = 'auto';\n }\n if (this.isFrozenGrid() && scrollBar) {\n var mvblScrollBar = this.getContent().querySelector('.e-movablescrollbar');\n var mvblChild = this.getContent().querySelector('.e-movablechild');\n scrollBar.style.display = 'flex';\n if (mvblScrollBar.offsetWidth >= mvblChild.offsetWidth) {\n scrollBar.style.display = 'none';\n this.notify(events.frozenHeight, 0);\n }\n }\n };\n /**\n * Get row index by primary key or row data.\n *\n * @param {string | Object} value - Defines the primary key value.\n *\n * @returns {number} Returns the index\n */\n Grid.prototype.getRowIndexByPrimaryKey = function (value) {\n var pkName = this.getPrimaryKeyFieldNames()[0];\n value = typeof value === 'object' ? value[\"\" + pkName] : value;\n var rows = this.getRowsObject();\n for (var i = 0; i < rows.length; i++) {\n if (rows[parseInt(i.toString(), 10)].isDetailRow || rows[parseInt(i.toString(), 10)].isCaptionRow) {\n continue;\n }\n var pKvalue = rows[parseInt(i.toString(), 10)].data[\"\" + pkName];\n if (pkName.split('.').length > 1) {\n pKvalue = performComplexDataOperation(pkName, rows[parseInt(i.toString(), 10)].data);\n }\n if (pKvalue === value) {\n return rows[parseInt(i.toString(), 10)].index;\n }\n }\n return -1;\n };\n /**\n * @param {string} field - Defines the field name\n * @returns {Column} returns the column\n * @hidden\n */\n // Need to have all columns while filtering with ColumnVirtualization.\n Grid.prototype.grabColumnByFieldFromAllCols = function (field) {\n var column;\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n var gCols = this.columnModel;\n for (var i = 0; i < gCols.length; i++) {\n if (field === gCols[parseInt(i.toString(), 10)].field || (gCols[parseInt(i.toString(), 10)].isForeignColumn() &&\n field === gCols[parseInt(i.toString(), 10)].foreignKeyValue)) {\n column = gCols[parseInt(i.toString(), 10)];\n }\n }\n return column;\n };\n /**\n * @param {string} uid - Defines the uid\n * @returns {Column} returns the column\n * @hidden\n */\n // Need to have all columns while filtering with ColumnVirtualization.\n Grid.prototype.grabColumnByUidFromAllCols = function (uid) {\n var column;\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n var gCols = this.columnModel;\n for (var i = 0; i < gCols.length; i++) {\n if (uid === gCols[parseInt(i.toString(), 10)].uid) {\n column = gCols[parseInt(i.toString(), 10)];\n }\n }\n return column;\n };\n /**\n * Get all filtered records from the Grid and it returns array of objects for the local dataSource, returns a promise object if the Grid has remote data.\n *\n * @returns {Object[] | Promise} Returns the filtered records\n */\n Grid.prototype.getFilteredRecords = function () {\n if (this.allowFiltering && this.filterSettings.columns.length) {\n var query = this.renderModule.data.generateQuery(true);\n if (this.dataSource && this.renderModule.data.isRemote() && this.dataSource instanceof DataManager) {\n return this.renderModule.data.getData(this.dataSource, query);\n }\n else {\n if (this.dataSource instanceof DataManager) {\n return this.dataSource.executeLocal(query);\n }\n else {\n return new DataManager(this.dataSource, query).executeLocal(query);\n }\n }\n }\n return [];\n };\n Grid.prototype.getUserAgent = function () {\n var userAgent = Browser.userAgent.toLowerCase();\n return /iphone|ipod|ipad|macintosh/.test(userAgent);\n };\n /**\n * @param {TouchEventArgs} e - Defines the TouchEventArgs\n * @returns {void}\n * @hidden\n */\n // Need to have all columns while filtering with ColumnVirtualization.\n // eslint-disable-next-line\n Grid.prototype.tapEvent = function (e) {\n if (this.getUserAgent()) {\n if (!Global.timer) {\n Global.timer = setTimeout(function () {\n Global.timer = null;\n }, 300);\n }\n else {\n clearTimeout(Global.timer);\n Global.timer = null;\n this.dblClickHandler(e);\n this.notify(events.doubleTap, e);\n }\n }\n };\n /**\n * @param {string} prefix - specifies the prefix\n * @returns {string} returns the row uid\n * @hidden\n */\n Grid.prototype.getRowUid = function (prefix) {\n return \"\" + prefix + this.rowUid++;\n };\n /**\n * @hidden\n * @returns {Element} returns the element\n */\n Grid.prototype.getMovableVirtualContent = function () {\n return this.getContent().querySelector('.' + literals.movableContent);\n };\n /**\n * @hidden\n * @returns {Element} returns the element\n */\n Grid.prototype.getFrozenVirtualContent = function () {\n return this.getContent().querySelector('.' + literals.frozenContent);\n };\n /**\n * @hidden\n * @returns {Element} returns the element\n */\n Grid.prototype.getMovableVirtualHeader = function () {\n return this.getHeaderContent().querySelector('.' + literals.movableHeader);\n };\n /**\n * @hidden\n * @returns {Element} returns the element\n */\n Grid.prototype.getFrozenVirtualHeader = function () {\n return this.getHeaderContent().querySelector('.' + literals.frozenHeader);\n };\n /**\n * @param {string} uid - specifies the uid\n * @returns {Element} returns the element\n * @hidden\n */\n Grid.prototype.getRowElementByUID = function (uid) {\n var rowEle;\n var rows = [];\n if (this.isFrozenGrid()) {\n var fRows = [].slice.call(this.getFrozenVirtualContent().querySelector(literals.tbody).children);\n var mRows = [].slice.call(this.getMovableVirtualContent().querySelector(literals.tbody).children);\n var frozenRigtRows = [];\n if (this.tablesCount === 3) {\n frozenRigtRows = [].slice.call(this.getContent().querySelector('.e-frozen-right-content').querySelector(literals.tbody).children);\n }\n if (this.frozenRows) {\n rows = [].slice.call(this.getFrozenVirtualHeader().querySelector(literals.tbody).children);\n rows = rows.concat([].slice.call(this.getMovableVirtualHeader().querySelector(literals.tbody).children));\n if (this.tablesCount === 3) {\n var frHdr = this.getHeaderContent().querySelector('.e-frozen-right-header');\n rows = rows.concat([].slice.call(frHdr.querySelector(literals.tbody).children)).concat(frozenRigtRows);\n }\n rows = rows.concat(fRows).concat(mRows);\n }\n else {\n rows = fRows.concat(mRows).concat(frozenRigtRows);\n }\n }\n else {\n var cntRows = [].slice.call(this.getContent().querySelector(literals.tbody).children);\n if (this.frozenRows) {\n rows = [].slice.call(this.getHeaderContent().querySelector(literals.tbody).children);\n rows = rows.concat(cntRows);\n }\n else {\n rows = cntRows;\n }\n }\n for (var _i = 0, rows_2 = rows; _i < rows_2.length; _i++) {\n var row = rows_2[_i];\n if (row.getAttribute('data-uid') === uid) {\n rowEle = row;\n break;\n }\n }\n return rowEle;\n };\n /**\n * Gets the hidden columns from the Grid.\n *\n * @returns {Column[]} Returns the Column\n */\n Grid.prototype.getHiddenColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible === false) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * Calculates the page size by parent element height\n *\n * @param {number | string } containerHeight - specifies the container height\n * @returns {number} returns the page size\n */\n Grid.prototype.calculatePageSizeByParentHeight = function (containerHeight) {\n if (this.allowPaging) {\n if ((this.allowTextWrap && this.textWrapSettings.wrapMode === 'Header') || (!this.allowTextWrap)) {\n var pagesize = 0;\n if (containerHeight.indexOf('%') !== -1) {\n containerHeight = parseInt(containerHeight, 10) / 100 * this.element.clientHeight;\n }\n var nonContentHeight = this.getNoncontentHeight() + this.getRowHeight();\n if (containerHeight > nonContentHeight) {\n var contentHeight = 0;\n contentHeight = containerHeight - this.getNoncontentHeight();\n pagesize = (contentHeight / this.getRowHeight());\n }\n if (pagesize > 0) {\n return Math.floor(pagesize);\n }\n }\n }\n return 0;\n };\n Grid.prototype.getNoncontentHeight = function () {\n var height = 0;\n if (!isNullOrUndefined(this.getHeaderContent().clientHeight)) {\n height += this.getHeaderContent().clientHeight;\n }\n if (this.toolbar && !isNullOrUndefined(this.element.querySelector('.e-toolbar').clientHeight)) {\n height += this.element.querySelector('.e-toolbar').clientHeight;\n }\n if (this.allowPaging && !isNullOrUndefined(this.element.querySelector('.e-gridpager').clientHeight)) {\n height += this.element.querySelector('.e-gridpager').clientHeight;\n }\n if (this.showColumnChooser && !isNullOrUndefined(this.element.querySelector('.e-columnheader').clientHeight)) {\n height += this.element.querySelector('.e-columnheader').clientHeight;\n }\n if (this.allowGrouping && this.groupSettings.showDropArea && !isNullOrUndefined(this.element.querySelector('.e-groupdroparea').clientHeight)) {\n height += this.element.querySelector('.e-groupdroparea').clientHeight;\n }\n if (this.aggregates.length > 0 && !isNullOrUndefined(this.element.querySelector('.e-summaryrow').clientHeight)) {\n for (var i = 0; i < this.element.getElementsByClassName('e-summaryrow').length; i++) {\n height += this.element.getElementsByClassName('e-summaryrow')[parseInt(i.toString(), 10)].clientHeight;\n }\n }\n return height;\n };\n /**\n *To perform aggregate operation on a column.\n *\n * @param {AggregateColumnModel} summaryCol - Pass Aggregate Column details.\n * @param {Object} summaryData - Pass JSON Array for which its field values to be calculated.\n *\n * @returns {number} returns the summary values\n */\n Grid.prototype.getSummaryValues = function (summaryCol, summaryData) {\n return DataUtil.aggregates[summaryCol.type.toLowerCase()](summaryData, summaryCol.field);\n };\n /**\n * Sends a Post request to export Grid to Excel file in server side.\n *\n * @param {string} url - Pass Url for server side excel export action.\n *\n * @returns {void}\n */\n Grid.prototype.serverExcelExport = function (url) {\n this.isExcel = true;\n this.exportGrid(url);\n };\n /**\n * Sends a Post request to export Grid to Pdf file in server side.\n *\n * @param {string} url - Pass Url for server side pdf export action.\n *\n * @returns {void}\n */\n Grid.prototype.serverPdfExport = function (url) {\n this.isExcel = false;\n this.exportGrid(url);\n };\n /**\n * Sends a Post request to export Grid to CSV file in server side.\n *\n * @param {string} url - Pass Url for server side pdf export action.\n *\n * @returns {void}\n */\n Grid.prototype.serverCsvExport = function (url) {\n this.isExcel = true;\n this.exportGrid(url);\n };\n /**\n * @param {string} url - Defines exporting url\n * @returns {void}\n * @hidden\n */\n Grid.prototype.exportGrid = function (url) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var grid = this;\n var query = grid.getDataModule().generateQuery(true);\n var state = new UrlAdaptor().processQuery(new DataManager({ url: '' }), query);\n var queries = JSON.parse(state.data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var gridModel = JSON.parse(this.addOnPersist(['allowGrouping', 'allowPaging', 'pageSettings', 'sortSettings', 'allowPdfExport', 'allowExcelExport', 'aggregates',\n 'filterSettings', 'groupSettings', 'columns', 'locale', 'searchSettings']));\n var include = ['field', 'headerText', 'type', 'format', 'visible', 'foreignKeyValue', 'foreignKeyField',\n 'template', 'index', 'width', 'textAlign', 'headerTextAlign', 'columns'];\n gridModel.filterSettings.columns = queries.where;\n gridModel.searchSettings.fields = queries.search && queries.search[0]['fields'] || [];\n gridModel.sortSettings.columns = queries.sorted;\n gridModel.columns = this.setHeaderText(gridModel.columns, include);\n var form = this.createElement('form', { id: 'ExportForm', styles: 'display:none;' });\n var gridInput = this.createElement('input', { id: 'gridInput', attrs: { name: 'gridModel' } });\n gridInput.value = JSON.stringify(gridModel);\n form.method = 'POST';\n form.action = url;\n form.appendChild(gridInput);\n document.body.appendChild(form);\n form.submit();\n form.remove();\n };\n /**\n * @param {Column[]} columns - Defines array of columns\n * @param {string[]} include - Defines array of sting\n * @returns {Column[]} returns array of columns\n * @hidden\n */\n Grid.prototype.setHeaderText = function (columns, include) {\n for (var i = 0; i < columns.length; i++) {\n var column = this.getColumnByUid(columns[parseInt(i.toString(), 10)].uid);\n columns[parseInt(i.toString(), 10)].headerText = column.headerText;\n if (!isNullOrUndefined(column.template)) {\n columns[parseInt(i.toString(), 10)].template = 'true';\n }\n if (columns[parseInt(i.toString(), 10)].format) {\n columns[parseInt(i.toString(), 10)].format = getNumberFormat(this.getFormat(columns[parseInt(i.toString(), 10)].format), columns[parseInt(i.toString(), 10)].type, this.isExcel, this.currencyCode);\n }\n if (columns[parseInt(i.toString(), 10)].columns) {\n this.setHeaderText(columns[parseInt(i.toString(), 10)].columns, include);\n }\n var keys = Object.keys(columns[parseInt(i.toString(), 10)]);\n for (var j = 0; j < keys.length; j++) {\n if (include.indexOf(keys[parseInt(j.toString(), 10)]) < 0) {\n delete columns[parseInt(i.toString(), 10)][keys[parseInt(j.toString(), 10)]];\n }\n }\n }\n return columns;\n };\n Grid.prototype.getFormat = function (format) {\n return typeof (format) === 'object' ? !isNullOrUndefined(format.format) ?\n format.format : format.skeleton : format;\n };\n /**\n * @hidden\n * @returns {boolean} returns the isCollapseStateEnabled\n */\n Grid.prototype.isCollapseStateEnabled = function () {\n var isExpanded = 'isExpanded';\n return this[\"\" + isExpanded] === false;\n };\n /**\n * @param {number} key - Defines the primary key value.\n * @param {Object} rowData - Defines the rowData\n * @returns {void}\n */\n Grid.prototype.updateRowValue = function (key, rowData) {\n var args = {\n requestType: 'save', data: rowData\n };\n this.showSpinner();\n this.notify(events.updateData, args);\n this.refresh();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.setForeignKeyData = function () {\n this.dataBind();\n var colpending = this.getDataModule().getForeignKeyDataState();\n if (colpending.isPending) {\n this.getDataModule().setForeignKeyDataState({});\n colpending.resolver();\n }\n else {\n this.getDataModule().setForeignKeyDataState({ isDataChanged: false });\n if (this.contentModule || this.headerModule) {\n this.renderModule.render();\n }\n }\n };\n /**\n * @param {string} field - specifies the field\n * @returns {void}\n * @hidden\n */\n Grid.prototype.resetFilterDlgPosition = function (field) {\n var header = this.getColumnHeaderByField(field);\n if (header) {\n var target = header.querySelector('.e-filtermenudiv');\n var filterDlg = this.element.querySelector('.e-filter-popup');\n if (target && filterDlg) {\n var gClient = this.element.getBoundingClientRect();\n var fClient = target.getBoundingClientRect();\n if (filterDlg) {\n if ((filterDlg.offsetWidth + fClient.right) > gClient.right) {\n filterDlg.style.left = ((fClient.right - filterDlg.offsetWidth) - gClient.left).toString() + 'px';\n }\n else {\n filterDlg.style.left = (fClient.right - gClient.left).toString() + 'px';\n }\n }\n }\n }\n };\n /**\n * @param {any} callBack - specifies the callBack method\n * @returns {void}\n * @hidden\n */\n // eslint-disable-next-line\n Grid.prototype.renderTemplates = function (callBack) {\n var isReactChild = this.parentDetails && this.parentDetails.parentInstObj && this.parentDetails.parentInstObj.isReact;\n if (isReactChild && this['portals']) {\n this.parentDetails.parentInstObj['portals'] = this.parentDetails.parentInstObj['portals']\n .concat(this['portals']);\n this.parentDetails.parentInstObj.renderTemplates(callBack);\n this['portals'] = undefined;\n }\n else {\n var portals = 'portals';\n this.notify('reactTemplateRender', this[\"\" + portals]);\n this.renderReactTemplates(callBack);\n }\n };\n /**\n * Apply the changes to the Grid without refreshing the rows.\n *\n * @param {BatchChanges} changes - Defines changes to be updated.\n * @returns {void}\n */\n Grid.prototype.batchUpdate = function (changes) {\n this.processRowChanges(changes);\n };\n /**\n * Apply the changes to the Grid in one batch after 50ms without refreshing the rows.\n *\n * @param {BatchChanges} changes - Defines changes to be updated.\n * @returns {void}\n */\n Grid.prototype.batchAsyncUpdate = function (changes) {\n this.processBulkRowChanges(changes);\n };\n Grid.prototype.processBulkRowChanges = function (changes) {\n var _this = this;\n if (!this.dataToBeUpdated) {\n this.dataToBeUpdated = Object.assign({ addedRecords: [], changedRecords: [], deletedRecords: [] }, changes);\n setTimeout(function () {\n _this.processRowChanges(_this.dataToBeUpdated);\n _this.dataToBeUpdated = null;\n }, this.asyncTimeOut);\n }\n else {\n var loopstring = [literals.addedRecords, literals.changedRecords, literals.deletedRecords];\n var keyField = this.getPrimaryKeyFieldNames()[0];\n for (var i = 0; i < loopstring.length; i++) {\n if (changes[loopstring[parseInt(i.toString(), 10)]]) {\n compareChanges(this, changes, loopstring[parseInt(i.toString(), 10)], keyField);\n }\n }\n }\n };\n Grid.prototype.processRowChanges = function (changes) {\n var _this = this;\n var keyField = this.getPrimaryKeyFieldNames()[0];\n changes = Object.assign({ addedRecords: [], changedRecords: [], deletedRecords: [] }, changes);\n var promise = this.getDataModule().saveChanges(changes, keyField, {}, this.getDataModule().generateQuery().requiresCount());\n if (this.getDataModule().isRemote()) {\n promise.then(function () {\n _this.setNewData();\n });\n }\n else {\n this.setNewData();\n }\n };\n Grid.prototype.setNewData = function () {\n var _this = this;\n var oldValues = JSON.parse(JSON.stringify(this.getCurrentViewRecords()));\n var getData = this.getDataModule().getData({}, this.getDataModule().generateQuery().requiresCount());\n getData.then(function (e) {\n _this.bulkRefresh(e.result, oldValues, e.count);\n });\n };\n Grid.prototype.deleteRowElement = function (row) {\n var tr = this.getRowElementByUID(row.uid);\n var index = parseInt(tr.getAttribute(literals.dataRowIndex), 10);\n remove(tr);\n if (this.getFrozenColumns()) {\n var mtr = this.getMovableRows()[parseInt(index.toString(), 10)];\n remove(mtr);\n }\n };\n Grid.prototype.bulkRefresh = function (result, oldValues, count) {\n var _this = this;\n var rowObj = this.getRowsObject();\n var keyField = this.getPrimaryKeyFieldNames()[0];\n var _loop_3 = function (i) {\n if (!result.filter(function (e) { return e[\"\" + keyField] === rowObj[parseInt(i.toString(), 10)].data[\"\" + keyField]; }).length) {\n this_3.deleteRowElement(rowObj[parseInt(i.toString(), 10)]);\n rowObj.splice(i, 1);\n i--;\n }\n out_i_1 = i;\n };\n var this_3 = this, out_i_1;\n for (var i = 0; i < rowObj.length; i++) {\n _loop_3(i);\n i = out_i_1;\n }\n var _loop_4 = function (i) {\n var isRowExist;\n oldValues.filter(function (e) {\n if (e[\"\" + keyField] === result[parseInt(i.toString(), 10)][\"\" + keyField]) {\n if (e !== result[parseInt(i.toString(), 10)]) {\n _this.setRowData(result[parseInt(i.toString(), 10)][\"\" + keyField], result[parseInt(i.toString(), 10)]);\n }\n isRowExist = true;\n }\n });\n if (!isRowExist) {\n this_4.renderRowElement(result[parseInt(i.toString(), 10)], i);\n }\n };\n var this_4 = this;\n for (var i = 0; i < result.length; i++) {\n _loop_4(i);\n }\n this.currentViewData = result;\n var rows = [].slice.call(this.getContentTable().getElementsByClassName(literals.row));\n resetRowIndex(this, this.getRowsObject(), rows);\n setRowElements(this);\n if (this.allowPaging) {\n this.notify(events.inBoundModelChanged, { module: 'pager', properties: { totalRecordsCount: count } });\n }\n };\n Grid.prototype.renderRowElement = function (data, index) {\n var row = new RowRenderer(this.serviceLocator, null, this);\n var model = new RowModelGenerator(this);\n var modelData = model.generateRows([data]);\n var tr = row.render(modelData[0], this.getColumns());\n var mTr;\n var mTbody;\n this.addRowObject(modelData[0], index);\n var tbody = this.getContentTable().querySelector(literals.tbody);\n if (tbody.querySelector('.e-emptyrow')) {\n var emptyRow = tbody.querySelector('.e-emptyrow');\n emptyRow.parentNode.removeChild(emptyRow);\n if (this.getFrozenColumns()) {\n var moveTbody = this.getContent().querySelector('.' + literals.movableContent).querySelector(literals.tbody);\n (moveTbody.firstElementChild).parentNode.removeChild(moveTbody.firstElementChild);\n }\n }\n if (this.getFrozenColumns()) {\n mTr = renderMovable(tr, this.getFrozenColumns(), this);\n if (this.frozenRows && index < this.frozenRows) {\n mTbody = this.getHeaderContent().querySelector('.' + literals.movableHeader).querySelector(literals.tbody);\n }\n else {\n mTbody = this.getContent().querySelector('.' + literals.movableContent).querySelector(literals.tbody);\n }\n mTbody.appendChild(mTr);\n if (this.height === 'auto') {\n this.notify(events.frozenHeight, {});\n }\n }\n if (this.frozenRows && index < this.frozenRows) {\n tbody = this.getHeaderContent().querySelector(literals.tbody);\n }\n else {\n tbody = this.getContent().querySelector(literals.tbody);\n }\n tbody = this.getContent().querySelector(literals.tbody);\n tbody.appendChild(tr);\n };\n Grid.prototype.addRowObject = function (row, index) {\n var frzCols = this.getFrozenColumns();\n if (frzCols) {\n var mRows = this.getMovableRowsObject();\n var mRow = row.clone();\n mRow.cells = mRow.cells.slice(frzCols);\n row.cells = row.cells.slice(0, frzCols);\n mRows.splice(index, 1, mRow);\n }\n this.getRowsObject().splice(index, 1, row);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.updateVisibleExpandCollapseRows = function () {\n var rows = this.getRowsObject();\n for (var i = 0, len = rows.length; i < len; i++) {\n if ((rows[parseInt(i.toString(), 10)].isDataRow || rows[parseInt(i.toString(), 10)].isAggregateRow)\n && this.getRowElementByUID(rows[parseInt(i.toString(), 10)].uid).style.display === 'none') {\n rows[parseInt(i.toString(), 10)].visible = false;\n }\n else {\n rows[parseInt(i.toString(), 10)].visible = true;\n }\n }\n };\n /**\n * Method to sanitize any suspected untrusted strings and scripts before rendering them.\n *\n * @param {string} value - Specifies the html value to sanitize\n * @returns {string} Returns the sanitized html string\n * @hidden\n */\n Grid.prototype.sanitize = function (value) {\n if (this.enableHtmlSanitizer) {\n return SanitizeHtmlHelper.sanitize(value);\n }\n return value;\n };\n /**\n * @param {string | number} height - specifies the height\n * @returns {number | string} - specifies the height number\n * @hidden\n */\n Grid.prototype.getHeight = function (height) {\n if (!Number.isInteger(height) && height.indexOf('%') !== -1) {\n height = parseInt(height, 10) / 100 * this.element.clientHeight;\n }\n else if (!Number.isInteger(height) && this.height !== 'auto') {\n height = parseInt(height, 10);\n }\n else {\n height = this.height;\n }\n return height;\n };\n /**\n * @hidden\n * @returns {Element} - returns frozen right content\n */\n Grid.prototype.getFrozenRightContent = function () {\n return this.getContent().querySelector('.e-frozen-right-content');\n };\n /**\n * @hidden\n * @returns {Element} - returns frozen right header\n */\n Grid.prototype.getFrozenRightHeader = function () {\n return this.getHeaderContent().querySelector('.e-frozen-right-header');\n };\n /**\n * @hidden\n * @returns {Element} - returns movable header tbody\n */\n Grid.prototype.getMovableHeaderTbody = function () {\n return this.getMovableVirtualHeader().querySelector(literals.tbody);\n };\n /**\n * @hidden\n * @returns {Element} - returns movable content tbody\n */\n Grid.prototype.getMovableContentTbody = function () {\n return this.getMovableVirtualContent().querySelector(literals.tbody);\n };\n /**\n * @hidden\n * @returns {Element} - returns frozen header tbody\n */\n Grid.prototype.getFrozenHeaderTbody = function () {\n return this.getFrozenVirtualHeader().querySelector(literals.tbody);\n };\n /**\n * @hidden\n * @returns {Element} - returns frozen left content tbody\n */\n Grid.prototype.getFrozenLeftContentTbody = function () {\n return this.getFrozenVirtualContent().querySelector(literals.tbody);\n };\n /**\n * @hidden\n * @returns {Element} - returns frozen right header tbody\n */\n Grid.prototype.getFrozenRightHeaderTbody = function () {\n return this.getFrozenRightHeader().querySelector(literals.tbody);\n };\n /**\n * @returns {Element} returns frozen right content tbody\n * @hidden\n */\n Grid.prototype.getFrozenRightContentTbody = function () {\n var cnt = this.getFrozenRightContent();\n var tbody;\n if (cnt) {\n tbody = this.getFrozenRightContent().querySelector(literals.tbody);\n }\n return tbody;\n };\n /**\n * @param {boolean} isCustom - Defines custom filter dialog open\n * @returns {void}\n * @hidden\n */\n Grid.prototype.showResponsiveCustomFilter = function (isCustom) {\n if (this.filterModule) {\n this.filterModule.showCustomFilter(isCustom || this.rowRenderingMode === 'Vertical');\n }\n };\n /**\n * @param {boolean} isCustom - Defines custom sort dialog open\n * @returns {void}\n * @hidden\n */\n Grid.prototype.showResponsiveCustomSort = function (isCustom) {\n if (this.sortModule) {\n this.sortModule.showCustomSort(isCustom || this.rowRenderingMode === 'Vertical');\n }\n };\n /**\n * To manually show the vertical row mode filter dialog\n *\n * @returns {void}\n */\n Grid.prototype.showAdaptiveFilterDialog = function () {\n if (this.enableAdaptiveUI) {\n this.showResponsiveCustomFilter(true);\n }\n };\n /**\n * To manually show the vertical row sort filter dialog\n *\n * @returns {void}\n */\n Grid.prototype.showAdaptiveSortDialog = function () {\n if (this.enableAdaptiveUI) {\n this.showResponsiveCustomSort(true);\n }\n };\n /**\n * @param {boolean} isColVirtualization - Defines column virtualization\n * @returns {Column[]} returns array of column models\n * @hidden\n */\n Grid.prototype.getCurrentVisibleColumns = function (isColVirtualization) {\n var cols = [];\n var gridCols = isColVirtualization ? this.getColumns() : this.columnModel;\n for (var _i = 0, gridCols_1 = gridCols; _i < gridCols_1.length; _i++) {\n var col = gridCols_1[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n Grid.prototype.enableInfiniteAggrgate = function () {\n if (this.enableInfiniteScrolling && this.groupSettings.columns.length && !this.groupSettings.disablePageWiseAggregates\n && !this.groupSettings.enableLazyLoading) {\n this.setProperties({ groupSettings: { disablePageWiseAggregates: true } }, true);\n }\n };\n var Grid_1;\n __decorate([\n Property([])\n ], Grid.prototype, \"currentViewData\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"parentDetails\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"showHider\", void 0);\n __decorate([\n Property([])\n ], Grid.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableStickyHeader\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], Grid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Complex({}, ResizeSettings)\n ], Grid.prototype, \"resizeSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowPaging\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], Grid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, LoadingIndicator)\n ], Grid.prototype, \"loadingIndicator\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableVirtualMaskRow\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], Grid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property('Ellipsis')\n ], Grid.prototype, \"clipMode\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], Grid.prototype, \"sortSettings\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], Grid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowSelection\", void 0);\n __decorate([\n Property(-1)\n ], Grid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], Grid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property('Horizontal')\n ], Grid.prototype, \"rowRenderingMode\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], Grid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], Grid.prototype, \"filterSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowGrouping\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"autoFit\", void 0);\n __decorate([\n Complex({}, GroupSettings)\n ], Grid.prototype, \"groupSettings\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], Grid.prototype, \"editSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], Grid.prototype, \"aggregates\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Complex({}, ColumnChooserSettings)\n ], Grid.prototype, \"columnChooserSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableHeaderFocus\", void 0);\n __decorate([\n Property('auto')\n ], Grid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Grid.prototype, \"width\", void 0);\n __decorate([\n Property('Default')\n ], Grid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"childGrid\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"queryString\", void 0);\n __decorate([\n Property('AllPages')\n ], Grid.prototype, \"printMode\", void 0);\n __decorate([\n Property('Expanded')\n ], Grid.prototype, \"hierarchyPrintMode\", void 0);\n __decorate([\n Property([])\n ], Grid.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], Grid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"query\", void 0);\n __decorate([\n Property('USD')\n ], Grid.prototype, \"currencyCode\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(0)\n ], Grid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], Grid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('')\n ], Grid.prototype, \"cssClass\", void 0);\n __decorate([\n Property('All')\n ], Grid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Property({})\n ], Grid.prototype, \"currentAction\", void 0);\n __decorate([\n Property('22.2.12')\n ], Grid.prototype, \"ej2StatePersistenceVersion\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"recordClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfAggregateQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelAggregateQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"exportDetailDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeOpenColumnChooser\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeOpenAdaptiveDialog\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"commandClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"keyPressed\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"checkBoxChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeAutoFill\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDataStateChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"exportGroupCaption\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"lazyLoadGroupExpand\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"lazyLoadGroupCollapse\", void 0);\n Grid = Grid_1 = __decorate([\n NotifyPropertyChanges\n ], Grid);\n return Grid;\n}(Component));\nexport { Grid };\n","import { print as printWindow, createElement, detach, classList, selectAll, extend } from '@syncfusion/ej2-base';\nimport { getPrintGridModel } from '../base/util';\nimport { Grid } from '../base/grid';\nimport * as events from '../base/constant';\nimport { Deferred } from '@syncfusion/ej2-data';\nimport * as literals from '../base/string-literals';\n/**\n * @returns {string[]} returns the cloned property\n * @hidden\n */\nexport function getCloneProperties() {\n return ['aggregates', 'allowGrouping', 'allowFiltering', 'allowMultiSorting', 'allowReordering', 'allowSorting',\n 'allowTextWrap', 'childGrid', 'columns', 'currentViewData', 'dataSource', 'detailTemplate', 'enableAltRow',\n 'enableColumnVirtualization', 'filterSettings', 'gridLines',\n 'groupSettings', 'height', 'locale', 'pageSettings', 'printMode', 'query', 'queryString', 'enableRtl',\n 'rowHeight', 'rowTemplate', 'sortSettings', 'textWrapSettings', 'allowPaging', 'hierarchyPrintMode', 'searchSettings',\n 'queryCellInfo', 'beforeDataBound'];\n}\n/**\n *\n * The `Print` module is used to handle print action.\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for the Grid print module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {Scroll} scrollModule - specifies the scroll module\n * @hidden\n */\n function Print(parent, scrollModule) {\n this.isAsyncPrint = false;\n this.defered = new Deferred();\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.isContentReady(), this);\n this.actionBeginFunction = this.actionBegin.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.on(events.onEmpty, this.onEmpty.bind(this));\n this.parent.on(events.hierarchyPrint, this.hierarchyPrint, this);\n this.scrollModule = scrollModule;\n }\n Print.prototype.isContentReady = function () {\n var _this = this;\n if (this.isPrintGrid() && (this.parent.hierarchyPrintMode === 'None' || !this.parent.childGrid)) {\n return this.contentReady;\n }\n return function () {\n _this.defered.promise.then(function () {\n _this.contentReady();\n });\n if (_this.isPrintGrid()) {\n _this.hierarchyPrint();\n }\n };\n };\n Print.prototype.hierarchyPrint = function () {\n this.removeColGroup(this.parent);\n var printGridObj = window.printGridObj;\n if (printGridObj && !printGridObj.element.querySelector('[aria-busy=true')) {\n printGridObj.printModule.defered.resolve();\n }\n };\n /**\n * By default, prints all the Grid pages and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./printmode/).\n *\n * @returns {void}\n */\n Print.prototype.print = function () {\n this.renderPrintGrid();\n };\n Print.prototype.onEmpty = function () {\n if (this.isPrintGrid()) {\n this.contentReady();\n }\n };\n Print.prototype.actionBegin = function () {\n if (this.isPrintGrid()) {\n this.isAsyncPrint = true;\n }\n };\n Print.prototype.renderPrintGrid = function () {\n var gObj = this.parent;\n var element = createElement('div', {\n id: this.parent.element.id + '_print', className: gObj.element.className + ' e-print-grid'\n });\n element.classList.remove('e-gridhover');\n document.body.appendChild(element);\n var printGrid = new Grid(getPrintGridModel(gObj, gObj.hierarchyPrintMode));\n for (var i = 0; i < printGrid.columns.length; i++) {\n printGrid.columns[parseInt(i.toString(), 10)] = extend({}, printGrid.columns[parseInt(i.toString(), 10)]);\n if (gObj.isFrozenGrid() && !gObj.getFrozenColumns()) {\n printGrid.columns[parseInt(i.toString(), 10)].freeze = undefined;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.parent.isAngular) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n printGrid.viewContainerRef = this.parent.viewContainerRef;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n printGrid.load = function () { };\n printGrid.query = gObj.getQuery().clone();\n window.printGridObj = printGrid;\n printGrid.isPrinting = true;\n var modules = printGrid.getInjectedModules();\n var injectedModues = gObj.getInjectedModules();\n if (!modules || modules.length !== injectedModues.length) {\n printGrid.setInjectedModules(injectedModues);\n }\n gObj.notify(events.printGridInit, { element: element, printgrid: printGrid });\n this.parent.log('exporting_begin', this.getModuleName());\n printGrid.registeredTemplate = this.parent.registeredTemplate;\n printGrid.isVue = this.parent.isVue;\n printGrid.appendTo(element);\n if (!gObj.isVue3) {\n printGrid.trigger = gObj.trigger;\n }\n };\n Print.prototype.contentReady = function () {\n if (this.isPrintGrid()) {\n var gObj = this.parent;\n if (this.isAsyncPrint) {\n this.printGrid();\n return;\n }\n var args = {\n requestType: 'print',\n element: gObj.element,\n selectedRows: gObj.getContentTable().querySelectorAll('tr[aria-selected=\"true\"]'),\n cancel: false,\n hierarchyPrintMode: gObj.hierarchyPrintMode\n };\n if (!this.isAsyncPrint) {\n gObj.trigger(events.beforePrint, args);\n }\n if (args.cancel) {\n detach(gObj.element);\n return;\n }\n if (!this.isAsyncPrint) {\n this.printGrid();\n }\n }\n };\n Print.prototype.printGrid = function () {\n var gObj = this.parent;\n // Height adjustment on print grid\n if (gObj.height !== 'auto') { // if scroller enabled\n var cssProps = this.scrollModule.getCssProperties();\n var contentDiv = gObj.element.querySelector('.' + literals.content);\n var headerDiv = gObj.element.querySelector('.' + literals.gridHeader);\n contentDiv.style.height = 'auto';\n contentDiv.style.overflowY = 'auto';\n headerDiv.style[cssProps.padding] = '';\n headerDiv.firstElementChild.style[cssProps.border] = '';\n }\n // Grid alignment adjustment on grouping\n if (gObj.allowGrouping) {\n if (!gObj.groupSettings.columns.length) {\n gObj.element.querySelector('.e-groupdroparea').style.display = 'none';\n }\n else {\n this.removeColGroup(gObj);\n }\n }\n // hide horizontal scroll\n for (var _i = 0, _a = [].slice.call(gObj.element.getElementsByClassName(literals.content)); _i < _a.length; _i++) {\n var element = _a[_i];\n element.style.overflowX = 'hidden';\n }\n // Hide the waiting popup\n var waitingPop = [].slice.call(gObj.element.getElementsByClassName('e-spin-show'));\n for (var _b = 0, _c = [].slice.call(waitingPop); _b < _c.length; _b++) {\n var element = _c[_b];\n classList(element, ['e-spin-hide'], ['e-spin-show']);\n }\n this.printGridElement(gObj);\n gObj.isPrinting = false;\n delete window.printGridObj;\n var args = {\n element: gObj.element\n };\n gObj.trigger(events.printComplete, args);\n gObj.destroy();\n this.parent.log('exporting_complete', this.getModuleName());\n };\n Print.prototype.printGridElement = function (gObj) {\n classList(gObj.element, ['e-print-grid-layout'], ['e-print-grid']);\n if (gObj.isPrinting) {\n detach(gObj.element);\n }\n this.printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWind.moveTo(0, 0);\n this.printWind.resizeTo(screen.availWidth, screen.availHeight);\n this.printWind = printWindow(gObj.element, this.printWind);\n };\n Print.prototype.removeColGroup = function (gObj) {\n var depth = gObj.groupSettings.columns.length;\n var element = gObj.element;\n var id = '#' + gObj.element.id;\n if (!depth) {\n return;\n }\n var groupCaption = selectAll('.e-groupcaption', element);\n var colSpan = groupCaption[depth - 1].getAttribute('colspan');\n for (var i = 0; i < groupCaption.length; i++) {\n groupCaption[parseInt(i.toString(), 10)].setAttribute('colspan', colSpan);\n }\n var colGroups = selectAll(\"colgroup\" + id + \"colgroup\", element);\n var contentColGroups = selectAll('.e-content colgroup', element);\n this.hideColGroup(colGroups, depth);\n this.hideColGroup(contentColGroups, depth);\n };\n Print.prototype.hideColGroup = function (colGroups, depth) {\n for (var i = 0; i < colGroups.length; i++) {\n for (var j = 0; j < depth; j++) {\n colGroups[parseInt(i.toString(), 10)].children[parseInt(j.toString(), 10)].style.display = 'none';\n }\n }\n };\n /**\n * To destroy the print\n *\n * @returns {boolean} returns the isPrintGrid or not\n * @hidden\n */\n Print.prototype.isPrintGrid = function () {\n return this.parent.element.id.indexOf('_print') > 0 && this.parent.isPrinting;\n };\n /**\n * To destroy the print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.contentReady, this.contentReady.bind(this));\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.off(events.onEmpty, this.onEmpty.bind(this));\n this.parent.off(events.hierarchyPrint, this.hierarchyPrint);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n Print.printGridProp = getCloneProperties().concat([events.beforePrint, events.printComplete, events.load]);\n return Print;\n}());\nexport { Print };\n","import { ChildProperty, compile as baseTemplateComplier, setValue, Internationalization, isUndefined, closest } from '@syncfusion/ej2-base';\nimport { extend as baseExtend, isNullOrUndefined, getValue, classList } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, addClass, attributes, remove, createElement, removeClass } from '@syncfusion/ej2-base';\nimport { isObject, select, selectAll } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate, UrlAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { Column } from '../models/column';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { Print } from '../actions/print';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\nimport * as literals from '../base/string-literals';\n//https://typescript.codeplex.com/discussions/401501\n/**\n * Function to check whether target object implement specific interface\n *\n * @param {Object} target - specifies the target\n * @param {string} checkFor - specifies the checkfors\n * @returns {boolean} returns the boolean\n * @hidden\n */\nexport function doesImplementInterface(target, checkFor) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return target.prototype && checkFor in target.prototype;\n}\n/**\n * Function to get value from provided data\n *\n * @param {string} field - specifies the field\n * @param {Object} data - specifies the data\n * @param {ColumnModel} column - specifies the column\n * @returns {Object} returns the object\n * @hidden\n */\n// eslint-disable-next-line\nexport function valueAccessor(field, data, column) {\n return (isNullOrUndefined(field) || field === '') ? '' : DataUtil.getObject(field, data);\n}\n/**\n * Defines the method used to apply custom header cell values from external function and display this on each header cell rendered.\n *\n * @param {string} field - specifies the field\n * @param {ColumnModel} column - specifies the column\n * @returns {object} headerValueAccessor\n * @hidden\n */\nexport function headerValueAccessor(field, column) {\n return (isNullOrUndefined(field) || field === '') ? '' : DataUtil.getObject(field, column);\n}\n/**\n * The function used to update Dom using requestAnimationFrame.\n *\n * @param {Function} updateFunction - Function that contains the actual action\n * @param {object} callBack - defines the callback\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function getUpdateUsingRaf(updateFunction, callBack) {\n requestAnimationFrame(function () {\n try {\n callBack(null, updateFunction());\n }\n catch (e) {\n callBack(e);\n }\n });\n}\n/**\n * @hidden\n * @param {PdfExportProperties | ExcelExportProperties} exportProperties - Defines the export properties\n * @returns {boolean} Returns isExportColumns\n */\nexport function isExportColumns(exportProperties) {\n return !isNullOrUndefined(exportProperties) &&\n !isNullOrUndefined(exportProperties.columns) && exportProperties.columns.length > 0;\n}\n/**\n * @param {PdfExportProperties | ExcelExportProperties} exportProperties - Defines the export properties\n * @param {IGrid} gObj - Defines the grid object\n * @returns {void}\n * @hidden\n */\nexport function updateColumnTypeForExportColumns(exportProperties, gObj) {\n var exportColumns = exportProperties.columns;\n var gridColumns = gObj.columns;\n for (var i = 0; i < exportColumns.length; i++) {\n if (gridColumns.length - 1 >= i) {\n if (gridColumns[parseInt(i.toString(), 10)].columns) {\n for (var j = 0; j < gridColumns[parseInt(i.toString(), 10)].columns.length; j++) {\n exportColumns[parseInt(i.toString(), 10)].columns[parseInt(j.toString(), 10)]\n .type = gridColumns[parseInt(i.toString(), 10)].columns[parseInt(j.toString(), 10)].type;\n }\n }\n else {\n exportColumns[parseInt(i.toString(), 10)].type = gridColumns[parseInt(i.toString(), 10)].type;\n }\n }\n }\n}\n/**\n * @hidden\n * @param {IGrid} grid - Defines the grid\n * @returns {void}\n */\nexport function updatecloneRow(grid) {\n var nRows = [];\n var actualRows = grid.vRows;\n for (var i = 0; i < actualRows.length; i++) {\n if (actualRows[parseInt(i.toString(), 10)].isDataRow) {\n nRows.push(actualRows[parseInt(i.toString(), 10)]);\n }\n else if (!actualRows[parseInt(i.toString(), 10)].isDataRow) {\n nRows.push(actualRows[parseInt(i.toString(), 10)]);\n if (!actualRows[parseInt(i.toString(), 10)].isExpand && actualRows[parseInt(i.toString(), 10)].isCaptionRow) {\n i += getCollapsedRowsCount(actualRows[parseInt(i.toString(), 10)], grid);\n }\n }\n }\n grid.vcRows = nRows;\n}\nvar count = 0;\n/**\n * @hidden\n * @param {Row} val - Defines the value\n * @param {IGrid} grid - Defines the grid\n * @returns {number} Returns the collapsed row count\n */\nexport function getCollapsedRowsCount(val, grid) {\n count = 0;\n var gSummary = 'gSummary';\n var total = 'count';\n var gLen = grid.groupSettings.columns.length;\n var records = 'records';\n var items = 'items';\n var value = val[\"\" + gSummary];\n var dataRowCnt = 0;\n var agrCnt = 'aggregatesCount';\n if (value === val.data[\"\" + total]) {\n if (grid.groupSettings.columns.length && !isNullOrUndefined(val[\"\" + agrCnt]) && val[\"\" + agrCnt]) {\n if (grid.groupSettings.columns.length !== 1) {\n count += (val.indent !== 0 && (value) < 2) ? (val[\"\" + gSummary] * ((gLen - val.indent) + (gLen - val.indent) * val[\"\" + agrCnt])) :\n (val[\"\" + gSummary] * ((gLen - val.indent) + (gLen - val.indent - 1) * val[\"\" + agrCnt])) + val[\"\" + agrCnt];\n }\n else if (grid.groupSettings.columns.length === 1) {\n count += (val[\"\" + gSummary] * (gLen - val.indent)) + val[\"\" + agrCnt];\n }\n }\n else if (grid.groupSettings.columns.length) {\n if (grid.groupSettings.columns.length !== 1) {\n count += val[\"\" + gSummary] * (grid.groupSettings.columns.length - val.indent);\n }\n else {\n count += val[\"\" + gSummary];\n }\n }\n return count;\n }\n else {\n for (var i = 0, len = val.data[\"\" + items].length; i < len; i++) {\n var gLevel = val.data[\"\" + items][parseInt(i.toString(), 10)];\n count += gLevel[\"\" + items].length + ((gLen !== grid.columns.length) &&\n !isNullOrUndefined(gLevel[\"\" + items][\"\" + records]) ? gLevel[\"\" + items][\"\" + records].length : 0);\n dataRowCnt += (!isNullOrUndefined(gLevel[\"\" + items][\"\" + records]) && !isNullOrUndefined(val[\"\" + agrCnt])) ? gLevel[\"\" + items][\"\" + records].length :\n gLevel[\"\" + items].length;\n if (gLevel[\"\" + items].GroupGuid && gLevel[\"\" + items].childLevels !== 0) {\n recursive(gLevel);\n }\n }\n count += val.data[\"\" + items].length;\n if (!isNullOrUndefined(val[\"\" + agrCnt])) {\n if (val[\"\" + agrCnt] && count && dataRowCnt !== 0) {\n count += ((count - dataRowCnt) * val[\"\" + agrCnt]) + val[\"\" + agrCnt];\n }\n }\n }\n return count;\n}\n/**\n * @param {Object[]} row - Defines the row\n * @returns {void}\n * @hidden\n */\nexport function recursive(row) {\n var items = 'items';\n var rCount = 'count';\n for (var j = 0, length_1 = row[\"\" + items].length; j < length_1; j++) {\n var nLevel = row[\"\" + items][parseInt(j.toString(), 10)];\n count += nLevel[\"\" + rCount];\n if (nLevel[\"\" + items].childLevels !== 0) {\n recursive(nLevel);\n }\n }\n}\n/**\n * @param {Object[]} collection - Defines the array\n * @param {Object} predicate - Defines the predicate\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function iterateArrayOrObject(collection, predicate) {\n var result = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n var pred = predicate(collection[parseInt(i.toString(), 10)], i);\n if (!isNullOrUndefined(pred)) {\n result.push(pred);\n }\n }\n return result;\n}\n/**\n * @param {Object[]} array - Defines the array\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function iterateExtend(array) {\n var obj = [];\n for (var i = 0; i < array.length; i++) {\n obj.push(baseExtend({}, getActualProperties(array[parseInt(i.toString(), 10)]), {}, true));\n }\n return obj;\n}\n/**\n * @param {string | Function} template - Defines the template\n * @returns {Function} Returns the function\n * @hidden\n */\nexport function templateCompiler(template) {\n if (template) {\n try {\n var validSelector = template[0] !== '<';\n if (typeof template === 'function') {\n return baseTemplateComplier(template);\n }\n else if (validSelector && document.querySelectorAll(template).length) {\n return baseTemplateComplier(document.querySelector(template).innerHTML.trim());\n }\n else {\n return baseTemplateComplier(template);\n }\n }\n catch (e) {\n return baseTemplateComplier(template);\n }\n }\n return undefined;\n}\n/**\n * @param {Element} node - Defines the column\n * @param {Object} customAttributes - Defines the index\n * @returns {void}\n * @hidden\n */\nexport function setStyleAndAttributes(node, customAttributes) {\n var copyAttr = {};\n var literals = ['style', 'class'];\n //Dont touch the original object - make a copy\n baseExtend(copyAttr, customAttributes, {});\n if ('style' in copyAttr) {\n setStyleAttribute(node, copyAttr[literals[0]]);\n delete copyAttr[literals[0]];\n }\n if ('class' in copyAttr) {\n addClass([node], copyAttr[literals[1]]);\n delete copyAttr[literals[1]];\n }\n attributes(node, copyAttr);\n}\n/**\n * @param {Object} copied - Defines the column\n * @param {Object} first - Defines the inndex\n * @param {Object} second - Defines the second object\n * @param {string[]} exclude - Defines the exclude\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function extend(copied, first, second, exclude) {\n var moved = baseExtend(copied, first, second);\n var values = Object.keys(moved);\n for (var i = 0; i < values.length; i++) {\n if (exclude && exclude.indexOf(values[parseInt(i.toString(), 10)]) !== -1) {\n delete moved[values[parseInt(i.toString(), 10)]];\n }\n }\n return moved;\n}\n/**\n * @param {Column[]} columnModel - Defines the column\n * @param {number} ind - Defines the inndex\n * @returns {number} - Returns the columnindex\n * @hidden\n */\nexport function setColumnIndex(columnModel, ind) {\n if (ind === void 0) { ind = 0; }\n for (var i = 0, len = columnModel.length; i < len; i++) {\n if (columnModel[parseInt(i.toString(), 10)].columns) {\n columnModel[parseInt(i.toString(), 10)].index = isNullOrUndefined(columnModel[parseInt(i.toString(), 10)].index) ? ind\n : columnModel[parseInt(i.toString(), 10)].index;\n ind++;\n ind = setColumnIndex(columnModel[parseInt(i.toString(), 10)].columns, ind);\n }\n else {\n columnModel[parseInt(i.toString(), 10)].index = isNullOrUndefined(columnModel[parseInt(i.toString(), 10)].index) ? ind\n : columnModel[parseInt(i.toString(), 10)].index;\n ind++;\n }\n }\n return ind;\n}\n/**\n * @param {Column[] | string[] | ColumnModel[]} columns - Defines the column\n * @param {boolean} autoWidth - Defines the autowidth\n * @param {IGrid} gObj - Defines the class name\n * @returns {Column} - Returns the columns\n * @hidden\n */\nexport function prepareColumns(columns, autoWidth, gObj) {\n for (var c = 0, len = columns.length; c < len; c++) {\n var column = void 0;\n if (typeof columns[parseInt(c.toString(), 10)] === 'string') {\n column = new Column({ field: columns[parseInt(c.toString(), 10)] }, gObj);\n }\n else if (!(columns[parseInt(c.toString(), 10)] instanceof Column) || columns[parseInt(c.toString(), 10)].columns) {\n if (!columns[parseInt(c.toString(), 10)].columns) {\n column = new Column(columns[parseInt(c.toString(), 10)], gObj);\n }\n else {\n columns[parseInt(c.toString(), 10)].columns = prepareColumns(columns[parseInt(c.toString(), 10)].columns, null, gObj);\n column = new Column(columns[parseInt(c.toString(), 10)], gObj);\n }\n }\n else {\n column = columns[parseInt(c.toString(), 10)];\n }\n if (column.type && column.type.toLowerCase() === 'checkbox') {\n column.allowReordering = false;\n }\n column.headerText = isNullOrUndefined(column.headerText) ? column.foreignKeyValue || column.field || '' : column.headerText;\n column.foreignKeyField = column.foreignKeyField || column.field;\n column.valueAccessor = (typeof column.valueAccessor === 'string' ? getValue(column.valueAccessor, window)\n : column.valueAccessor) || valueAccessor;\n column.width = autoWidth && isNullOrUndefined(column.width) ? 200 : column.width;\n if (isNullOrUndefined(column.visible)) {\n column.visible = true;\n }\n columns[parseInt(c.toString(), 10)] = column;\n }\n return columns;\n}\n/**\n * @param {HTMLElement} popUp - Defines the popup element\n * @param {MouseEvent | TouchEvent} e - Defines the moouse event\n * @param {string} className - Defines the class name\n * @returns {void}\n * @hidden\n */\nexport function setCssInGridPopUp(popUp, e, className) {\n var popUpSpan = popUp.querySelector('span');\n var position = popUp.parentElement.getBoundingClientRect();\n var targetPosition = e.target.getBoundingClientRect();\n popUpSpan.className = className;\n popUp.style.display = '';\n var isBottomTail = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY) > popUp.offsetHeight + 10;\n popUp.style.top = targetPosition.top - position.top +\n (isBottomTail ? -(popUp.offsetHeight + 10) : popUp.offsetHeight + 10) + 'px'; //10px for tail element\n popUp.style.left = getPopupLeftPosition(popUp, e, targetPosition, position.left) + 'px';\n if (isBottomTail) {\n popUp.querySelector('.e-downtail').style.display = '';\n popUp.querySelector('.e-uptail').style.display = 'none';\n }\n else {\n popUp.querySelector('.e-downtail').style.display = 'none';\n popUp.querySelector('.e-uptail').style.display = '';\n }\n}\n/**\n * @param {HTMLElement} popup - Defines the popup element\n * @param {MouseEvent | TouchEvent} e - Defines the mouse event\n * @param {Object} targetPosition - Defines the target position\n * @param {number} targetPosition.top - Defines the top position\n * @param {number} targetPosition.left - Defines the left position\n * @param {number} targetPosition.right - Defines the right position\n * @param {number} left - Defines the left position\n * @returns {number} Returns the popup left position\n * @hidden\n */\nfunction getPopupLeftPosition(popup, e, targetPosition, left) {\n var width = popup.offsetWidth / 2;\n var x = getPosition(e).x;\n if (x - targetPosition.left < width) {\n return targetPosition.left - left;\n }\n else if (targetPosition.right - x < width) {\n return targetPosition.right - left - width * 2;\n }\n else {\n return x - left - width;\n }\n}\n/**\n * @param {Object} obj - Defines the object\n * @returns {Object} Returns the Properties\n * @hidden\n */\nexport function getActualProperties(obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n}\n/**\n * @param {Element} elem - Defines the element\n * @param {string} selector - Defines the string selector\n * @param {boolean} isID - Defines the isID\n * @returns {Element} Returns the element\n * @hidden\n */\nexport function parentsUntil(elem, selector, isID) {\n var parent = elem;\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n break;\n }\n parent = parent.parentElement;\n }\n return parent;\n}\n/**\n * @param {Element} element - Defines the element\n * @param {Element} elements - Defines the element\n * @returns {number} Returns the element index\n * @hidden\n */\nexport function getElementIndex(element, elements) {\n var index = -1;\n for (var i = 0, len = elements.length; i < len; i++) {\n if (elements[parseInt(i.toString(), 10)].isEqualNode(element)) {\n index = i;\n break;\n }\n }\n return index;\n}\n/**\n * @param {Object} value - Defines the value\n * @param {Object} collection - defines the collection\n * @returns {number} Returns the array\n * @hidden\n */\nexport function inArray(value, collection) {\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[parseInt(i.toString(), 10)] === value) {\n return i;\n }\n }\n return -1;\n}\n/**\n * @param {Object} collection - Defines the collection\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function getActualPropFromColl(collection) {\n var coll = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n // eslint-disable-next-line no-prototype-builtins\n if (collection[parseInt(i.toString(), 10)].hasOwnProperty('properties')) {\n coll.push(collection[parseInt(i.toString(), 10)].properties);\n }\n else {\n coll.push(collection[parseInt(i.toString(), 10)]);\n }\n }\n return coll;\n}\n/**\n * @param {Element} target - Defines the target element\n * @param {string} selector - Defines the selector\n * @returns {void}\n * @hidden\n */\nexport function removeElement(target, selector) {\n var elements = [].slice.call(target.querySelectorAll(selector));\n for (var i = 0; i < elements.length; i++) {\n remove(elements[parseInt(i.toString(), 10)]);\n }\n}\n/**\n * @param {MouseEvent | TouchEvent} e Defines the mouse event\n * @returns {IPosition} Returns the position\n * @hidden\n */\nexport function getPosition(e) {\n var position = {};\n position.x = (isNullOrUndefined(e.clientX) ? e.changedTouches[0].clientX :\n e.clientX);\n position.y = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY);\n return position;\n}\nvar uid = 0;\n/**\n * @param {string} prefix - Defines the prefix string\n * @returns {string} Returns the uid\n * @hidden\n */\nexport function getUid(prefix) {\n return prefix + uid++;\n}\n/**\n * @param {Element | DocumentFragment} elem - Defines the element\n * @param {Element[] | NodeList} children - Defines the Element\n * @returns {Element} Returns the element\n * @hidden\n */\nexport function appendChildren(elem, children) {\n for (var i = 0, len = children.length; i < len; i++) {\n if (len === children.length) {\n elem.appendChild(children[parseInt(i.toString(), 10)]);\n }\n else {\n elem.appendChild(children[0]);\n }\n }\n return elem;\n}\n/**\n * @param {Element} elem - Defines the element\n * @param {string} selector - Defines the selector\n * @param {boolean} isID - Defines isID\n * @returns {Element} Return the element\n * @hidden\n */\nexport function parents(elem, selector, isID) {\n var parent = elem;\n var parents = [];\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\n/**\n * @param {AggregateType | string} type - Defines the type\n * @param {Object} data - Defines the data\n * @param {AggregateColumnModel} column - Defines the column\n * @param {Object} context - Defines the context\n * @returns {Object} Returns the calculated aggragate\n * @hidden\n */\nexport function calculateAggregate(type, data, column, context) {\n if (type === 'Custom') {\n var temp = column.customAggregate;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n return temp ? temp.call(context, data, column) : '';\n }\n return (column.field in data || data instanceof Array) ? DataUtil.aggregates[type.toLowerCase()](data, column.field) : null;\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden\n * @returns {number} - Returns the scrollbarwidth\n */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\n }\n var divNode = document.createElement('div');\n var value = 0;\n divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n document.body.appendChild(divNode);\n value = (divNode.offsetWidth - divNode.clientWidth) | 0;\n document.body.removeChild(divNode);\n return scrollWidth = value;\n}\n/** @hidden */\nvar rowHeight;\n/**\n * @param {HTMLElement} element - Defines the element\n * @returns {number} Returns the roww height\n * @hidden\n */\nexport function getRowHeight(element) {\n if (rowHeight !== undefined) {\n return rowHeight;\n }\n var table = createElement('table', { className: literals.table, styles: 'visibility: hidden', attrs: { role: 'grid' } });\n table.innerHTML = 'A';\n element.appendChild(table);\n var rect = table.querySelector('td').getBoundingClientRect();\n element.removeChild(table);\n rowHeight = Math.ceil(rect.height);\n return rowHeight;\n}\n/** @hidden */\nvar actualRowHeight;\n/**\n * @param {HTMLElement} element - Defines the HTMl element\n * @returns {number} Returns the row height\n * @hidden\n */\nexport function getActualRowHeight(element) {\n if (actualRowHeight !== undefined) {\n return rowHeight;\n }\n var table = createElement('table', { className: literals.table, styles: 'visibility: hidden', attrs: { role: 'grid' } });\n table.innerHTML = 'A';\n element.appendChild(table);\n var rect = table.querySelector('tr').getBoundingClientRect();\n element.removeChild(table);\n return rect.height;\n}\n/**\n * @param {string} field - Defines the field\n * @returns {boolean} - Returns is complex field\n * @hidden\n */\nexport function isComplexField(field) {\n return field.split('.').length > 1;\n}\n/**\n * @param {string} field - Defines the field\n * @returns {string} - Returns the get complex field ID\n * @hidden\n */\nexport function getComplexFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/\\./g, '___');\n}\n/**\n * @param {string} field - Defines the field\n * @returns {string} - Returns the parsed column field id\n * @hidden\n */\nexport function getParsedFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/[^a-zA-Z0-9_.]/g, '\\\\$&');\n}\n/**\n * @param {string} field - Defines the field\n * @returns {string} - Returns the set complex field ID\n * @hidden\n */\nexport function setComplexFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/___/g, '.');\n}\n/**\n * @param {Column} col - Defines the column\n * @param {string} type - Defines the type\n * @param {Element} elem - Defines th element\n * @returns {boolean} Returns is Editable\n * @hidden\n */\nexport function isEditable(col, type, elem) {\n var row = parentsUntil(elem, literals.row);\n var isOldRow = !row ? true : row && !row.classList.contains('e-insertedrow');\n if (type === 'beginEdit' && isOldRow) {\n if (col.isIdentity || col.isPrimaryKey || !col.allowEditing) {\n return false;\n }\n return true;\n }\n else if (type === 'add' && col.isIdentity) {\n return false;\n }\n else {\n if (isOldRow && !col.allowEditing && !col.isIdentity && !col.isPrimaryKey) {\n return false;\n }\n return true;\n }\n}\n/**\n * @param {IGrid} inst - Defines the IGrid\n * @returns {boolean} Returns is action prevent in boolean\n * @hidden\n */\nexport function isActionPrevent(inst) {\n var dlg = select('#' + inst.element.id + 'EditConfirm', inst.element);\n return inst.editSettings.mode === 'Batch' &&\n (selectAll('.e-updatedtd', inst.element).length) && inst.editSettings.showConfirmDialog &&\n (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/**\n * @param {any} elem - Defines the element\n * @param {boolean} action - Defines the boolean for action\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function wrap(elem, action) {\n var clName = 'e-wrap';\n elem = elem instanceof Array ? elem : [elem];\n for (var i = 0; i < elem.length; i++) {\n if (action) {\n elem[parseInt(i.toString(), 10)].classList.add(clName);\n }\n else {\n elem[parseInt(i.toString(), 10)].classList.remove(clName);\n }\n }\n}\n/**\n * @param {ServiceLocator} serviceLocator - Defines the service locator\n * @param {Column} column - Defines the column\n * @returns {void}\n * @hidden\n */\nexport function setFormatter(serviceLocator, column) {\n var fmtr = serviceLocator.getService('valueFormatter');\n var format = 'format';\n var args;\n if (column.type === 'date' || column.type === 'datetime' || column.type === 'dateonly') {\n args = { type: column.type === 'dateonly' ? 'date' : column.type, skeleton: column.format };\n if ((typeof (column.format) === 'string') && column.format !== 'yMd') {\n args[\"\" + format] = column.format;\n }\n }\n switch (column.type) {\n case 'date':\n column.setFormatter(fmtr.getFormatFunction(args));\n column.setParser(fmtr.getParserFunction(args));\n break;\n case 'dateonly':\n column.setFormatter(fmtr.getFormatFunction(args));\n column.setParser(fmtr.getParserFunction(args));\n break;\n case 'datetime':\n column.setFormatter(fmtr.getFormatFunction(args));\n column.setParser(fmtr.getParserFunction(args));\n break;\n case 'number':\n column.setFormatter(fmtr.getFormatFunction({ format: column.format }));\n column.setParser(fmtr.getParserFunction({ format: column.format }));\n break;\n }\n}\n/**\n * @param {Element} cells - Defines the cell element\n * @param {boolean} add - Defines the add\n * @param {string} args - Defines the args\n * @returns {void}\n * @hidden\n */\nexport function addRemoveActiveClasses(cells, add) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n classList(cells[parseInt(i.toString(), 10)], args.slice(), []);\n cells[parseInt(i.toString(), 10)].setAttribute('aria-selected', 'true');\n }\n else {\n classList(cells[parseInt(i.toString(), 10)], [], args.slice());\n cells[parseInt(i.toString(), 10)].removeAttribute('aria-selected');\n }\n }\n}\n/**\n * @param {string} result - Defines th string\n * @returns {string} Returns the distinct staing values\n * @hidden\n */\nexport function distinctStringValues(result) {\n var temp = {};\n var res = [];\n for (var i = 0; i < result.length; i++) {\n if (!(result[parseInt(i.toString(), 10)] in temp)) {\n res.push(result[parseInt(i.toString(), 10)].toString());\n temp[result[parseInt(i.toString(), 10)]] = 1;\n }\n }\n return res;\n}\n/**\n * @param {Element} target - Defines the target\n * @param {Dialog} dialogObj - Defines the dialog\n * @returns {void}\n * @hidden\n */\nexport function getFilterMenuPostion(target, dialogObj) {\n var elementVisible = dialogObj.element.style.display;\n dialogObj.element.style.display = 'block';\n var dlgWidth = dialogObj.width;\n var newpos = calculateRelativeBasedPosition(target, dialogObj.element);\n dialogObj.element.style.display = elementVisible;\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 5 + 'px';\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) - 16 + 'px'; // right calculation\n }\n else {\n dialogObj.element.style.left = leftPos + -4 + 'px';\n }\n}\n/**\n * @param {Object} args - Defines the args\n * @param {Popup} args.popup - Defines the args for popup\n * @param {Dialog} dialogObj - Defines the dialog obj\n * @returns {void}\n * @hidden\n */\nexport function getZIndexCalcualtion(args, dialogObj) {\n args.popup.element.style.zIndex = (dialogObj.zIndex + 1).toString();\n}\n/**\n * @param {Element} elem - Defines the element\n * @returns {void}\n * @hidden\n */\nexport function toogleCheckbox(elem) {\n var span = elem.querySelector('.e-frame');\n var input = span.previousSibling;\n if (span.classList.contains('e-check')) {\n input.checked = false;\n classList(span, ['e-uncheck'], ['e-check']);\n }\n else {\n input.checked = true;\n classList(span, ['e-check'], ['e-uncheck']);\n }\n}\n/**\n * @param {HTMLInputElement} elem - Defines the element\n * @param {boolean} checked - Defines is checked\n * @returns {void}\n * @hidden\n */\nexport function setChecked(elem, checked) {\n elem.checked = checked;\n}\n/**\n * @param {string} uid - Defines the string\n * @param {Element} elem - Defines the Element\n * @param {string} className - Defines the classname\n * @returns {Element} Returns the box wrap\n * @hidden\n */\nexport function createCboxWithWrap(uid, elem, className) {\n var div = createElement('div', { className: className });\n div.appendChild(elem);\n div.setAttribute('uid', uid);\n return div;\n}\n/**\n * @param {Element} elem - Defines the element\n * @param {boolean} checked - Defines is checked\n * @returns {void}\n * @hidden\n */\nexport function removeAddCboxClasses(elem, checked) {\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n if (checked) {\n elem.classList.add('e-check');\n }\n else {\n elem.classList.add('e-uncheck');\n }\n}\n/**\n * Refresh the Row model's foreign data.\n *\n * @param {IRow} row - Grid Row model object.\n * @param {Column[]} columns - Foreign columns array.\n * @param {Object} data - Updated Row data.\n * @returns {void}\n * @hidden\n */\nexport function refreshForeignData(row, columns, data) {\n for (var i = 0; i < columns.length; i++) {\n setValue(columns[parseInt(i.toString(), 10)].field, getForeignData(columns[parseInt(i.toString(), 10)], data), row.foreignKeyData);\n }\n var cells = row.cells;\n for (var i = 0; i < cells.length; i++) {\n if (cells[parseInt(i.toString(), 10)].isForeignKey) {\n setValue('foreignKeyData', getValue(cells[parseInt(i.toString(), 10)].column.field, row.foreignKeyData), cells[parseInt(i.toString(), 10)]);\n }\n }\n}\n/**\n * Get the foreign data for the corresponding cell value.\n *\n * @param {Column} column - Foreign Key column\n * @param {Object} data - Row data.\n * @param {string | number} lValue - cell value.\n * @param {Object} foreignKeyData - foreign data source.\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function getForeignData(column, data, lValue, foreignKeyData) {\n var fField = column.foreignKeyField;\n var key = (!isNullOrUndefined(lValue) ? lValue : valueAccessor(column.field, data, column));\n key = isNullOrUndefined(key) ? '' : key;\n var query = new Query();\n var fdata = foreignKeyData || ((column.dataSource instanceof DataManager) && column.dataSource.dataSource.json.length ?\n column.dataSource.dataSource.json : column.columnData);\n if (key.getDay) {\n query.where(getDatePredicate({ field: fField, operator: 'equal', value: key, matchCase: false }));\n }\n else {\n query.where(fField, '==', key, false);\n }\n return new DataManager(fdata).executeLocal(query);\n}\n/**\n * To use to get the column's object by the foreign key value.\n *\n * @param {string} foreignKeyValue - Defines ForeignKeyValue.\n * @param {Column[]} columns - Array of column object.\n * @returns {Column} Returns the element\n * @hidden\n */\nexport function getColumnByForeignKeyValue(foreignKeyValue, columns) {\n var column;\n return columns.some(function (col) {\n column = col;\n return col.foreignKeyValue === foreignKeyValue;\n }) && column;\n}\n/**\n * @param {number} value - Defines the date or month value\n * @returns {string} Returns string\n * @hidden\n */\nexport function padZero(value) {\n if (value < 10) {\n return '0' + value;\n }\n return String(value);\n}\n/**\n * @param {PredicateModel} filterObject - Defines the filterObject\n * @param {string} type - Defines the type\n * @param {boolean} isExecuteLocal - Defines whether the data actions performed in client and used for dateonly type field\n * @returns {Predicate} Returns the Predicate\n * @hidden\n */\nexport function getDatePredicate(filterObject, type, isExecuteLocal) {\n var datePredicate;\n var prevDate;\n var nextDate;\n var prevObj = baseExtend({}, getActualProperties(filterObject));\n var nextObj = baseExtend({}, getActualProperties(filterObject));\n if (isNullOrUndefined(filterObject.value) || filterObject.value === '') {\n datePredicate = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n return datePredicate;\n }\n var value = new Date(filterObject.value);\n if (type === 'dateonly' && !isExecuteLocal) {\n if (typeof (prevObj.value) === 'string') {\n prevObj.value = new Date(prevObj.value);\n }\n var dateOnlyString = prevObj.value.getFullYear() + '-' + padZero(prevObj.value.getMonth() + 1) + '-' + padZero(prevObj.value.getDate());\n var predicates = new Predicate(prevObj.field, prevObj.operator, dateOnlyString, false);\n datePredicate = predicates;\n }\n else {\n if (filterObject.operator === 'equal' || filterObject.operator === 'notequal') {\n if (type === 'datetime') {\n prevDate = new Date(value.setSeconds(value.getSeconds() - 1));\n nextDate = new Date(value.setSeconds(value.getSeconds() + 2));\n filterObject.value = new Date(value.setSeconds(nextDate.getSeconds() - 1));\n }\n else {\n prevDate = new Date(value.setHours(0) - 1);\n nextDate = new Date(value.setHours(24));\n }\n prevObj.value = prevDate;\n nextObj.value = nextDate;\n if (filterObject.operator === 'equal') {\n prevObj.operator = 'greaterthan';\n nextObj.operator = 'lessthan';\n }\n else if (filterObject.operator === 'notequal') {\n prevObj.operator = 'lessthanorequal';\n nextObj.operator = 'greaterthanorequal';\n }\n var predicateSt = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n var predicateEnd = new Predicate(nextObj.field, nextObj.operator, nextObj.value, false);\n datePredicate = filterObject.operator === 'equal' ? predicateSt.and(predicateEnd) : predicateSt.or(predicateEnd);\n }\n else {\n if (type === 'date' && (filterObject.operator === 'lessthanorequal' || filterObject.operator === 'greaterthan')) {\n prevObj.value = new Date(value.setHours(24) - 1);\n }\n if (typeof (prevObj.value) === 'string') {\n prevObj.value = new Date(prevObj.value);\n }\n var predicates = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n datePredicate = predicates;\n }\n }\n if (filterObject.setProperties) {\n filterObject.setProperties({ ejpredicate: datePredicate }, true);\n }\n else {\n filterObject.ejpredicate = datePredicate;\n }\n return datePredicate;\n}\n/**\n * @param {Element} ele - Defines the element\n * @param {number} frzCols - Defines the frozen columns\n * @param {IGrid} gObj - Defines the IGrid\n * @returns {Element} Returns the element\n * @hidden\n */\nexport function renderMovable(ele, frzCols, gObj) {\n frzCols = frzCols && gObj && gObj.isRowDragable() ? frzCols + 1 : frzCols;\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < frzCols; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = frzCols, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n}\n/**\n * @param {IGrid} grid - Defines the IGrid\n * @returns {boolean} Returns true if group adaptive is true\n * @hidden\n */\nexport function isGroupAdaptive(grid) {\n return grid.enableVirtualization && grid.groupSettings.columns.length > 0 && grid.isVirtualAdaptive &&\n !grid.groupSettings.enableLazyLoading;\n}\n/**\n * @param {string} field - Defines the Field\n * @param {Object} object - Defines the objec\n * @returns {any} Returns the object\n * @hidden\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getObject(field, object) {\n if (field === void 0) { field = ''; }\n if (field) {\n var value = object;\n var splits = field.split('.');\n for (var i = 0; i < splits.length && !isNullOrUndefined(value); i++) {\n value = value[splits[parseInt(i.toString(), 10)]];\n if (isUndefined(value)) {\n var newCase = splits[parseInt(i.toString(), 10)].charAt(0).toUpperCase()\n + splits[parseInt(i.toString(), 10)].slice(1);\n value = object[\"\" + newCase] || object[(\"\" + newCase).charAt(0).toLowerCase() + (\"\" + newCase).slice(1)];\n }\n }\n return value;\n }\n}\n/**\n * @param {string | Object} format - defines the format\n * @param {string} colType - Defines the coltype\n * @returns {string} Returns the custom Data format\n * @hidden\n */\nexport function getCustomDateFormat(format, colType) {\n var intl = new Internationalization();\n var formatvalue;\n var formatter = 'format';\n var type = 'type';\n if (colType === 'date') {\n formatvalue = typeof (format) === 'object' ?\n intl.getDatePattern({ type: format[\"\" + type] ? format[\"\" + type] : 'date', format: format[\"\" + formatter] }, false) :\n intl.getDatePattern({ type: 'dateTime', skeleton: format }, false);\n }\n else {\n formatvalue = typeof (format) === 'object' ?\n intl.getDatePattern({ type: format[\"\" + type] ? format[\"\" + type] : 'dateTime', format: format[\"\" + formatter] }, false) :\n intl.getDatePattern({ type: 'dateTime', skeleton: format }, false);\n }\n return formatvalue;\n}\n/**\n * @param {IGrid} gObj - Defines the IGrid\n * @param {HierarchyGridPrintMode} hierarchyPrintMode - Defines the hierarchyPrintMode\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function getExpandedState(gObj, hierarchyPrintMode) {\n var rows = gObj.getRowsObject();\n var obj = {};\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.isExpand && !row.isDetailRow) {\n var index = gObj.allowPaging && gObj.printMode === 'AllPages' ? row.index +\n (gObj.pageSettings.currentPage * gObj.pageSettings.pageSize) - gObj.pageSettings.pageSize : row.index;\n obj[parseInt(index.toString(), 10)] = {};\n obj[parseInt(index.toString(), 10)].isExpand = true;\n obj[parseInt(index.toString(), 10)].gridModel = getPrintGridModel(row.childGrid, hierarchyPrintMode);\n obj[parseInt(index.toString(), 10)].gridModel.query = gObj.childGrid.query;\n }\n }\n return obj;\n}\n/**\n * @param {IGrid} gObj - Defines the grid objct\n * @param {HierarchyGridPrintMode} hierarchyPrintMode - Defines the hierarchyPrintMode\n * @returns {IGrid} Returns the IGrid\n * @hidden\n */\nexport function getPrintGridModel(gObj, hierarchyPrintMode) {\n if (hierarchyPrintMode === void 0) { hierarchyPrintMode = 'Expanded'; }\n var printGridModel = {};\n if (!gObj) {\n return printGridModel;\n }\n var isFrozen = gObj.isFrozenGrid() && !gObj.getFrozenColumns();\n for (var _i = 0, _a = Print.printGridProp; _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'columns') {\n printGridModel[\"\" + key] = getActualPropFromColl(isFrozen ? gObj.getColumns() : gObj[\"\" + key]);\n }\n else if (key === 'allowPaging') {\n printGridModel[\"\" + key] = gObj.printMode === 'CurrentPage';\n }\n else {\n printGridModel[\"\" + key] = getActualProperties(gObj[\"\" + key]);\n }\n }\n printGridModel['enableHover'] = false;\n if (gObj.childGrid && hierarchyPrintMode !== 'None') {\n printGridModel.expandedRows = getExpandedState(gObj, hierarchyPrintMode);\n }\n return printGridModel;\n}\n/**\n * @param {Object} copied - Defines the copied object\n * @param {Object} first - Defines the first object\n * @param {Object} second - Defines the second object\n * @param {boolean} deep - Defines the deep\n * @returns {Object} Returns the extended object\n * @hidden\n */\nexport function extendObjWithFn(copied, first, second, deep) {\n var res = copied || {};\n var len = arguments.length;\n if (deep) {\n len = len - 1;\n }\n for (var i = 1; i < len; i++) {\n // eslint-disable-next-line prefer-rest-params\n if (!arguments[parseInt(i.toString(), 10)]) {\n continue;\n }\n // eslint-disable-next-line prefer-rest-params\n var obj1 = arguments[parseInt(i.toString(), 10)];\n var keys = Object.keys(Object.getPrototypeOf(obj1)).length ?\n Object.keys(obj1).concat(getPrototypesOfObj(obj1)) : Object.keys(obj1);\n for (var i_1 = 0; i_1 < keys.length; i_1++) {\n var source = res[keys[parseInt(i_1.toString(), 10)]];\n var cpy = obj1[keys[parseInt(i_1.toString(), 10)]];\n var cln = void 0;\n if (deep && (isObject(cpy) || Array.isArray(cpy))) {\n if (isObject(cpy)) {\n cln = source ? source : {};\n res[keys[parseInt(i_1.toString(), 10)]] = baseExtend({}, cln, cpy, deep);\n }\n else {\n cln = source ? source : [];\n res[keys[parseInt(i_1.toString(), 10)]] = baseExtend([], cln, cpy, deep);\n }\n }\n else {\n res[keys[parseInt(i_1.toString(), 10)]] = cpy;\n }\n }\n }\n return res;\n}\n/**\n * @param {Object} obj - Defines the obj\n * @returns {string[]} Returns the string\n * @hidden\n */\nfunction getPrototypesOfObj(obj) {\n var keys = [];\n while (Object.getPrototypeOf(obj) && Object.keys(Object.getPrototypeOf(obj)).length) {\n keys = keys.concat(Object.keys(Object.getPrototypeOf(obj)));\n obj = Object.getPrototypeOf(obj);\n }\n return keys;\n}\n/**\n * @param {Column[]} column - Defines the Column\n * @returns {number} Returns the column Depth\n * @hidden\n */\nexport function measureColumnDepth(column) {\n var max = 0;\n for (var i = 0; i < column.length; i++) {\n var depth = checkDepth(column[parseInt(i.toString(), 10)], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n}\n/**\n * @param {Column} col - Defines the Column\n * @param {number} index - Defines the index\n * @returns {number} Returns the depth\n * @hidden\n */\nexport function checkDepth(col, index) {\n var max = index;\n var indices = [];\n if (col.columns) {\n index++;\n for (var i = 0; i < col.columns.length; i++) {\n indices[parseInt(i.toString(), 10)] = checkDepth(col.columns[parseInt(i.toString(), 10)], index);\n }\n for (var j = 0; j < indices.length; j++) {\n if (max < indices[parseInt(j.toString(), 10)]) {\n max = indices[parseInt(j.toString(), 10)];\n }\n }\n index = max;\n }\n return index;\n}\n/**\n * @param {IGrid} gObj - Defines the IGrid\n * @param {PredicateModel[]} filteredCols - Defines the PredicateModel\n * @returns {void}\n * @hidden\n */\nexport function refreshFilteredColsUid(gObj, filteredCols) {\n for (var i = 0; i < filteredCols.length; i++) {\n filteredCols[parseInt(i.toString(), 10)].uid = filteredCols[parseInt(i.toString(), 10)].isForeignKey ?\n getColumnByForeignKeyValue(filteredCols[parseInt(i.toString(), 10)].field, gObj.getForeignKeyColumns()).uid\n : gObj.enableColumnVirtualization ? getColumnModelByFieldName(gObj, filteredCols[parseInt(i.toString(), 10)].field).uid\n : gObj.getColumnByField(filteredCols[parseInt(i.toString(), 10)].field).uid;\n }\n}\n/** @hidden */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Global;\n(function (Global) {\n // eslint-disable-next-line prefer-const\n Global.timer = null;\n})(Global || (Global = {}));\n/**\n * @param {Element} element - Defines the element\n * @returns {Object} Returns the transform values\n * @hidden\n */\nexport function getTransformValues(element) {\n var style = document.defaultView.getComputedStyle(element, null);\n var transformV = style.getPropertyValue('transform');\n var replacedTv = transformV.replace(/,/g, '');\n var translateX = parseFloat((replacedTv).split(' ')[4]);\n var translateY = parseFloat((replacedTv).split(' ')[5]);\n return { width: translateX, height: translateY };\n}\n/**\n * @param {Element} rootElement - Defines the root Element\n * @param {Element} element - Defines the element\n * @returns {void}\n * @hidden\n */\nexport function applyBiggerTheme(rootElement, element) {\n if (rootElement.classList.contains('e-bigger')) {\n element.classList.add('e-bigger');\n }\n}\n/**\n * @param {HTMLElement} mTD - Defines the movable TD\n * @param {HTMLElement} fTD - Defines the Frozen TD\n * @returns {void}\n * @hidden\n */\nexport function alignFrozenEditForm(mTD, fTD) {\n if (mTD && fTD) {\n var mHeight = closest(mTD, '.' + literals.row).getBoundingClientRect().height;\n var fHeight = closest(fTD, '.' + literals.row).getBoundingClientRect().height;\n if (mHeight > fHeight) {\n fTD.style.height = mHeight + 'px';\n }\n else {\n mTD.style.height = fHeight + 'px';\n }\n }\n}\n/**\n * @param {Element} row - Defines row element\n * @param {IGrid} gridObj - Defines grid object\n * @returns {boolean} Returns isRowEnteredInGrid\n * @hidden\n */\nexport function ensureLastRow(row, gridObj) {\n var cntOffset = gridObj.getContent().firstElementChild.offsetHeight;\n return row && row.getBoundingClientRect().top > cntOffset;\n}\n/**\n * @param {Element} row - Defines row element\n * @param {number} rowTop - Defines row top number\n * @returns {boolean} Returns first row is true\n * @hidden\n */\nexport function ensureFirstRow(row, rowTop) {\n return row && row.getBoundingClientRect().top < rowTop;\n}\n/**\n * @param {number} index - Defines index\n * @param {IGrid} gObj - Defines grid object\n * @returns {boolean} Returns isRowEnteredInGrid\n * @hidden\n */\nexport function isRowEnteredInGrid(index, gObj) {\n var rowHeight = gObj.getRowHeight();\n var startIndex = gObj.getContent().firstElementChild.scrollTop / rowHeight;\n var endIndex = startIndex + (gObj.getContent().firstElementChild.offsetHeight / rowHeight);\n return index < endIndex && index > startIndex;\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @param {Object} data - Defines the query\n * @returns {number} Returns the edited data index\n * @hidden\n */\nexport function getEditedDataIndex(gObj, data) {\n var keyField = gObj.getPrimaryKeyFieldNames()[0];\n var dataIndex;\n gObj.getCurrentViewRecords().filter(function (e, index) {\n if (keyField.includes('.')) {\n var currentValue = getObject(keyField, e);\n var originalValue = getObject(keyField, data);\n if (currentValue === originalValue) {\n dataIndex = index;\n }\n }\n else {\n if (e[\"\" + keyField] === data[\"\" + keyField]) {\n dataIndex = index;\n }\n }\n });\n return dataIndex;\n}\n/**\n * @param {Object} args - Defines the argument\n * @param {Query} query - Defines the query\n * @returns {FilterStateObj} Returns the filter state object\n * @hidden\n */\nexport function eventPromise(args, query) {\n var state = getStateEventArgument(query);\n var def = new Deferred();\n state.dataSource = def.resolve;\n state.action = args;\n return { state: state, deffered: def };\n}\n/**\n * @param {Query} query - Defines the query\n * @returns {Object} Returns the state event argument\n * @hidden\n */\nexport function getStateEventArgument(query) {\n var adaptr = new UrlAdaptor();\n var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n var state = adaptr.processQuery(dm, query);\n var data = JSON.parse(state.data);\n return data;\n}\n/**\n * @param {IGrid} gObj - Defines the Igrid\n * @returns {boolean} Returns the ispercentageWidth\n * @hidden\n */\nexport function ispercentageWidth(gObj) {\n var columns = gObj.getVisibleColumns();\n var percentageCol = 0;\n var undefinedWidthCol = 0;\n for (var i = 0; i < columns.length; i++) {\n if (isUndefined(columns[parseInt(i.toString(), 10)].width)) {\n undefinedWidthCol++;\n }\n else if (columns[parseInt(i.toString(), 10)].width.toString().indexOf('%') !== -1) {\n percentageCol++;\n }\n }\n return (gObj.width === 'auto' || typeof (gObj.width) === 'string' && gObj.width.indexOf('%') !== -1) &&\n !gObj.groupSettings.showGroupedColumn && gObj.groupSettings.columns.length\n && percentageCol && !undefinedWidthCol;\n}\n/**\n * @param {IGrid} gObj - Defines the IGrid\n * @param {Row[]} rows - Defines the row\n * @param {HTMLTableRowElement[]} rowElms - Row elements\n * @param {number} index - Row index\n * @param {number} startRowIndex - Start Row Index\n * @returns {void}\n * @hidden\n */\nexport function resetRowIndex(gObj, rows, rowElms, index, startRowIndex) {\n var startIndex = index ? index : 0;\n for (var i = startRowIndex ? startRowIndex : 0; i < rows.length; i++) {\n if (rows[parseInt(i.toString(), 10)] && rows[parseInt(i.toString(), 10)].isDataRow) {\n rows[parseInt(i.toString(), 10)].index = startIndex;\n rows[parseInt(i.toString(), 10)].isAltRow = gObj.enableAltRow ? startIndex % 2 !== 0 : false;\n rowElms[parseInt(i.toString(), 10)].setAttribute(literals.dataRowIndex, startIndex.toString());\n rowElms[parseInt(i.toString(), 10)].setAttribute(literals.ariaRowIndex, (startIndex + 1).toString());\n if (rows[parseInt(i.toString(), 10)].isAltRow) {\n rowElms[parseInt(i.toString(), 10)].classList.add('e-altrow');\n }\n else {\n rowElms[parseInt(i.toString(), 10)].classList.remove('e-altrow');\n }\n for (var j = 0; j < rowElms[parseInt(i.toString(), 10)].cells.length; j++) {\n rowElms[parseInt(i.toString(), 10)].cells[parseInt(j.toString(), 10)].setAttribute('index', startIndex.toString());\n }\n startIndex++;\n }\n }\n if (!rows.length) {\n gObj.renderModule.emptyRow(true);\n }\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @param {Object} changes - Defines the changes\n * @param {string} type - Defines the type\n * @param {string} keyField - Defines the keyfield\n * @returns {void}\n * @hidden\n */\nexport function compareChanges(gObj, changes, type, keyField) {\n var newArray = gObj.dataToBeUpdated[\"\" + type].concat(changes[\"\" + type]).reduce(function (r, o) {\n r[o[\"\" + keyField]] = r[o[\"\" + keyField]] === undefined ? o : Object.assign(r[o[\"\" + keyField]], o);\n return r;\n }, {});\n gObj.dataToBeUpdated[\"\" + type] = Object.keys(newArray).map(function (k) { return newArray[\"\" + k]; });\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @returns {void}\n * @hidden\n */\nexport function setRowElements(gObj) {\n if (gObj.isFrozenGrid()) {\n (gObj).contentModule.rowElements =\n [].slice.call(gObj.element.querySelectorAll('.e-movableheader .e-row, .e-movablecontent .e-row'));\n var cls = gObj.getFrozenMode() === literals.leftRight ? '.e-frozen-left-header .e-row, .e-frozen-left-content .e-row'\n : '.e-frozenheader .e-row, .e-frozencontent .e-row';\n (gObj).contentModule.freezeRowElements =\n [].slice.call(gObj.element.querySelectorAll(cls));\n if (gObj.getFrozenMode() === literals.leftRight) {\n gObj.contentModule.frozenRightRowElements =\n [].slice.call(gObj.element.querySelectorAll('.e-frozen-right-header .e-row, .e-frozen-right-content .e-row'));\n }\n }\n else {\n (gObj).contentModule.rowElements =\n [].slice.call(gObj.element.querySelectorAll('.e-row:not(.e-addedrow)'));\n }\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @param {Cell} cells - Defines the callback function\n * @param {freezeTable} tableName - Defines the row\n * @returns {Cell[]} Returns the cell\n * @hidden\n */\nexport function splitFrozenRowObjectCells(gObj, cells, tableName) {\n var left = gObj.getFrozenLeftCount();\n var movable = gObj.getMovableColumnsCount();\n var right = gObj.getFrozenRightColumnsCount();\n var frozenMode = gObj.getFrozenMode();\n var drag = gObj.isRowDragable() ? 1 : 0;\n var rightIndex = frozenMode === 'Right' ? left + movable : left + movable + drag;\n var mvblIndex = frozenMode === 'Right' ? left : left + drag;\n var mvblEndIdx = frozenMode === 'Right' ? cells.length - right - drag\n : right ? cells.length - right : cells.length;\n if (tableName === literals.frozenLeft) {\n cells = cells.slice(0, left ? left + drag : cells.length);\n }\n else if (tableName === literals.frozenRight) {\n cells = cells.slice(rightIndex, cells.length);\n }\n else if (tableName === 'movable') {\n cells = cells.slice(mvblIndex, mvblEndIdx);\n }\n return cells;\n}\n/**\n * @param {IGrid} gObj - Defines the grid object.\n * @param {boolean} visibleOnly - Defines to return only visible columns.\n * @returns {{frozenLeft: Column[], movable: Column[], frozenRight: Column[]}} - Returns all frozenLeft, movable and frozenRight Columns as object.\n * @hidden\n */\nexport function getExactFrozenMovableColumn(gObj, visibleOnly) {\n var columnModel = gObj.getColumns();\n var movableColumns = [];\n var frozenLeftColumns = [];\n var frozenRightColumns = [];\n for (var i = 0; i < columnModel.length; i++) {\n if (isNullOrUndefined(visibleOnly) || !visibleOnly || visibleOnly === columnModel[parseInt(i.toString(), 10)].visible) {\n if (columnModel[parseInt(i.toString(), 10)].freeze === 'Left' || columnModel[parseInt(i.toString(), 10)].freezeTable === 'frozen-left') {\n frozenLeftColumns.push(columnModel[parseInt(i.toString(), 10)]);\n }\n else if (columnModel[parseInt(i.toString(), 10)].freeze === 'Right' || columnModel[parseInt(i.toString(), 10)].freezeTable === 'frozen-right') {\n frozenRightColumns.push(columnModel[parseInt(i.toString(), 10)]);\n }\n else {\n movableColumns.push(columnModel[parseInt(i.toString(), 10)]);\n }\n }\n }\n return { frozenLeft: frozenLeftColumns, movable: movableColumns, frozenRight: frozenRightColumns };\n}\n// eslint-disable-next-line\n/** @hidden */\nexport function gridActionHandler(gObj, callBack, rows, force, rowObj) {\n if (rows[0].length || force) {\n if (rowObj) {\n callBack(literals.frozenLeft, rows[0], rowObj[0]);\n }\n else {\n callBack(literals.frozenLeft, rows[0]);\n }\n }\n if (gObj.isFrozenGrid() && (rows[1].length || force)) {\n if (rowObj) {\n callBack('movable', rows[1], rowObj[1]);\n }\n else {\n callBack('movable', rows[1]);\n }\n }\n if ((gObj.getFrozenMode() === literals.leftRight || gObj.getFrozenMode() === 'Right') && (rows[2].length || force)) {\n if (rowObj) {\n callBack(literals.frozenRight, rows[2], rowObj[2]);\n }\n else {\n callBack(literals.frozenRight, rows[2]);\n }\n }\n}\n/**\n * @param {IGrid} gObj - Defines the grid\n * @returns {Row} Returns the row\n * @hidden\n */\nexport function getGridRowObjects(gObj) {\n return [gObj.getFrozenMode() !== 'Right' ? gObj.getRowsObject() : [], gObj.getMovableRowsObject(), gObj.getFrozenRightRowsObject()];\n}\n/**\n * @param {IGrid} gObj - Defines the grid\n * @returns {Element} Returns the element\n * @hidden\n */\nexport function getGridRowElements(gObj) {\n return [\n gObj.getFrozenMode() !== 'Right' ? gObj.getAllDataRows(true) : [],\n gObj.getAllMovableDataRows(true), gObj.getAllFrozenRightDataRows(true)\n ];\n}\n/**\n * @param {Element} row - Defines the row\n * @param {number} start - Defines the start index\n * @param {number} end - Defines the end index\n * @returns {void}\n * @hidden\n */\nexport function sliceElements(row, start, end) {\n var cells = row.children;\n var len = cells.length;\n var k = 0;\n for (var i = 0; i < len; i++, k++) {\n if (i >= start && i < end) {\n continue;\n }\n row.removeChild(row.children[parseInt(k.toString(), 10)]);\n k--;\n }\n}\n/**\n * @param {IGrid} gObj - Defines the grid Object\n * @param {Column} col - Defines the column\n * @param {number} rowIndex - Defines the rowindex\n * @returns {Element} Returns the element\n * @hidden\n */\nexport function getCellsByTableName(gObj, col, rowIndex) {\n if (col.getFreezeTableName() === 'movable') {\n return [].slice.call(gObj.getMovableDataRows()[parseInt(rowIndex.toString(), 10)].getElementsByClassName(literals.rowCell));\n }\n else if (col.getFreezeTableName() === literals.frozenRight) {\n return [].slice.call(gObj.getFrozenRightDataRows()[parseInt(rowIndex.toString(), 10)].getElementsByClassName(literals.rowCell));\n }\n else {\n return [].slice.call(gObj.getDataRows()[parseInt(rowIndex.toString(), 10)].getElementsByClassName(literals.rowCell));\n }\n}\n/**\n * @param {IGrid} gObj - Defines the column\n * @param {Column} col - Defines the index\n * @param {number} rowIndex - Defines the rules\n * @param {number} index - Defines the movable column rules\n * @returns {Element} Returns the Element\n * @hidden\n */\nexport function getCellByColAndRowIndex(gObj, col, rowIndex, index) {\n var left = gObj.getFrozenLeftCount();\n var movable = gObj.getMovableColumnsCount();\n index = col.getFreezeTableName() === 'movable' ? index - left : col.getFreezeTableName() === literals.frozenRight\n ? index - (left + movable) : index;\n return getCellsByTableName(gObj, col, rowIndex)[parseInt(index.toString(), 10)];\n}\n/**\n * @param {Column} col - Defines the column\n * @param {number} index - Defines the index\n * @param {Object} rules - Defines the rules\n * @param {Object} mRules - Defines the movable column rules\n * @param {Object} frRules - Defines the Frozen rules\n * @param {number} len - Defines the length\n * @param {boolean} isCustom - Defines custom form validation\n * @returns {void}\n * @hidden\n */\nexport function setValidationRuels(col, index, rules, mRules, frRules, len, isCustom) {\n if (isCustom) {\n rules[getComplexFieldID(col.field)] = col.validationRules;\n }\n else {\n if (col.getFreezeTableName() === literals.frozenLeft\n || (!index && col.getFreezeTableName() === literals.frozenRight) || len === 1) {\n rules[getComplexFieldID(col.field)] = col.validationRules;\n }\n else if (col.getFreezeTableName() === 'movable' || !col.getFreezeTableName()) {\n mRules[getComplexFieldID(col.field)] = col.validationRules;\n }\n else if (col.getFreezeTableName() === literals.frozenRight) {\n frRules[getComplexFieldID(col.field)] = col.validationRules;\n }\n }\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @returns {Element} Returns the Element\n * @hidden\n */\nexport function getMovableTbody(gObj) {\n var tbody;\n if (gObj.isFrozenGrid()) {\n tbody = gObj.frozenRows && gObj.editSettings.newRowPosition === 'Top' ? gObj.getMovableHeaderTbody()\n : gObj.getMovableContentTbody();\n }\n return tbody;\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @returns {Element} Returns the Element\n * @hidden\n */\nexport function getFrozenRightTbody(gObj) {\n var tbody;\n if (gObj.getFrozenMode() === literals.leftRight) {\n tbody = gObj.frozenRows && gObj.editSettings.newRowPosition === 'Top' ? gObj.getFrozenRightHeaderTbody()\n : gObj.getFrozenRightContentTbody();\n }\n return tbody;\n}\n/**\n * @param {Element} tbody - Table body\n * @param {Element} mTbody - Movanle table body\n * @param {Element} frTbody - Frozen right table body\n * @param {Element[]} tr - Table rows\n * @param {Element[]} mTr - Movable table rows\n * @param {Element[]} frTr - Frozen right table rows\n * @param {Function} callBack - Callback function\n * @returns {void}\n * @hidden\n */\nexport function setRowsInTbody(tbody, mTbody, frTbody, tr, mTr, frTr, callBack) {\n if (tbody && tr) {\n callBack(tbody, tr);\n }\n if (mTbody && mTr) {\n callBack(mTbody, mTr);\n }\n if (frTbody && frTr) {\n callBack(frTbody, frTr);\n }\n}\n/**\n * @param {string} numberFormat - Format\n * @param {string} type - Value type\n * @param {boolean} isExcel - Boolean property\n * @param {string} currencyCode - Specifies the currency code to be used for formatting.\n * @returns {string} returns formated value\n * @hidden\n */\nexport function getNumberFormat(numberFormat, type, isExcel, currencyCode) {\n var format;\n var intl = new Internationalization();\n if (type === 'number') {\n try {\n format = intl.getNumberPattern({ format: numberFormat, currency: currencyCode, useGrouping: true }, true);\n }\n catch (error) {\n format = numberFormat;\n }\n }\n else if (type === 'date' || type === 'time' || type === 'datetime') {\n try {\n format = intl.getDatePattern({ skeleton: numberFormat, type: type }, isExcel);\n if (isNullOrUndefined(format)) {\n // eslint-disable-next-line\n throw 'error';\n }\n }\n catch (error) {\n try {\n format = intl.getDatePattern({ format: numberFormat, type: type }, isExcel);\n }\n catch (error) {\n format = numberFormat;\n }\n }\n }\n else {\n format = numberFormat;\n }\n if (type !== 'number') {\n var patternRegex = /G|H|c|'| a|yy|y|EEEE|E/g;\n var mtch_1 = { 'G': '', 'H': 'h', 'c': 'd', '\\'': '\"', ' a': ' AM/PM', 'yy': 'yy', 'y': 'yyyy', 'EEEE': 'dddd', 'E': 'ddd' };\n format = format.replace(patternRegex, function (pattern) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return mtch_1[\"\" + pattern];\n });\n }\n return format;\n}\n/**\n * @param {IGrid} gObj - Grid instance\n * @returns {void}\n * @hidden\n */\nexport function addBiggerDialog(gObj) {\n if (gObj.enableAdaptiveUI) {\n var dialogs = document.getElementsByClassName('e-responsive-dialog');\n for (var i = 0; i < dialogs.length; i++) {\n dialogs[parseInt(i.toString(), 10)].classList.add('e-bigger');\n }\n }\n}\n/**\n * @param {string} value - specifies the trr\n * @param {Object} mapObject - specifies the idx\n * @returns {Object | string} returns object or string\n * @hidden\n */\nexport function performComplexDataOperation(value, mapObject) {\n var returnObj;\n var length = value.split('.').length;\n var splits = value.split('.');\n var duplicateMap = mapObject;\n for (var i = 0; i < length; i++) {\n returnObj = duplicateMap[splits[parseInt(i.toString(), 10)]];\n duplicateMap = returnObj;\n }\n return returnObj;\n}\n/**\n * @param {Object} tr - specifies the trr\n * @param {number} idx - specifies the idx\n * @param {string} displayVal - specifies the displayval\n * @param {Row} rows - specifies the rows\n * @param {IGrid} parent - Grid instance\n * @param {boolean} isContent - check for content renderer\n * @returns {void}\n * @hidden\n */\nexport function setDisplayValue(tr, idx, displayVal, rows, parent, isContent) {\n var trs = Object.keys(tr);\n var actualIndex = idx;\n for (var i = 0; i < trs.length; i++) {\n var td = tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)];\n if (parent && !parent.isFrozenGrid() && !parent.isRowDragable()) {\n td = (!isNullOrUndefined(td) && (parseInt(td.getAttribute('data-colindex'), 10) === idx))\n ? td : tr[parseInt(i.toString(), 10)].querySelector(\"td[data-colindex=\\\"\" + idx + \"\\\"]\");\n if (isNullOrUndefined(td)) {\n continue;\n }\n else {\n idx = td.cellIndex;\n }\n }\n if (tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell').length && td) {\n setStyleAttribute(tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)], { 'display': displayVal });\n if (tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)].classList.contains('e-hide')) {\n removeClass([tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)]], ['e-hide']);\n }\n if (isContent && parent.isRowDragable()) {\n var index = parent.getFrozenColumns() ? idx : idx + 1;\n rows[trs[parseInt(i.toString(), 10)]].cells[parseInt(index.toString(), 10)].visible = displayVal === '' ? true : false;\n }\n else {\n rows[trs[parseInt(i.toString(), 10)]].cells[parseInt(idx.toString(), 10)].visible = displayVal === '' ? true : false;\n if (rows[trs[parseInt(i.toString(), 10)]].cells[parseInt(idx.toString(), 10)].visible === false) {\n tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)].classList.add('e-hide');\n }\n }\n idx = actualIndex;\n }\n }\n}\n// eslint-disable-next-line\n/** @hidden */\nexport function addRemoveEventListener(parent, evt, isOn, module) {\n for (var _i = 0, evt_1 = evt; _i < evt_1.length; _i++) {\n var inst = evt_1[_i];\n if (isOn) {\n parent.on(inst.event, inst.handler, module);\n }\n else {\n parent.off(inst.event, inst.handler);\n }\n }\n}\n// eslint-disable-next-line\n/** @hidden */\nexport function createEditElement(parent, column, classNames, attr) {\n var complexFieldName = getComplexFieldID(column.field);\n attr = Object.assign(attr, {\n id: parent.element.id + complexFieldName,\n name: complexFieldName, 'e-mappinguid': column.uid\n });\n return parent.createElement('input', {\n className: classNames, attrs: attr\n });\n}\n/**\n * @param {IGrid} gObj - Grid instance\n * @param {string} uid - Defines column's uid\n * @returns {Column} returns column model\n * @hidden\n */\nexport function getColumnModelByUid(gObj, uid) {\n var column;\n for (var _i = 0, _a = (gObj.columnModel); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.uid === uid) {\n column = col;\n break;\n }\n }\n return column;\n}\n/**\n * @param {IGrid} gObj - Grid instance\n * @param {string} field - Defines column's uid\n * @returns {Column} returns column model\n * @hidden\n */\nexport function getColumnModelByFieldName(gObj, field) {\n var column;\n if (!gObj.columnModel) {\n gObj.getColumns();\n }\n for (var _i = 0, _a = (gObj.columnModel); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.field === field) {\n column = col;\n break;\n }\n }\n return column;\n}\n/**\n * @param {string} id - Defines component id\n * @param {string[]} evts - Defines events\n * @param {object} handlers - Defines event handlers\n * @param {any} instance - Defines class instance\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function registerEventHandlers(id, evts, handlers, instance) {\n instance.eventHandlers[\"\" + id] = {};\n for (var i = 0; i < evts.length; i++) {\n instance.eventHandlers[\"\" + id][evts[parseInt(i.toString(), 10)]] = handlers[evts[parseInt(i.toString(), 10)]];\n }\n}\n/**\n * @param {any} component - Defines component instance\n * @param {string[]} evts - Defines events\n * @param {any} instance - Defines class instance\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function removeEventHandlers(component, evts, instance) {\n for (var i = 0; i < evts.length; i++) {\n if (component.isDestroyed) {\n break;\n }\n component.removeEventListener(evts[parseInt(i.toString(), 10)], instance.eventHandlers[component.element.id][evts[parseInt(i.toString(), 10)]]);\n }\n}\n/**\n * @param {IGrid | IXLFilter} parent - Defines parent instance\n * @param {string[]} templates - Defines the templates name which are needs to clear\n * @returns {void}\n * @hidden\n */\nexport function clearReactVueTemplates(parent, templates) {\n parent.destroyTemplate(templates);\n if (parent.isReact) {\n parent.renderTemplates();\n }\n}\n/**\n *\n * @param { Element } row - Defines row element\n * @returns { number } row index\n */\nexport function getRowIndexFromElement(row) {\n return parseInt(row.getAttribute(literals.dataRowIndex), 10);\n}\n/**\n *\n * @param { string[] } fields - Defines grouped fields\n * @param { values } values - Defines caption keys\n * @param { any } instance - Defines dynamic class instance\n * @returns { Predicate } returns filter predicate\n */\n// eslint-disable-next-line\nexport function generateExpandPredicates(fields, values, instance) {\n var filterCols = [];\n for (var i = 0; i < fields.length; i++) {\n var column = instance.parent.getColumnByField(fields[parseInt(i.toString(), 10)]);\n var value = values[parseInt(i.toString(), 10)] === 'null' ? null : values[parseInt(i.toString(), 10)];\n var pred = {\n field: fields[parseInt(i.toString(), 10)], predicate: 'or', uid: column.uid, operator: 'equal', type: column.type,\n matchCase: instance.allowCaseSensitive, ignoreAccent: instance.parent.filterSettings.ignoreAccent\n };\n if (value === '' || isNullOrUndefined(value)) {\n filterCols = filterCols.concat(CheckBoxFilterBase.generateNullValuePredicates(pred));\n }\n else {\n filterCols.push(extend({}, { value: value }, pred));\n }\n }\n return CheckBoxFilterBase.getPredicate(filterCols);\n}\n/**\n *\n * @param { Predicate } pred - Defines filter predicate\n * @returns { Predicate[] } Returns formed predicate\n */\nexport function getPredicates(pred) {\n var predicateList = [];\n for (var _i = 0, _a = Object.keys(pred); _i < _a.length; _i++) {\n var prop = _a[_i];\n predicateList.push(pred[\"\" + prop]);\n }\n return predicateList;\n}\n/**\n *\n * @param { number } index - Defines group caption indent\n * @param { Row[] } rowsObject - Defines rows object\n * @returns { { fields: string[], keys: string[] } } Returns grouped keys and values\n */\nexport function getGroupKeysAndFields(index, rowsObject) {\n var fields = [];\n var keys = [];\n for (var i = index; i >= 0; i--) {\n if (rowsObject[parseInt(i.toString(), 10)].isCaptionRow\n && fields.indexOf(rowsObject[parseInt(i.toString(), 10)].data.field) === -1\n && (rowsObject[parseInt(i.toString(), 10)].indent < rowsObject[parseInt(index.toString(), 10)].indent || i === index)) {\n fields.push(rowsObject[parseInt(i.toString(), 10)].data.field);\n keys.push(rowsObject[parseInt(i.toString(), 10)].data.key);\n if (rowsObject[parseInt(i.toString(), 10)].indent === 0) {\n break;\n }\n }\n }\n return { fields: fields, keys: keys };\n}\n// eslint-disable-next-line\n/**\n *\n * @param { number[][] } checkActiveMatrix - Defines matrix to check\n * @param { number[] } checkCellIndex - Defines index to check\n * @param { boolean } next - Defines select next or previous index\n * @returns { number[] } - Returns next active current index\n */\nexport function findCellIndex(checkActiveMatrix, checkCellIndex, next) {\n var activeMatrix = checkActiveMatrix;\n var cellIndex = checkCellIndex;\n var currentCellIndexPass = false;\n if (next) {\n for (var i = cellIndex[0]; i < activeMatrix.length; i++) {\n var rowCell = activeMatrix[parseInt(i.toString(), 10)];\n for (var j = 0; j < rowCell.length; j++) {\n if (currentCellIndexPass && activeMatrix[parseInt(i.toString(), 10)][parseInt(j.toString(), 10)] === 1) {\n cellIndex = [i, j];\n return cellIndex;\n }\n if (!currentCellIndexPass && cellIndex.toString() === [i, j].toString()) {\n currentCellIndexPass = true;\n }\n }\n }\n }\n else {\n for (var i = cellIndex[0]; i >= 0; i--) {\n var rowCell = activeMatrix[parseInt(i.toString(), 10)];\n for (var j = rowCell.length - 1; j >= 0; j--) {\n if (currentCellIndexPass && activeMatrix[parseInt(i.toString(), 10)][parseInt(j.toString(), 10)] === 1) {\n cellIndex = [i, j];\n return cellIndex;\n }\n if (!currentCellIndexPass && cellIndex.toString() === [i, j].toString()) {\n currentCellIndexPass = true;\n }\n }\n }\n }\n return cellIndex;\n}\n/**\n *\n * @param { string } string - Defines string need to capitalized first letter\n * @returns { string } - Returns capitalized first letter string\n */\nexport function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n","/**\n * Common methods used in Gantt\n */\nimport { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, UrlAdaptor, WebApiAdaptor, ODataAdaptor } from '@syncfusion/ej2-data';\nimport { WebMethodAdaptor, CacheAdaptor, RemoteSaveAdaptor, ODataV4Adaptor } from '@syncfusion/ej2-data';\n/**\n * @param {Element} elem .\n * @param {string} selector .\n * @param {boolean} isID .\n * @returns {Element} .\n * @hidden\n */\nexport function parentsUntil(elem, selector, isID) {\n var parent = elem;\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n break;\n }\n parent = parent.parentElement;\n }\n return parent;\n}\n/**\n * @param {ITaskData} ganttProp .\n * @returns {boolean} .\n * @hidden\n */\nexport function isScheduledTask(ganttProp) {\n if (isNullOrUndefined(ganttProp.startDate) && isNullOrUndefined(ganttProp.endDate) &&\n isNullOrUndefined(ganttProp.duration)) {\n return null;\n }\n else if (isNullOrUndefined(ganttProp.startDate) || isNullOrUndefined(ganttProp.endDate) ||\n isNullOrUndefined(ganttProp.duration)) {\n return false;\n }\n else {\n return true;\n }\n}\n/**\n * @param {Gantt} parent .\n * @returns {boolean} .\n * @hidden\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && !(parent.dataSource instanceof DataManager) &&\n 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {object} obj .\n * @returns {object} .\n * @hidden\n */\nexport function getSwapKey(obj) {\n var temp = {};\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n temp[obj[key]] = key;\n }\n return temp;\n}\n/**\n * @param {object} dataSource .\n * @returns {boolean} .\n * @hidden\n */\nexport function isRemoteData(dataSource) {\n if (dataSource instanceof DataManager) {\n var adaptor = dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor || (adaptor instanceof ODataV4Adaptor) ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || (adaptor instanceof RemoteSaveAdaptor) ||\n adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {IGanttData[]} records .\n * @param {boolean} isNotExtend .\n * @param {ITaskAddedEventArgs} eventArgs .\n * @param {Gantt} parent .\n * @returns {object[]} .\n * @hidden\n */\nexport function getTaskData(records, isNotExtend, eventArgs, parent) {\n if (eventArgs) {\n var result = void 0;\n for (var i = 0; i < records.length; i++) {\n var data = void 0;\n // eslint-disable-next-line\n data = isNotExtend ? (records[i].taskData) : extend({}, records[i].taskData, {}, true);\n result = (data);\n }\n return result;\n }\n else {\n var result = [];\n for (var i = 0; i < records.length; i++) {\n var data = void 0;\n if (!isNullOrUndefined(parent) && parent.timezone) {\n updateDates(records[i], parent);\n }\n // eslint-disable-next-line\n data = isNotExtend ? (records[i].taskData) : extend({}, records[i].taskData, {}, true);\n result.push(data);\n }\n return result;\n }\n}\n/**\n * @param {IGanttData} record .\n * @param {Gantt} parent .\n * @returns {null} .\n * @hidden\n */\nexport function updateDates(record, parent) {\n // let startDate: Date = (record as IGanttData).taskData[parent.taskFields.startDate];\n record.taskData[parent.taskFields.startDate] = parent.dateValidationModule.remove(record.ganttProperties.startDate, parent.timezone);\n if (parent.taskFields.endDate != null) {\n record.taskData[parent.taskFields.endDate] = parent.dateValidationModule.remove(record.ganttProperties.endDate, parent.timezone);\n }\n if (parent.taskFields.baselineEndDate || parent.taskFields.baselineStartDate) {\n record.taskData[parent.taskFields.baselineStartDate] = parent.dateValidationModule.remove(record.ganttProperties.baselineStartDate, parent.timezone);\n record.taskData[parent.taskFields.baselineEndDate] = parent.dateValidationModule.remove(record.ganttProperties.baselineEndDate, parent.timezone);\n }\n return null;\n}\n/**\n * @param {string} str .\n * @param {string[]} args .\n * @returns {string} .\n * @hidden\n */\nexport function formatString(str, args) {\n var regx;\n for (var i = 0; i < args.length; i++) {\n // eslint-disable-next-line security/detect-non-literal-regexp\n regx = new RegExp('\\\\{' + (i) + '\\\\}', 'gm');\n str = str.replace(regx, args[i].toString());\n }\n return str;\n}\n/**\n * @param {any} value .\n * @param {string} key1 .\n * @param {any} collection .\n * @param {string} key2\n * @returns {number} .\n * @hidden\n */\n/* eslint-disable-next-line */\nexport function getIndex(value, key1, collection, key2) {\n var index = -1;\n for (var i = 0; i < collection.length; i++) {\n if (getValue(key1, collection[i]) === getValue(key1, value) && isNullOrUndefined(key2)\n || (!isNullOrUndefined(key2) && getValue(key1, collection[i]) === getValue(key1, value)\n && getValue(key2, collection[i]) === getValue(key2, value))) {\n index = i;\n break;\n }\n }\n return index;\n}\n/**\n * @param {number} value .\n * @returns {number} .\n * @hidden\n */\nexport function pixelToPoint(value) {\n return (value * 76) / 92;\n}\n/**\n * @param {number} value .\n * @returns {number} .\n * @hidden\n */\nexport function pointToPixel(value) {\n return (value * 92) / 76;\n}\nvar uid = 0;\n/**\n * @returns {number} .\n * @hidden\n */\nexport function getUid() {\n return uid++;\n}\n","import { isNullOrUndefined, getValue, setValue } from '@syncfusion/ej2-base';\n/**\n * Date processor is used to handle date of task data.\n */\nvar DateProcessor = /** @class */ (function () {\n function DateProcessor(parent) {\n this.parent = parent;\n }\n /**\n * @param {ITaskData} ganttProp .\n * @returns {boolean} .\n */\n DateProcessor.prototype.isValidateNonWorkDays = function (ganttProp) {\n return (!isNullOrUndefined(ganttProp) && ganttProp.isAutoSchedule &&\n (!this.parent.includeWeekend || this.parent.totalHolidayDates.length > 0)) ||\n (isNullOrUndefined(ganttProp) && (!this.parent.includeWeekend || this.parent.totalHolidayDates.length > 0));\n };\n /**\n * Method to convert given date value as valid start date\n *\n * @param {Date} date .\n * @param {ITaskData} ganttProp .\n * @param {boolean} validateAsMilestone .\n * @param {boolean} isLoad .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.checkStartDate = function (date, ganttProp, validateAsMilestone, isLoad) {\n if (isNullOrUndefined(date)) {\n return null;\n }\n var cloneStartDate = new Date(date.getTime());\n var hour = this.getSecondsInDecimal(cloneStartDate);\n validateAsMilestone = isNullOrUndefined(validateAsMilestone) ? !isNullOrUndefined(ganttProp) ?\n ganttProp.isMilestone : false : validateAsMilestone;\n if (hour < this.parent.defaultStartTime && (!validateAsMilestone || isLoad)) {\n this.setTime(this.parent.defaultStartTime, cloneStartDate);\n }\n else if (hour < this.parent.defaultStartTime && validateAsMilestone) {\n this.setTime(this.parent.defaultStartTime, cloneStartDate);\n }\n else if ((hour === this.parent.defaultEndTime && (!ganttProp || !validateAsMilestone)) || hour > this.parent.defaultEndTime) {\n cloneStartDate.setDate(cloneStartDate.getDate() + 1);\n this.setTime(this.parent.defaultStartTime, cloneStartDate);\n }\n else if (hour > this.parent.defaultStartTime && hour < this.parent.defaultEndTime) {\n for (var index = 0; index < this.parent.workingTimeRanges.length; index++) {\n var value = this.parent.workingTimeRanges[index];\n if (hour >= value.to && (this.parent.workingTimeRanges[index + 1] &&\n hour < this.parent.workingTimeRanges[index + 1].from)) {\n // milestone can fall at end any interval time\n if ((hour === value.to && (!ganttProp || !validateAsMilestone)) || hour !== value.to) {\n this.setTime(this.parent.workingTimeRanges[index + 1].from, cloneStartDate);\n }\n break;\n }\n }\n }\n var tStartDate;\n if (this.parent.autoCalculateDateScheduling) {\n do {\n tStartDate = new Date(cloneStartDate.getTime());\n var holidayLength = this.parent.totalHolidayDates.length;\n // check holidays and weekends\n if (this.isValidateNonWorkDays(ganttProp)) {\n var startTime = (!validateAsMilestone || isLoad) ? this.parent.defaultStartTime : this.parent.defaultEndTime;\n if (!this.parent.includeWeekend) {\n var tempDate = new Date(cloneStartDate.getTime());\n cloneStartDate = this.getNextWorkingDay(cloneStartDate);\n if (tempDate.getTime() !== cloneStartDate.getTime()) {\n this.setTime(startTime, cloneStartDate);\n }\n }\n for (var count = 0; count < holidayLength; count++) {\n var holidayFrom = this.getDateFromFormat(new Date(this.parent.totalHolidayDates[count]));\n var holidayTo = new Date(holidayFrom.getTime());\n holidayFrom.setHours(0, 0, 0, 0);\n holidayTo.setHours(23, 59, 59, 59);\n if (cloneStartDate.getTime() >= holidayFrom.getTime() && cloneStartDate.getTime() < holidayTo.getTime()) {\n cloneStartDate.setDate(cloneStartDate.getDate() + 1);\n this.setTime(startTime, cloneStartDate);\n }\n }\n }\n } while (tStartDate.getTime() !== cloneStartDate.getTime());\n return new Date(cloneStartDate.getTime());\n }\n else {\n return new Date(cloneStartDate.getTime());\n }\n };\n /**\n * To update given date value to valid end date\n *\n * @param {Date} date .\n * @param {ITaskData} ganttProp .\n * @param {boolean} validateAsMilestone .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.checkEndDate = function (date, ganttProp, validateAsMilestone) {\n if (isNullOrUndefined(date)) {\n return null;\n }\n var cloneEndDate = new Date(date.getTime());\n var hour = this.getSecondsInDecimal(cloneEndDate);\n if (hour > this.parent.defaultEndTime) {\n this.setTime(this.parent.defaultEndTime, cloneEndDate);\n }\n else if (hour <= this.parent.defaultStartTime && !validateAsMilestone) {\n cloneEndDate.setDate(cloneEndDate.getDate() - 1);\n this.setTime(this.parent.defaultEndTime, cloneEndDate);\n }\n else if (hour > this.parent.defaultStartTime && hour < this.parent.defaultEndTime) {\n for (var index = 0; index < this.parent.workingTimeRanges.length; index++) {\n var value = this.parent.workingTimeRanges[index];\n if (hour > value.to && (this.parent.workingTimeRanges[index + 1] &&\n hour <= this.parent.workingTimeRanges[index + 1].from)) {\n this.setTime(this.parent.workingTimeRanges[index].to, cloneEndDate);\n break;\n }\n }\n }\n var tempCheckDate;\n if (this.parent.autoCalculateDateScheduling) {\n do {\n tempCheckDate = new Date(cloneEndDate.getTime());\n var holidayLength = this.parent.totalHolidayDates.length;\n if (this.isValidateNonWorkDays(ganttProp)) {\n if (!this.parent.includeWeekend) {\n var tempDate = new Date(cloneEndDate.getTime());\n cloneEndDate = this.getPreviousWorkingDay(cloneEndDate);\n if (tempDate.getTime() !== cloneEndDate.getTime()) {\n this.setTime(this.parent.defaultEndTime, cloneEndDate);\n }\n }\n for (var count = 0; count < holidayLength; count++) {\n var holidayFrom = this.getDateFromFormat(new Date(this.parent.totalHolidayDates[count]));\n var holidayTo = new Date(holidayFrom.getTime());\n var tempHoliday = new Date(cloneEndDate.getTime());\n tempHoliday.setMinutes(cloneEndDate.getMilliseconds() - 2);\n holidayFrom.setHours(0, 0, 0, 0);\n holidayTo.setHours(23, 59, 59, 59);\n if (cloneEndDate.getTime() >= holidayFrom.getTime() && cloneEndDate.getTime() < holidayTo.getTime() ||\n tempHoliday.getTime() >= holidayFrom.getTime() && tempHoliday.getTime() < holidayTo.getTime()) {\n cloneEndDate.setDate(cloneEndDate.getDate() - 1);\n if (!(cloneEndDate.getTime() === holidayFrom.getTime() && this.parent.defaultEndTime === 86400 &&\n this.getSecondsInDecimal(cloneEndDate) === 0)) {\n this.setTime(this.parent.defaultEndTime, cloneEndDate);\n }\n }\n }\n }\n } while (tempCheckDate.getTime() !== cloneEndDate.getTime());\n return new Date(cloneEndDate.getTime());\n }\n else {\n if (!isNullOrUndefined(cloneEndDate)) {\n this.setTime(this.parent.defaultEndTime, cloneEndDate);\n }\n return new Date(cloneEndDate.getTime());\n }\n };\n /**\n * To validate the baseline start date\n *\n * @param {Date} date .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.checkBaselineStartDate = function (date) {\n if (isNullOrUndefined(date)) {\n return null;\n }\n else {\n var cloneDate = new Date(date.getTime());\n var hour = this.getSecondsInDecimal(cloneDate);\n if (hour < this.parent.defaultStartTime) {\n this.setTime(this.parent.defaultStartTime, cloneDate);\n }\n else if (hour > this.parent.defaultEndTime) {\n cloneDate.setDate(cloneDate.getDate() + 1);\n this.setTime(this.parent.defaultStartTime, cloneDate);\n }\n else if (hour > this.parent.defaultStartTime && hour < this.parent.defaultEndTime) {\n for (var i = 0; i < this.parent.workingTimeRanges.length; i++) {\n var value = this.parent.workingTimeRanges[i];\n if (hour > value.to && (this.parent.workingTimeRanges[i + 1] &&\n hour < this.parent.workingTimeRanges[i + 1].from)) {\n this.setTime(this.parent.workingTimeRanges[i + 1].from, cloneDate);\n break;\n }\n }\n }\n return cloneDate;\n }\n };\n /**\n * To validate baseline end date\n *\n * @param {Date} date .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.checkBaselineEndDate = function (date, ganttProp) {\n if (isNullOrUndefined(date)) {\n return null;\n }\n else {\n var cloneDate = new Date(date.getTime());\n var hour = this.getSecondsInDecimal(cloneDate);\n if (hour > this.parent.defaultEndTime) {\n this.setTime(this.parent.defaultEndTime, cloneDate);\n }\n else if (hour < this.parent.defaultStartTime && !isNullOrUndefined(ganttProp) && !ganttProp.isMilestone) {\n cloneDate.setDate(cloneDate.getDate() - 1);\n this.setTime(this.parent.defaultEndTime, cloneDate);\n }\n else if (hour > this.parent.defaultStartTime && hour < this.parent.defaultEndTime) {\n for (var i = 0; i < this.parent.workingTimeRanges.length; i++) {\n var value = this.parent.workingTimeRanges[i];\n if (hour > value.to && (this.parent.workingTimeRanges[i + 1] && hour <= this.parent.workingTimeRanges[i + 1].from)) {\n this.setTime(this.parent.workingTimeRanges[i].to, cloneDate);\n break;\n }\n }\n }\n if (ganttProp && ganttProp.baselineStartDate && cloneDate &&\n ganttProp.baselineStartDate.getTime() > cloneDate.getTime()) {\n cloneDate.setDate(cloneDate.getDate() + 1);\n }\n return cloneDate;\n }\n };\n /**\n * To calculate start date value from duration and end date\n *\n * @param {IGanttData} ganttData - Defines the gantt data.\n * @returns {void} .\n * @private\n */\n DateProcessor.prototype.calculateStartDate = function (ganttData) {\n var ganttProp = ganttData.ganttProperties;\n var tempStartDate = null;\n if (!isNullOrUndefined(ganttProp.endDate) && !isNullOrUndefined(ganttProp.duration)) {\n tempStartDate = this.getStartDate(ganttProp.endDate, ganttProp.duration, ganttProp.durationUnit, ganttProp);\n }\n this.parent.setRecordValue('startDate', tempStartDate, ganttProp, true);\n if (this.parent.taskFields.startDate) {\n this.parent.dataOperation.updateMappingData(ganttData, 'startDate');\n }\n };\n /**\n *\n * @param {IGanttData} ganttData - Defines the gantt data.\n * @returns {void} .\n * @private\n */\n DateProcessor.prototype.calculateEndDate = function (ganttData) {\n var ganttProp = ganttData.ganttProperties;\n var tempEndDate = null;\n if (!isNullOrUndefined(ganttProp.startDate)) {\n if (!isNullOrUndefined(ganttProp.endDate) && isNullOrUndefined(ganttProp.duration)) {\n if (this.compareDates(ganttProp.startDate, ganttProp.endDate) === 1) {\n this.parent.setRecordValue('startDate', new Date(ganttProp.endDate.getTime()), ganttProp, true);\n this.setTime(this.parent.defaultStartTime, ganttProp.startDate);\n }\n this.calculateDuration(ganttData);\n }\n if (!isNullOrUndefined(ganttProp.duration)) {\n var duration = !isNullOrUndefined(ganttProp.segments) && ganttProp.segments.length > 0 ?\n this.totalDuration(ganttProp.segments) : ganttProp.duration;\n tempEndDate = this.getEndDate(ganttProp.startDate, duration, ganttProp.durationUnit, ganttProp, false);\n }\n this.parent.setRecordValue('endDate', tempEndDate, ganttProp, true);\n }\n else {\n tempEndDate = ganttData[this.parent.taskFields.endDate];\n if (!isNullOrUndefined(tempEndDate)) {\n this.setTime(this.parent.defaultEndTime, tempEndDate);\n }\n this.parent.setRecordValue('endDate', tempEndDate, ganttProp, true);\n }\n if (this.parent.taskFields.endDate) {\n this.parent.dataOperation.updateMappingData(ganttData, 'endDate');\n }\n };\n DateProcessor.prototype.totalDuration = function (segments) {\n var duration = 0;\n for (var i = 0; i < segments.length; i++) {\n duration += segments[i].duration + segments[i].offsetDuration;\n }\n return duration;\n };\n /**\n * To calculate duration from start date and end date\n *\n * @param {IGanttData} ganttData - Defines the gantt data.\n * @returns {void} .\n */\n DateProcessor.prototype.calculateDuration = function (ganttData) {\n var ganttProperties = ganttData.ganttProperties;\n var tDuration;\n if (!isNullOrUndefined(ganttProperties.segments) && ganttProperties.segments.length > 0 &&\n !isNullOrUndefined(this.parent.editModule.taskbarEditModule)) {\n tDuration = this.parent.editModule.taskbarEditModule.sumOfDuration(ganttProperties.segments);\n }\n else {\n if ((!isNullOrUndefined(this.parent.taskFields.milestone)) && (!isNullOrUndefined(ganttProperties.startDate)) && !isNullOrUndefined(ganttProperties.endDate) &&\n (ganttProperties.startDate).getTime() === (ganttProperties.endDate).getTime() && !isNullOrUndefined(ganttData.taskData[this.parent.taskFields.milestone])) {\n tDuration = 1;\n }\n else {\n tDuration = this.getDuration(ganttProperties.startDate, ganttProperties.endDate, ganttProperties.durationUnit, ganttProperties.isAutoSchedule, ganttProperties.isMilestone);\n }\n }\n this.parent.setRecordValue('duration', tDuration, ganttProperties, true);\n var col = this.parent.columnByField[this.parent.columnMapping.duration];\n if (!isNullOrUndefined(this.parent.editModule) && !isNullOrUndefined(this.parent.editModule.cellEditModule) &&\n !this.parent.editModule.cellEditModule.isCellEdit && !isNullOrUndefined(col)) {\n if (!isNullOrUndefined(col.edit) && !isNullOrUndefined(col.edit.read)) {\n var dialog = this.parent.editModule.dialogModule.dialog;\n if (!isNullOrUndefined(dialog)) {\n var textBox = dialog.querySelector('#' + this.parent.element.id + 'Duration')\n .ej2_instances[0];\n if (!isNullOrUndefined(textBox) && textBox.value !== tDuration.toString()) {\n textBox.value = tDuration.toString();\n textBox.dataBind();\n }\n }\n }\n if (this.parent.taskFields.duration) {\n this.parent.dataOperation.updateMappingData(ganttData, 'duration');\n if (this.parent.taskFields.durationUnit) {\n this.parent.dataOperation.updateMappingData(ganttData, 'durationUnit');\n }\n }\n }\n };\n /**\n *\n * @param {Date} sDate Method to get total nonworking time between two date values\n * @param {Date} eDate .\n * @param {boolean} isAutoSchedule .\n * @param {boolean} isCheckTimeZone .\n * @returns {number} .\n */\n DateProcessor.prototype.getNonworkingTime = function (sDate, eDate, isAutoSchedule, isCheckTimeZone) {\n isCheckTimeZone = isNullOrUndefined(isCheckTimeZone) ? true : isCheckTimeZone;\n var weekendCount = (!this.parent.includeWeekend && this.parent.autoCalculateDateScheduling) && isAutoSchedule ? this.getWeekendCount(sDate, eDate) : 0;\n var totalHours = this.getNumberOfSeconds(sDate, eDate, isCheckTimeZone);\n var holidaysCount = isAutoSchedule && this.parent.autoCalculateDateScheduling ? this.getHolidaysCount(sDate, eDate) : 0;\n var totWorkDays = (totalHours - (weekendCount * 86400) - (holidaysCount * 86400)) / 86400; // working days between two dates\n var nonWorkHours = this.getNonWorkingSecondsOnDate(sDate, eDate, isAutoSchedule);\n var totalNonWorkTime = (totWorkDays * (86400 - this.parent.secondsPerDay)) +\n (weekendCount * 86400) + (holidaysCount * 86400) + nonWorkHours;\n return totalNonWorkTime;\n };\n /**\n *\n * @param {Date} startDate .\n * @param {Date} endDate .\n * @param {string} durationUnit .\n * @param {boolean} isAutoSchedule .\n * @param {boolean} isMilestone .\n * @param {boolean} isCheckTimeZone .\n * @returns {number} .\n * @private\n */\n DateProcessor.prototype.getDuration = function (startDate, endDate, durationUnit, isAutoSchedule, isMilestone, isCheckTimeZone) {\n if (isNullOrUndefined(startDate) || isNullOrUndefined(endDate)) {\n return null;\n }\n isCheckTimeZone = isNullOrUndefined(isCheckTimeZone) ? true : isCheckTimeZone;\n var durationValue = 0;\n var timeDiff = this.getTimeDifference(startDate, endDate, isCheckTimeZone) / 1000;\n var nonWorkHours = this.getNonworkingTime(startDate, endDate, isAutoSchedule, isCheckTimeZone);\n var durationHours = timeDiff - nonWorkHours;\n if (isMilestone && this.parent.getFormatedDate(startDate) === this.parent.getFormatedDate(endDate)) {\n durationValue = 0;\n }\n else {\n if (!durationUnit || durationUnit === 'day') {\n durationValue = durationHours / this.parent.secondsPerDay;\n }\n else if (durationUnit === 'minute') {\n durationValue = durationHours / 60;\n }\n else {\n durationValue = durationHours / 3600;\n }\n }\n return parseFloat(durationValue.toString());\n };\n /**\n *\n * @param {number} duration .\n * @param {string} durationUnit .\n * @returns {number} .\n */\n DateProcessor.prototype.getDurationAsSeconds = function (duration, durationUnit) {\n var value = 0;\n if (!durationUnit || durationUnit.toLocaleLowerCase() === 'day') {\n value = this.parent.secondsPerDay * duration;\n }\n else if (durationUnit.toLocaleLowerCase() === 'hour') {\n value = duration * 3600;\n }\n else {\n value = duration * 60;\n }\n return value;\n };\n /**\n * To get date from start date and duration\n *\n * @param {Date} startDate .\n * @param {number} duration .\n * @param {string} durationUnit .\n * @param {ITaskData} ganttProp .\n * @param {boolean} validateAsMilestone .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.getEndDate = function (startDate, duration, durationUnit, ganttProp, validateAsMilestone) {\n var tempStart = new Date(startDate.getTime());\n var endDate = new Date(startDate.getTime());\n var secondDuration = this.getDurationAsSeconds(duration, durationUnit);\n var nonWork = 0;\n var workHours = 0;\n while (secondDuration > 0) {\n endDate.setSeconds(endDate.getSeconds() + secondDuration);\n nonWork = this.getNonworkingTime(tempStart, endDate, ganttProp.isAutoSchedule, true);\n workHours = secondDuration - nonWork;\n secondDuration = secondDuration - workHours;\n if (secondDuration > 0) {\n endDate = this.checkStartDate(endDate, ganttProp, validateAsMilestone);\n }\n tempStart = new Date(endDate.getTime());\n }\n return endDate;\n };\n /**\n *\n * @param {Date} endDate To calculate start date vale from end date and duration\n * @param {number} duration .\n * @param {string} durationUnit .\n * @param {ITaskData} ganttProp .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.getStartDate = function (endDate, duration, durationUnit, ganttProp, fromValidation) {\n var tempEnd = new Date(endDate.getTime());\n var startDate = new Date(endDate.getTime());\n var secondDuration = this.getDurationAsSeconds(duration, durationUnit);\n var nonWork = 0;\n var workHours = 0;\n while (secondDuration > 0) {\n startDate.setSeconds(startDate.getSeconds() - secondDuration);\n nonWork = this.getNonworkingTime(startDate, tempEnd, ganttProp.isAutoSchedule, true);\n workHours = secondDuration - nonWork;\n secondDuration = secondDuration - workHours;\n if (secondDuration > 0) {\n tempEnd = this.checkEndDate(startDate, ganttProp);\n }\n tempEnd = new Date(startDate.getTime());\n }\n /* To render the milestone in proper date while loading */\n if (fromValidation && ganttProp.isMilestone) {\n startDate.setDate(startDate.getDate() - 1);\n this.parent.dateValidationModule.setTime(this.parent.defaultEndTime, startDate);\n startDate = this.parent.dateValidationModule.checkStartDate(startDate, ganttProp, true);\n }\n return startDate;\n };\n /**\n * @param {ITaskData} ganttProp .\n * @param {boolean} isLoad .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.getProjectStartDate = function (ganttProp, isLoad) {\n if (!isNullOrUndefined(this.parent.cloneProjectStartDate)) {\n if (typeof this.parent.cloneProjectStartDate === 'string') {\n this.parent.cloneProjectStartDate = this.getDateFromFormat(this.parent.cloneProjectStartDate);\n }\n var cloneStartDate = this.checkStartDate(this.parent.cloneProjectStartDate);\n this.parent.cloneProjectStartDate = cloneStartDate;\n return new Date(cloneStartDate.getTime());\n }\n else if (!isNullOrUndefined(this.parent.projectStartDate)) {\n var cloneStartDate = this.getDateFromFormat(this.parent.projectStartDate);\n this.parent.cloneProjectStartDate = this.checkStartDate(cloneStartDate);\n }\n else if (!isNullOrUndefined(isLoad)) {\n var flatData = this.parent.flatData;\n var minStartDate = void 0;\n if (flatData.length > 0) {\n minStartDate = flatData[0].ganttProperties.startDate;\n }\n else {\n minStartDate = new Date();\n minStartDate.setHours(0, 0, 0, 0);\n }\n for (var index = 1; index < flatData.length; index++) {\n var startDate = flatData[index].ganttProperties.startDate;\n if (!isNullOrUndefined(startDate) && this.compareDates(startDate, minStartDate) === -1) {\n minStartDate = startDate;\n }\n }\n this.parent.cloneProjectStartDate = this.checkStartDate(minStartDate, ganttProp);\n }\n else {\n return null;\n }\n return new Date(this.parent.cloneProjectStartDate.getTime());\n };\n /**\n * @param {ITaskData} ganttProp .\n * @param {boolean} isAuto .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.getValidStartDate = function (ganttProp, isAuto) {\n var sDate = null;\n var startDate = isAuto ? ganttProp.autoStartDate : ganttProp.startDate;\n var endDate = isAuto ? ganttProp.autoEndDate : ganttProp.endDate;\n var duration = !ganttProp.isAutoSchedule && ganttProp.autoDuration ? ganttProp.autoDuration : ganttProp.duration;\n if (isNullOrUndefined(startDate)) {\n if (!isNullOrUndefined(endDate)) {\n sDate = new Date(endDate.getTime());\n this.setTime(this.parent.defaultStartTime, sDate);\n }\n else if (!isNullOrUndefined(duration)) {\n sDate = this.getProjectStartDate(ganttProp);\n }\n }\n else {\n sDate = new Date(startDate.getTime());\n }\n return sDate;\n };\n /**\n *\n * @param {ITaskData} ganttProp .\n * @param {boolean} isAuto .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.getValidEndDate = function (ganttProp, isAuto) {\n var eDate = null;\n var startDate = isAuto ? ganttProp.autoStartDate : ganttProp.startDate;\n var endDate = isAuto ? ganttProp.autoEndDate : ganttProp.endDate;\n var duration = isAuto ? ganttProp.autoDuration : ganttProp.duration;\n if (isNullOrUndefined(endDate)) {\n if (!isNullOrUndefined(startDate)) {\n if (ganttProp.isMilestone) {\n eDate = this.checkStartDate(startDate);\n }\n else {\n eDate = new Date(startDate.getTime());\n this.setTime(this.parent.defaultEndTime, eDate);\n }\n }\n else if (!isNullOrUndefined(duration)) {\n var sDate = this.getValidStartDate(ganttProp);\n if (sDate) {\n eDate = this.getEndDate(sDate, duration, ganttProp.durationUnit, ganttProp, false);\n }\n }\n }\n else {\n eDate = new Date(endDate.getTime());\n }\n return eDate;\n };\n /**\n * @returns {number} .\n * @private\n */\n DateProcessor.prototype.getSecondsPerDay = function () {\n var dayWorkingTime = this.parent.dayWorkingTime;\n var length = dayWorkingTime.length;\n var totalSeconds = 0;\n var startDate = new Date('10/11/2018');\n this.parent.nonWorkingHours = [];\n var nonWorkingHours = this.parent.nonWorkingHours;\n this.parent.workingTimeRanges = [];\n var workingTimeRanges = this.parent.workingTimeRanges;\n this.parent.nonWorkingTimeRanges = [];\n var nonWorkingTimeRanges = this.parent.nonWorkingTimeRanges;\n for (var count = 0; count < length; count++) {\n var currentRange = dayWorkingTime[count];\n if (!isNullOrUndefined(currentRange.from) && !isNullOrUndefined(currentRange.to)) {\n startDate.setHours(0, 0, 0, 0);\n var tempDate = new Date(startDate.getTime());\n startDate.setTime(startDate.getTime() + (currentRange.from * 3600000));\n var startHour = new Date(startDate.getTime());\n tempDate.setTime(tempDate.getTime() + (currentRange.to * 3600000));\n var endHour = new Date(tempDate.getTime());\n var timeDiff = endHour.getTime() - startHour.getTime();\n var sdSeconds = this.getSecondsInDecimal(startHour);\n var edSeconds = this.getSecondsInDecimal(endHour);\n if (edSeconds === 0) {\n edSeconds = 86400;\n }\n totalSeconds += timeDiff / 1000;\n if (count === 0) {\n this.parent.defaultStartTime = sdSeconds;\n }\n if (count === length - 1) {\n this.parent.defaultEndTime = edSeconds;\n }\n if (count > 0) {\n nonWorkingHours.push(nonWorkingHours[nonWorkingHours.length - 1] +\n sdSeconds - workingTimeRanges[count - 1].to);\n if (workingTimeRanges[count - 1].to < sdSeconds) {\n nonWorkingTimeRanges.push({\n from: workingTimeRanges[count - 1].to, to: sdSeconds, isWorking: false,\n interval: (sdSeconds - workingTimeRanges[count - 1].to)\n });\n }\n }\n else {\n nonWorkingHours.push(0);\n nonWorkingTimeRanges.push({ from: 0, to: sdSeconds, isWorking: false, interval: sdSeconds });\n }\n workingTimeRanges.push({ from: sdSeconds, to: edSeconds });\n nonWorkingTimeRanges.push({\n from: sdSeconds, to: edSeconds, isWorking: true, interval: (edSeconds - sdSeconds)\n });\n }\n }\n if (this.parent.defaultEndTime / 3600 !== 24) {\n nonWorkingTimeRanges.push({\n from: this.parent.defaultEndTime, to: 86400,\n isWorking: false, interval: 86400 - this.parent.defaultEndTime\n });\n }\n return totalSeconds;\n };\n /**\n *\n * @param {string} value .\n * @param {boolean} isFromDialog .\n * @returns {object} .\n * @private\n */\n // eslint-disable-next-line\n DateProcessor.prototype.getDurationValue = function (value, isFromDialog) {\n var durationUnit = null;\n var duration = null;\n if (typeof value === 'string') {\n var values = value.match(/(\\d*\\.*\\d+|.+$)/g);\n if (values && values.length <= 2) {\n duration = parseFloat(values[0].toString().trim());\n var unit = values[1] ? values[1].toString().trim().toLowerCase() : null;\n if (getValue('minute', this.parent.durationUnitEditText).indexOf(unit) !== -1) {\n durationUnit = 'minute';\n }\n else if (getValue('hour', this.parent.durationUnitEditText).indexOf(unit) !== -1) {\n durationUnit = 'hour';\n }\n else if (getValue('day', this.parent.durationUnitEditText).indexOf(unit) !== -1) {\n durationUnit = 'day';\n }\n }\n }\n else {\n duration = value;\n durationUnit = null;\n }\n var output = {\n duration: duration,\n durationUnit: durationUnit\n };\n return output;\n };\n /**\n *\n * @param {Date} date .\n * @returns {Date} .\n */\n DateProcessor.prototype.getNextWorkingDay = function (date) {\n var dayIndex = date.getDay();\n if (this.parent.nonWorkingDayIndex.indexOf(dayIndex) !== -1) {\n date.setDate(date.getDate() + 1);\n date = this.getNextWorkingDay(date);\n return date;\n }\n else {\n return date;\n }\n };\n /**\n * get weekend days between two dates without including args dates\n *\n * @param {Date} startDate .\n * @param {Date} endDate .\n * @returns {number} .\n */\n DateProcessor.prototype.getWeekendCount = function (startDate, endDate) {\n var weekendCount = 0;\n var sDate = new Date(startDate.getTime());\n var eDate = new Date(endDate.getTime());\n sDate.setHours(0, 0, 0, 0);\n sDate.setDate(sDate.getDate() + 1);\n eDate.setHours(0, 0, 0, 0);\n while (sDate.getTime() < eDate.getTime()) {\n if (this.parent.nonWorkingDayIndex.indexOf(sDate.getDay()) !== -1) {\n weekendCount += 1;\n }\n sDate.setDate(sDate.getDate() + 1);\n }\n return weekendCount;\n };\n /**\n *\n * @param {Date} startDate .\n * @param {Date} endDate .\n * @param {boolean} isCheckTimeZone .\n * @returns {number} .\n */\n DateProcessor.prototype.getNumberOfSeconds = function (startDate, endDate, isCheckTimeZone) {\n var sDate = new Date(startDate.getTime());\n var eDate = new Date(endDate.getTime());\n var timeDiff = 0;\n sDate.setDate(sDate.getDate() + 1);\n sDate.setHours(0, 0, 0, 0);\n eDate.setHours(0, 0, 0, 0);\n if (sDate.getTime() < eDate.getTime()) {\n timeDiff = (this.getTimeDifference(sDate, eDate, isCheckTimeZone)) / 1000;\n }\n if (timeDiff % 86400 !== 0) {\n timeDiff = timeDiff - (timeDiff % 86400) + 86400;\n }\n return timeDiff;\n };\n /**\n *\n * @param {Date} startDate .\n * @param {Date} endDate .\n * @returns {number} .\n */\n DateProcessor.prototype.getHolidaysCount = function (startDate, endDate) {\n var holidaysCount = 0;\n var holidays = this.parent.totalHolidayDates;\n var sDate = new Date(startDate.getTime());\n var eDate = new Date(endDate.getTime());\n sDate.setDate(sDate.getDate() + 1);\n sDate.setHours(0, 0, 0, 0);\n eDate.setHours(0, 0, 0, 0);\n if (sDate.getTime() < eDate.getTime()) {\n for (var i = 0; i < holidays.length; i++) {\n var currentHoliday = this.getDateFromFormat(new Date(holidays[i]));\n if (sDate.getTime() <= currentHoliday.getTime() && eDate.getTime() > currentHoliday.getTime()) {\n if ((!this.parent.includeWeekend && this.parent.nonWorkingDayIndex.indexOf(currentHoliday.getDay()) === -1) ||\n this.parent.includeWeekend) {\n holidaysCount += 1;\n }\n }\n }\n }\n return holidaysCount;\n };\n /**\n * @returns {number[]} .\n * @private\n */\n DateProcessor.prototype.getHolidayDates = function () {\n var holidays = this.parent.holidays;\n var holidayDates = [];\n for (var i = 0; i < holidays.length; i++) {\n var from = this.getDateFromFormat(holidays[i].from);\n var to = this.getDateFromFormat(holidays[i].to);\n if (isNullOrUndefined(from) && isNullOrUndefined(to)) {\n continue;\n }\n else if (isNullOrUndefined(from) || isNullOrUndefined(to)) {\n var tempDate = from ? from : to;\n tempDate.setHours(0, 0, 0, 0);\n if (holidayDates.indexOf(tempDate.getTime()) === -1) {\n holidayDates.push(tempDate.getTime());\n }\n }\n else {\n while (from <= to) {\n from.setHours(0, 0, 0, 0);\n if (holidayDates.indexOf(from.getTime()) === -1) {\n holidayDates.push(from.getTime());\n }\n from.setDate(from.getDate() + 1);\n }\n }\n }\n return holidayDates;\n };\n /**\n * @param {Date} date .\n * @param {boolean} checkWeekEnd .\n * @returns {boolean} .\n * @private\n */\n /*Check given date is on holidays*/\n DateProcessor.prototype.isOnHolidayOrWeekEnd = function (date, checkWeekEnd) {\n checkWeekEnd = !isNullOrUndefined(checkWeekEnd) ? checkWeekEnd : this.parent.includeWeekend;\n if (!this.parent.autoCalculateDateScheduling) {\n checkWeekEnd = true;\n }\n if (!checkWeekEnd && this.parent.nonWorkingDayIndex.indexOf(date.getDay()) !== -1) {\n return true;\n }\n var holidays = this.parent.totalHolidayDates;\n for (var count = 0; count < holidays.length; count++) {\n var holidayFrom = this.getDateFromFormat(new Date(holidays[count]));\n var holidayTo = new Date(holidayFrom.getTime());\n holidayFrom.setHours(0, 0, 0, 0);\n holidayTo.setHours(23, 59, 59, 59);\n if (date.getTime() >= holidayFrom.getTime() && date.getTime() < holidayTo.getTime()) {\n return true;\n }\n }\n return false;\n };\n /**\n * To calculate non working times in given date\n *\n * @param {Date} startDate .\n * @param {Date} endDate .\n * @param {boolean} isAutoSchedule .\n * @returns {number} .\n */\n DateProcessor.prototype.getNonWorkingSecondsOnDate = function (startDate, endDate, isAutoSchedule) {\n var sHour = this.getSecondsInDecimal(startDate);\n var eHour = this.getSecondsInDecimal(endDate);\n var startRangeIndex = -1;\n var endRangeIndex = -1;\n var totNonWrkSecs = 0;\n var startOnHoliday = isAutoSchedule && this.parent.autoCalculateDateScheduling ? this.isOnHolidayOrWeekEnd(startDate, null) : false;\n var endOnHoliday = isAutoSchedule && this.parent.autoCalculateDateScheduling ? this.isOnHolidayOrWeekEnd(endDate, null) : false;\n for (var i = 0; i < this.parent.nonWorkingTimeRanges.length; i++) {\n var val = this.parent.nonWorkingTimeRanges[i];\n if (sHour >= val.from && sHour <= val.to) {\n startRangeIndex = i;\n }\n if (eHour >= val.from && eHour <= val.to) {\n endRangeIndex = i;\n }\n }\n if (startDate.getDate() !== endDate.getDate() || startDate.getMonth() !== endDate.getMonth() ||\n startDate.getFullYear() !== endDate.getFullYear()) {\n if (!startOnHoliday) {\n for (var i = startRangeIndex; i < this.parent.nonWorkingTimeRanges.length; i++) {\n if (!this.parent.nonWorkingTimeRanges[i].isWorking) {\n if (i === startRangeIndex) {\n totNonWrkSecs += (this.parent.nonWorkingTimeRanges[i].to - sHour);\n }\n else {\n totNonWrkSecs += (this.parent.nonWorkingTimeRanges[i].interval);\n }\n }\n }\n }\n else {\n totNonWrkSecs += (86400 - sHour);\n }\n if (!endOnHoliday) {\n for (var i = 0; i <= endRangeIndex; i++) {\n if (!this.parent.nonWorkingTimeRanges[i].isWorking) {\n if (i === endRangeIndex) {\n totNonWrkSecs += (eHour - this.parent.nonWorkingTimeRanges[i].from);\n }\n else {\n totNonWrkSecs += this.parent.nonWorkingTimeRanges[i].interval;\n }\n }\n }\n }\n else {\n totNonWrkSecs += eHour;\n }\n }\n else {\n if (startRangeIndex !== endRangeIndex) {\n if (!endOnHoliday) {\n for (var i = startRangeIndex; i <= endRangeIndex; i++) {\n if (!this.parent.nonWorkingTimeRanges[i].isWorking) {\n if (i === startRangeIndex) {\n totNonWrkSecs += (this.parent.nonWorkingTimeRanges[i].to - sHour);\n }\n else if (i === endRangeIndex) {\n totNonWrkSecs += (eHour - this.parent.nonWorkingTimeRanges[i].from);\n }\n else {\n totNonWrkSecs += this.parent.nonWorkingTimeRanges[i].interval;\n }\n }\n }\n }\n else {\n totNonWrkSecs += (eHour - sHour);\n }\n }\n else {\n if (!endOnHoliday) {\n var range = this.parent.nonWorkingTimeRanges[startRangeIndex];\n if (!range.isWorking) {\n totNonWrkSecs = eHour - sHour;\n }\n }\n else {\n totNonWrkSecs += (eHour - sHour);\n }\n }\n }\n return totNonWrkSecs;\n };\n /**\n *\n * @param {Date} date .\n * @returns {Date} .\n */\n DateProcessor.prototype.getPreviousWorkingDay = function (date) {\n var dayIndex = date.getDay();\n var previousIndex = (dayIndex === 0) ? 6 : dayIndex - 1;\n if (this.parent.nonWorkingDayIndex.indexOf(dayIndex) !== -1 || (this.parent.nonWorkingDayIndex.indexOf(previousIndex) !== -1\n && this.parent.defaultEndTime === 86400 && this.getSecondsInDecimal(date) === 0)) {\n date.setDate(date.getDate() - 1);\n if (this.parent.nonWorkingDayIndex.indexOf(date.getDay()) !== -1) {\n date = this.getPreviousWorkingDay(date);\n }\n return date;\n }\n else {\n return date;\n }\n };\n /**\n * To get non-working day indexes.\n *\n * @returns {void} .\n * @private\n */\n DateProcessor.prototype.getNonWorkingDayIndex = function () {\n var weekDay = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\n var weekDayLength = weekDay.length;\n if (this.parent.workWeek.length === 0) {\n this.parent.workWeek = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];\n }\n var workWeek = this.parent.workWeek.slice();\n var length = workWeek.length;\n for (var i = 0; i < length; i++) {\n workWeek[i] = workWeek[i].toLowerCase();\n }\n this.parent.nonWorkingDayIndex = [];\n for (var i = 0; i < weekDayLength; i++) {\n if (workWeek.indexOf(weekDay[i]) === -1) {\n this.parent.nonWorkingDayIndex.push(i);\n }\n }\n };\n /**\n *\n * @param {number} seconds .\n * @param {Date} date .\n * @returns {void} .\n * @private\n */\n DateProcessor.prototype.setTime = function (seconds, date) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var hour = seconds / 3600;\n hour = parseInt(hour, 10);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var min = (seconds - (hour * 3600)) / 60;\n min = parseInt(min, 10);\n var sec = seconds - (hour * 3600) - (min * 60);\n date.setHours(hour, min, sec);\n };\n /**\n * @param {Date} startDate .\n * @param {Date} endDate .\n * @param {boolean} isCheckTimeZone .\n * @returns {number} .\n */\n DateProcessor.prototype.getTimeDifference = function (startDate, endDate, isCheckTimeZone) {\n var sDate = new Date(startDate.getTime());\n var eDate = new Date(endDate.getTime());\n if (isCheckTimeZone) {\n this.updateDateWithTimeZone(sDate, eDate);\n }\n return eDate.getTime() - sDate.getTime();\n };\n /**\n * @param {Date} sDate .\n * @param {Date} eDate .\n * @returns {void} .\n */\n DateProcessor.prototype.updateDateWithTimeZone = function (sDate, eDate) {\n var sTZ = sDate.getTimezoneOffset();\n var eTZ = eDate.getTimezoneOffset();\n var uTZ;\n var uDate;\n if (sTZ !== eTZ) {\n var standardTZ = new Date(new Date().getFullYear(), 0, 1).getTimezoneOffset();\n if (standardTZ !== sTZ) {\n uDate = sDate;\n uTZ = sTZ;\n }\n else if (standardTZ !== eTZ) {\n uDate = eDate;\n uTZ = eTZ;\n }\n if (standardTZ < 0) {\n var tzDiff = standardTZ - uTZ;\n uDate.setTime(uDate.getTime() + (tzDiff * 60 * 1000));\n }\n else if (standardTZ >= 0) {\n var tzDiff = uTZ - standardTZ;\n uDate.setTime(uDate.getTime() - (tzDiff * 60 * 1000));\n }\n }\n };\n /**\n *\n * @param {Date} date .\n * @returns {number} .\n */\n DateProcessor.prototype.getSecondsInDecimal = function (date) {\n return (date.getHours() * 60 * 60) + (date.getMinutes() * 60) + date.getSeconds() + (date.getMilliseconds() / 1000);\n };\n /**\n * @param {Date} date .\n * @param {number} localOffset .\n * @param {string} timezone .\n * @returns {number} .\n * @private\n */\n DateProcessor.prototype.offset = function (date, timezone) {\n var localOffset = date.getTimezoneOffset();\n try {\n var convertedDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n if (!isNaN(convertedDate.getTime())) {\n return ((date.getTime() - convertedDate.getTime()) / 60000) + localOffset;\n }\n return 0;\n }\n catch (error) {\n return 0;\n }\n };\n DateProcessor.prototype.remove = function (date, timezone) {\n if (!isNullOrUndefined(date)) {\n date = this.reverse(date, timezone, date.getTimezoneOffset());\n }\n return date;\n };\n DateProcessor.prototype.reverse = function (date, fromOffset, toOffset) {\n if (typeof fromOffset === 'string') {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset === 'string') {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n };\n /**\n * @param {Date} date .\n * @param {string} timezone .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.convert = function (date, timezone) {\n var fromOffset = date.getTimezoneOffset();\n var toOffset = this.offset(date, timezone);\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromOffset) * 60000);\n };\n /**\n * @param {string | Date} date .\n * @param {boolean} toConvert .\n * @returns {Date} .\n * @private\n */\n DateProcessor.prototype.getDateFromFormat = function (date, toConvert) {\n var updatedDate;\n if (isNullOrUndefined(date)) {\n return null;\n }\n else if (date instanceof Date) {\n updatedDate = new Date(date.getTime());\n }\n else {\n var dateObject = this.parent.globalize.parseDate(date, { format: this.parent.getDateFormat(), type: 'dateTime' });\n updatedDate = isNullOrUndefined(dateObject) && !isNaN(new Date(date).getTime()) ? new Date(date) : dateObject;\n }\n if (!isNullOrUndefined(this.parent.timezone) && toConvert) {\n var convertedDate = this.convert(updatedDate, this.parent.timezone);\n return convertedDate;\n }\n else {\n return updatedDate;\n }\n };\n /**\n * @param {Date} date1 .\n * @param {Date} date2 .\n * @returns {number} .\n * @private\n */\n DateProcessor.prototype.compareDates = function (date1, date2) {\n if (!isNullOrUndefined(date1) && !isNullOrUndefined(date2)) {\n return (date1.getTime() > date2.getTime()) ? 1 : (date1.getTime() < date2.getTime()) ? -1 : 0;\n }\n else if (!isNullOrUndefined(date1) && isNullOrUndefined(date2)) {\n return 1;\n }\n else if (isNullOrUndefined(date1) && !isNullOrUndefined(date2)) {\n return -1;\n }\n else {\n return null;\n }\n };\n /**\n *\n * @param {number} duration .\n * @param {string} durationUnit .\n * @returns {string} .\n * @private\n */\n DateProcessor.prototype.getDurationString = function (duration, durationUnit) {\n var value = '';\n if (!isNullOrUndefined(duration)) {\n value += parseFloat(duration.toFixed(2)) + ' ';\n if (!isNullOrUndefined(durationUnit)) {\n var plural = duration !== 1;\n if (durationUnit === 'day') {\n value += plural ? this.parent.localeObj.getConstant('days') : this.parent.localeObj.getConstant('day');\n }\n else if (durationUnit === 'hour') {\n value += plural ? this.parent.localeObj.getConstant('hours') : this.parent.localeObj.getConstant('hour');\n }\n else if (durationUnit === 'minute') {\n value += plural ? this.parent.localeObj.getConstant('minutes') :\n this.parent.localeObj.getConstant('minute');\n }\n }\n }\n return value;\n };\n /**\n * Method to get work with value and unit.\n *\n * @param {number} work .\n * @param {string} workUnit .\n * @returns {string} .\n * @private\n */\n DateProcessor.prototype.getWorkString = function (work, workUnit) {\n var value = '';\n if (!isNullOrUndefined(work)) {\n value += parseFloat(work).toFixed(2) + ' ';\n if (!isNullOrUndefined(workUnit)) {\n var plural = work !== 1;\n if (workUnit === 'day') {\n value += plural ? this.parent.localeObj.getConstant('days') : this.parent.localeObj.getConstant('day');\n }\n else if (workUnit === 'hour') {\n value += plural ? this.parent.localeObj.getConstant('hours') : this.parent.localeObj.getConstant('hour');\n }\n else if (workUnit === 'minute') {\n value += plural ? this.parent.localeObj.getConstant('minutes') :\n this.parent.localeObj.getConstant('minute');\n }\n }\n }\n return value;\n };\n /**\n *\n * @param {object} editArgs .\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n DateProcessor.prototype.calculateProjectDatesForValidatedTasks = function (editArgs) {\n var _this = this;\n var projectStartDate = typeof this.parent.projectStartDate === 'string' ?\n new Date(this.parent.projectStartDate) : this.parent.projectStartDate;\n var projectEndDate = typeof this.parent.projectEndDate === 'string' ?\n new Date(this.parent.projectEndDate) : this.parent.projectEndDate;\n var minStartDate = null;\n var maxEndDate = null;\n var flatData = (getValue('dataOperation.dataArray', this.parent));\n if ((!projectStartDate || !projectEndDate) && (flatData && flatData.length === 0)) {\n minStartDate = this.getDateFromFormat(new Date());\n maxEndDate = this.getDateFromFormat(new Date(minStartDate.getTime()));\n }\n else if (flatData.length > 0) {\n var sortedStartDate = flatData.slice().sort(function (a, b) {\n return ((new Date(a[_this.parent.taskFields.startDate])).getTime() -\n (new Date(b[_this.parent.taskFields.startDate])).getTime());\n });\n var sortedEndDate = flatData.slice().sort(function (a, b) {\n return ((new Date(b[_this.parent.taskFields.endDate])).getTime() - (new Date(a[_this.parent.taskFields.endDate])).getTime());\n });\n minStartDate = sortedStartDate[0][this.parent.taskFields.startDate];\n maxEndDate = sortedEndDate[sortedEndDate.length - 1][this.parent.taskFields.endDate];\n }\n this.parent.cloneProjectStartDate = projectStartDate ? new Date(projectStartDate.getTime()) :\n typeof minStartDate === 'string' ? new Date(minStartDate) : minStartDate;\n this.parent.cloneProjectEndDate = projectEndDate ? new Date(projectEndDate.getTime()) :\n typeof maxEndDate === 'string' ? new Date(maxEndDate) : maxEndDate;\n };\n /**\n *\n * @param {object} editArgs .\n * @returns {void} .\n * @private\n */\n DateProcessor.prototype.calculateProjectDates = function (editArgs) {\n var _this = this;\n if (this.parent.isLoad && this.parent.enablePersistence &&\n this.parent.cloneProjectStartDate && this.parent.cloneProjectEndDate) {\n this.parent.cloneProjectStartDate = this.getDateFromFormat(this.parent.cloneProjectStartDate);\n this.parent.cloneProjectEndDate = this.getDateFromFormat(this.parent.cloneProjectEndDate);\n return;\n }\n var sDate = typeof this.parent.projectStartDate === 'string' ?\n new Date(this.parent.projectStartDate) : this.parent.projectStartDate;\n var eDate = typeof this.parent.projectEndDate === 'string' ?\n new Date(this.parent.projectEndDate) : this.parent.projectEndDate;\n var projectStartDate = this.parent.timelineModule.isZooming && this.parent.cloneProjectStartDate\n ? this.getDateFromFormat(this.parent.cloneProjectStartDate) : this.getDateFromFormat(sDate);\n var projectEndDate = this.parent.timelineModule.isZooming && this.parent.cloneProjectEndDate\n ? this.getDateFromFormat(this.parent.cloneProjectEndDate) : this.getDateFromFormat(eDate);\n var minStartDate = null;\n var maxEndDate = null;\n var flatData = this.parent.flatData;\n var currentViewData = this.parent.currentViewData;\n var taskRange = [];\n var addDateToList = function (date) {\n if (!isNullOrUndefined(date)) {\n taskRange.push(date);\n }\n };\n var sortDates = function (dates) {\n if (dates.length > 0) {\n dates.sort(function (a, b) {\n return a.getTime() - b.getTime();\n });\n minStartDate = new Date(dates[0].getTime());\n maxEndDate = dates.length > 1 ? new Date(dates[dates.length - 1].getTime()) : null;\n }\n };\n if (((!projectStartDate || !projectEndDate) && flatData.length > 0) || editArgs || this.parent.timelineModule.isZoomToFit) {\n var viewData = void 0;\n if (currentViewData.length > 0 && this.parent.timelineModule.isZoomToFit &&\n this.parent.treeGrid.filterModule &&\n this.parent.treeGrid.filterModule.filteredResult.length > 0) {\n viewData = currentViewData;\n }\n else {\n viewData = flatData;\n }\n viewData.forEach(function (data) {\n taskRange = [];\n var task = data.ganttProperties;\n var tempStartDate;\n var tempEndDate;\n if (isNullOrUndefined(task.startDate) && isNullOrUndefined(task.endDate)) {\n tempStartDate = null;\n tempEndDate = null;\n }\n else {\n tempStartDate = _this.getValidStartDate(task);\n tempEndDate = _this.getValidEndDate(task);\n }\n addDateToList(minStartDate);\n addDateToList(maxEndDate);\n addDateToList(tempStartDate);\n addDateToList(tempEndDate);\n if (_this.parent.renderBaseline && !_this.parent.timelineModule.isZoomToFit) {\n addDateToList(task.baselineStartDate);\n addDateToList(task.baselineEndDate);\n }\n if (task.indicators && task.indicators.length > 0 && !_this.parent.timelineModule.isZoomToFit) {\n task.indicators.forEach(function (item) {\n addDateToList(_this.getDateFromFormat(item.date));\n });\n }\n sortDates(taskRange);\n });\n taskRange = [];\n addDateToList(minStartDate);\n addDateToList(maxEndDate);\n //update schedule dates as per holiday and strip line collection\n if (this.parent.eventMarkers.length > 0 && !this.parent.timelineModule.isZoomToFit) {\n var eventMarkers = this.parent.eventMarkers;\n // eslint-disable-next-line\n eventMarkers.forEach(function (marker, index) {\n addDateToList(_this.getDateFromFormat(marker.day));\n });\n }\n if (this.parent.totalHolidayDates.length > 0 && !this.parent.timelineModule.isZoomToFit) {\n var holidays = this.parent.totalHolidayDates;\n // eslint-disable-next-line\n holidays.forEach(function (holiday, index) {\n addDateToList(new Date(holiday));\n });\n }\n sortDates(taskRange);\n if (!minStartDate || !maxEndDate) {\n if (!minStartDate) {\n minStartDate = isNullOrUndefined(minStartDate) ? this.getDateFromFormat(new Date()) : minStartDate;\n minStartDate.setHours(0, 0, 0, 0);\n }\n else {\n minStartDate = isNullOrUndefined(minStartDate) ? this.getDateFromFormat(new Date()) : minStartDate;\n }\n maxEndDate = this.getDateFromFormat(new Date(minStartDate.getTime()));\n maxEndDate.setDate(maxEndDate.getDate() + 20);\n }\n }\n else if ((!projectStartDate || !projectEndDate) && flatData.length === 0) {\n minStartDate = this.getDateFromFormat(new Date());\n maxEndDate = this.getDateFromFormat(new Date(minStartDate.getTime()));\n }\n if (!editArgs) {\n this.prevProjectStartDate = this.parent.cloneProjectStartDate;\n this.parent.cloneProjectStartDate = minStartDate ? (!this.parent.timelineModule.isZoomToFit) ? (!isNullOrUndefined(projectStartDate)) ? new Date(projectStartDate.getTime()) : minStartDate : minStartDate : new Date(projectStartDate.getTime());\n this.parent.cloneProjectEndDate = maxEndDate ? (!this.parent.timelineModule.isZoomToFit) ? (!isNullOrUndefined(projectEndDate)) ? new Date(projectEndDate.getTime()) : maxEndDate : maxEndDate : new Date(projectEndDate.getTime());\n }\n else {\n setValue('minStartDate', minStartDate, editArgs);\n setValue('maxEndDate', maxEndDate, editArgs);\n }\n this.parent['isProjectDateUpdated'] = true;\n };\n /**\n *\n * @param {ITaskSegment} segments .\n * @returns {number} .\n * @private\n */\n DateProcessor.prototype.splitTasksDuration = function (segments) {\n var duration = 0;\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var sDate = segment.startDate;\n var eDate = segment.endDate;\n if (this.parent.timelineModule.bottomTier === \"Hour\") {\n duration += Math.ceil(this.getTimeDifference(sDate, eDate) / (1000 * 60 * 60));\n }\n else if (this.parent.timelineModule.bottomTier === \"Minutes\") {\n duration += Math.ceil(this.getTimeDifference(sDate, eDate) / (1000 * 60));\n }\n else {\n duration += Math.ceil(this.getTimeDifference(sDate, eDate) / (1000 * 60 * 60 * 24));\n }\n }\n return duration;\n };\n return DateProcessor;\n}());\nexport { DateProcessor };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, getValue, extend, setValue } from '@syncfusion/ej2-base';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { isCountRequired, isScheduledTask } from './utils';\nimport { DateProcessor } from './date-processor';\n/**\n * To calculate and update task related values\n */\nvar TaskProcessor = /** @class */ (function (_super) {\n __extends(TaskProcessor, _super);\n function TaskProcessor(parent) {\n var _this = _super.call(this, parent) || this;\n _this.recordIndex = 0;\n _this.taskIds = [];\n _this.hierarchyData = [];\n _this.addEventListener();\n return _this;\n }\n TaskProcessor.prototype.addEventListener = function () {\n this.parent.on('beforeDataManipulate', this.checkDataBinding.bind(this));\n };\n /**\n * @param {boolean} isChange .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.checkDataBinding = function (isChange) {\n if (isChange) {\n this.parent.flatData = [];\n this.parent.currentViewData = [];\n this.parent.updatedRecords = [];\n this.dataArray = [];\n this.taskIds = [];\n this.parent.ids = [];\n this.recordIndex = 0;\n this.hierarchyData = [];\n this.parent.predecessorsCollection = [];\n this.parent.treeGrid.parentData = [];\n this.parent.taskIds = [];\n }\n if (isNullOrUndefined(this.parent.dataSource)) {\n this.parent.dataSource = [];\n this.parent.processTimeline();\n this.parent.renderGantt(isChange);\n }\n else if (this.parent.dataSource instanceof DataManager) {\n this.initDataSource(isChange);\n }\n else {\n if (this.parent.dataSource instanceof Object && isCountRequired(this.parent)) {\n var ganttdata = getValue('result', this.parent.dataSource);\n this.dataArray = ganttdata;\n }\n else {\n this.dataArray = this.parent.dataSource;\n }\n this.processTimeline();\n this.cloneDataSource();\n this.parent.renderGantt(isChange);\n }\n };\n TaskProcessor.prototype.processTimeline = function () {\n this.parent.processTimeline();\n if (!this.parent.enableValidation) {\n this.parent.dataOperation.calculateProjectDatesForValidatedTasks();\n this.parent.timelineModule.validateTimelineProp();\n }\n };\n TaskProcessor.prototype.initDataSource = function (isChange) {\n var _this = this;\n var queryManager = this.parent.query instanceof Query ? this.parent.query : new Query();\n queryManager.requiresCount();\n var dataManager = this.parent.dataSource;\n dataManager.executeQuery(queryManager).then(function (e) {\n _this.dataArray = e.result;\n _this.processTimeline();\n _this.cloneDataSource();\n _this.parent.renderGantt(isChange);\n }).catch(function (e) {\n // Trigger action failure event\n _this.parent.processTimeline();\n _this.parent.renderGantt(isChange);\n _this.parent.trigger('actionFailure', { error: e });\n });\n };\n TaskProcessor.prototype.constructDataSource = function (dataSource) {\n var mappingData = new DataManager(dataSource).executeLocal(new Query()\n .group(this.parent.taskFields.parentID));\n var rootData = [];\n var index;\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[i];\n if (!isNullOrUndefined(groupData.key)) {\n index = this.taskIds.indexOf(groupData.key.toString());\n if (index > -1) {\n if (!isNullOrUndefined(groupData.key)) {\n dataSource[index][this.parent.taskFields.child] = groupData.items;\n continue;\n }\n }\n }\n if (index !== -1) {\n rootData.push.apply(rootData, groupData.items); // eslint-disable-line\n }\n }\n this.hierarchyData = this.dataReorder(dataSource, rootData);\n };\n TaskProcessor.prototype.cloneDataSource = function () {\n var taskIdMapping = this.parent.taskFields.id;\n var parentIdMapping = this.parent.taskFields.parentID;\n var hierarchicalData = [];\n if (!isNullOrUndefined(taskIdMapping) && !isNullOrUndefined(parentIdMapping)) {\n var data = [];\n for (var i = 0; i < this.dataArray.length; i++) {\n var tempData = this.dataArray[i];\n data.push(extend({}, {}, tempData, true));\n if (!isNullOrUndefined(tempData[taskIdMapping])) {\n this.taskIds.push(tempData[taskIdMapping].toString());\n }\n }\n if (!this.parent.taskFields.child) {\n this.parent.setProperties({ taskFields: { child: 'Children' } }, true);\n }\n this.constructDataSource(data);\n hierarchicalData = this.hierarchyData;\n }\n else {\n hierarchicalData = this.dataArray;\n }\n if (this.parent.taskFields.segmentId) {\n this.segmentCollection = new DataManager(this.parent.segmentData).executeLocal(new Query()\n .group(this.parent.taskFields.segmentId));\n if (!this.parent.taskFields.segments) {\n this.parent.taskFields.segments = 'Segments';\n }\n }\n if (this.parent.viewType !== 'ProjectView') {\n var resources = extend([], [], this.parent.resources, true);\n var unassignedTasks = [];\n this.constructResourceViewDataSource(resources, hierarchicalData, unassignedTasks);\n if (unassignedTasks.length > 0) {\n var record = {};\n record[this.parent.resourceFields.id] = 0;\n record[this.parent.resourceFields.name] = this.parent.localeObj.getConstant('unassignedTask');\n record[this.parent.taskFields.child] = unassignedTasks;\n resources.push(record);\n }\n hierarchicalData = resources;\n }\n this.prepareDataSource(hierarchicalData);\n };\n /**\n * @param {object[]} resources .\n * @param {object[]} data .\n * @param {object[]} unassignedTasks .\n * @returns {void} .\n *\n */\n TaskProcessor.prototype.constructResourceViewDataSource = function (resources, data, unassignedTasks) {\n var _loop_1 = function (i) {\n var tempData = data[i];\n var child = this_1.parent.taskFields.child != null ? this_1.parent.taskFields.child : this_1.parent.taskFields.child = 'Children';\n var resourceData = tempData && tempData[this_1.parent.taskFields.resourceInfo];\n var resourceIdMapping = this_1.parent.resourceFields.id;\n if ((!tempData[child] || tempData[child].length === 0) && resourceData && resourceData.length) {\n resourceData.forEach(function (resource) {\n var id = (typeof resource === 'object') ? resource[resourceIdMapping] :\n resource;\n for (var j = 0; j < resources.length; j++) {\n if (resources[j][resourceIdMapping].toString() === id.toString()) {\n if (resources[j][child]) {\n resources[j][child].push(tempData);\n }\n else {\n resources[j][child] = [tempData];\n }\n break;\n }\n }\n });\n }\n else if (!tempData[child] || (tempData[child] && tempData[child].length === 0)) {\n unassignedTasks.push(tempData);\n }\n if (tempData[this_1.parent.taskFields.child] && tempData[this_1.parent.taskFields.child].length) {\n this_1.constructResourceViewDataSource(resources, tempData[this_1.parent.taskFields.child], unassignedTasks);\n }\n };\n var this_1 = this;\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Function to manipulate data-source\n *\n * @param {object[]} data .\n * @returns {void} .\n * @hidden\n */\n TaskProcessor.prototype.prepareDataSource = function (data) {\n this.prepareRecordCollection(data, 0);\n this.parent.initialLoadData = extend({}, {}, this.parent.flatData, true);\n // Method to maintain the shared task uniqueIds\n if (this.parent.viewType === 'ResourceView') {\n this.calculateSharedTaskUniqueIds();\n }\n if (this.parent.taskFields.dependency && this.parent.predecessorModule) {\n this.parent.predecessorModule.ensurePredecessorCollection();\n }\n };\n TaskProcessor.prototype.calculateSharedTaskUniqueIds = function () {\n var _loop_2 = function (i) {\n var value = [];\n value[0] = this_2.parent.getTaskIds()[i][0];\n value[1] = this_2.parent.getTaskIds()[i].slice(1);\n if (value[0] !== 'R') {\n var sharedRecords_1 = [];\n var ids_1 = [];\n this_2.parent.flatData.filter(function (data) {\n if (data.ganttProperties.taskId.toString() === value[1] && data.level !== 0) {\n ids_1.push(data.ganttProperties.rowUniqueID);\n sharedRecords_1.push(data);\n }\n });\n for (var j = 0; j < sharedRecords_1.length; j++) {\n sharedRecords_1[j].ganttProperties.sharedTaskUniqueIds = ids_1;\n }\n }\n };\n var this_2 = this;\n for (var i = 0; i < this.parent.getTaskIds().length; i++) {\n _loop_2(i);\n }\n };\n TaskProcessor.prototype.prepareRecordCollection = function (data, level, parentItem) {\n var _this = this;\n var length = data.length;\n var _loop_3 = function (i) {\n var tempData = data[i];\n if (!isNullOrUndefined(this_3.parent.taskFields.segmentId)) {\n var segmentData = this_3.segmentCollection.\n filter(function (x) { return x.key === tempData[_this.parent.taskFields.id]; });\n if (segmentData.length > 0) {\n tempData[this_3.parent.taskFields.segments] = segmentData[0].items;\n }\n }\n var ganttData = this_3.createRecord(tempData, level, parentItem, true);\n if (!this_3.parent.enableValidation || !this_3.parent.autoCalculateDateScheduling) {\n this_3.updateTaskLeftWidth(ganttData);\n }\n ganttData.index = this_3.recordIndex++;\n this_3.parent.ids[ganttData.index] = ganttData.ganttProperties.rowUniqueID;\n this_3.parent.flatData.push(ganttData);\n this_3.parent.setTaskIds(ganttData);\n var childData = tempData[this_3.parent.taskFields.child];\n if (this_3.parent.viewType === 'ResourceView' && isNullOrUndefined(childData)\n && isNullOrUndefined(ganttData.parentItem) && ganttData.level === 0) {\n var ganttProp = ganttData.ganttProperties;\n var parentData = ganttData;\n this_3.parent.setRecordValue(ganttProp.isAutoSchedule ? 'startDate' : 'autoStartDate', null, parentData.ganttProperties, true);\n this_3.parent.setRecordValue(ganttProp.isAutoSchedule ? 'endDate' : 'autoEndDate', null, parentData.ganttProperties, true);\n var parentProgress = 0;\n var parentProp = parentData.ganttProperties;\n this_3.parent.setRecordValue('isMilestone', false, parentProp, true);\n if (parentProp.isAutoSchedule) {\n this_3.calculateDuration(parentData);\n }\n this_3.updateWorkWithDuration(parentData);\n var parentWork = parentProp.work;\n this_3.parent.setRecordValue('work', parentWork, parentProp, true);\n this_3.parent.setRecordValue('taskType', 'FixedDuration', parentProp, true);\n if (!isNullOrUndefined(this_3.parent.taskFields.type)) {\n this_3.updateMappingData(parentData, 'type');\n }\n this_3.parent.setRecordValue('progress', Math.floor(parentProgress), parentProp, true);\n this_3.parent.setRecordValue('totalProgress', 0, parentProp, true);\n this_3.parent.setRecordValue('totalDuration', 0, parentProp, true);\n if (!parentProp.isAutoSchedule) {\n this_3.parent.setRecordValue('autoDuration', this_3.calculateAutoDuration(parentProp), parentProp, true);\n this_3.updateAutoWidthLeft(parentData);\n }\n if (!this_3.parent.allowParentDependency) {\n this_3.resetDependency(parentData);\n }\n this_3.updateWidthLeft(parentData);\n this_3.updateTaskData(parentData);\n }\n if (!isNullOrUndefined(childData) && childData.length > 0) {\n this_3.prepareRecordCollection(childData, ganttData.level + 1, ganttData);\n }\n };\n var this_3 = this;\n for (var i = 0; i < length; i++) {\n _loop_3(i);\n }\n };\n /**\n * Method to update custom field values in gantt record\n *\n * @param {object} data .\n * @param {IGanttData} ganttRecord .\n * @returns {void} .\n */\n TaskProcessor.prototype.addCustomFieldValue = function (data, ganttRecord) {\n var columns = this.parent.ganttColumns;\n var length = columns.length;\n if (length) {\n for (var i = 0; i < length; i++) {\n var fieldName = ganttRecord[columns[i].field];\n if (fieldName === undefined) {\n this.parent.setRecordValue(columns[i].field, data[columns[i].field], ganttRecord);\n }\n }\n }\n };\n /**\n * To populate Gantt record\n *\n * @param {object} data .\n * @param {number} level .\n * @param {IGanttData} parentItem .\n * @param {boolean} isLoad .\n * @returns {IGanttData} .\n * @private\n */\n TaskProcessor.prototype.createRecord = function (data, level, parentItem, isLoad) {\n var taskSettings = this.parent.taskFields;\n var resourceFields = this.parent.resourceFields;\n var progress = data[taskSettings.progress];\n var id = null;\n var name = null;\n var notes = data[taskSettings.notes];\n progress = progress ? parseFloat(progress.toString()) ? parseFloat(progress.toString()) : 0 : 0;\n var predecessors = data[taskSettings.dependency];\n var baselineStartDate = this.getDateFromFormat(data[taskSettings.baselineStartDate], true);\n var baselineEndDate = this.getDateFromFormat(data[taskSettings.baselineEndDate], true);\n var ganttData = {};\n var ganttProperties = {};\n var autoSchedule = (this.parent.taskMode === 'Auto') ? true :\n (this.parent.taskMode === 'Manual') ? false :\n data[taskSettings.manual] === true ? false : true;\n this.parent.setRecordValue('ganttProperties', ganttProperties, ganttData);\n if (!isNullOrUndefined(data[taskSettings.id])) {\n id = data[taskSettings.id];\n name = data[taskSettings.name];\n this.addTaskData(ganttData, data, isLoad);\n }\n else if (!isNullOrUndefined(data[resourceFields.id])) {\n id = data[resourceFields.id];\n name = data[resourceFields.name];\n this.addTaskData(ganttData, data, false);\n }\n this.parent.setRecordValue('taskId', id, ganttProperties, true);\n this.parent.setRecordValue('taskName', name, ganttProperties, true);\n if (taskSettings.parentID) {\n this.parent.setRecordValue('parentId', data[taskSettings.parentID], ganttProperties, true);\n }\n this.addCustomFieldValue(data, ganttData);\n this.parent.setRecordValue('isAutoSchedule', autoSchedule, ganttProperties, true);\n this.parent.setRecordValue('resourceInfo', this.setResourceInfo(data), ganttProperties, true);\n this.parent.setRecordValue('isMilestone', false, ganttProperties, true);\n this.parent.setRecordValue('indicators', data[taskSettings.indicators], ganttProperties, true);\n this.updateResourceName(ganttData);\n this.calculateScheduledValues(ganttData, data, isLoad);\n this.parent.setRecordValue('baselineStartDate', this.checkBaselineStartDate(baselineStartDate), ganttProperties, true);\n // set default end time, if hour is 0\n if (baselineEndDate && baselineEndDate.getHours() === 0 && this.parent.defaultEndTime !== 86400) {\n this.setTime(this.parent.defaultEndTime, baselineEndDate);\n }\n if ((ganttProperties.baselineStartDate && baselineEndDate &&\n (ganttProperties.baselineStartDate.getTime() > baselineEndDate.getTime())) ||\n ((!isNullOrUndefined(ganttProperties.baselineStartDate) && !isNullOrUndefined(ganttProperties.startDate) && (ganttProperties.baselineStartDate.getTime() === ganttProperties.startDate.getTime()))\n && (!isNullOrUndefined(baselineEndDate) && !isNullOrUndefined(ganttProperties.endDate) && (baselineEndDate.toLocaleDateString() === ganttProperties.endDate.toLocaleDateString())) &&\n ganttProperties.isMilestone)) {\n baselineEndDate = ganttProperties.baselineStartDate;\n }\n this.parent.setRecordValue('baselineEndDate', this.checkBaselineEndDate(baselineEndDate, ganttProperties), ganttProperties, true);\n this.parent.setRecordValue('progress', progress, ganttProperties, true);\n this.parent.setRecordValue('totalProgress', progress, ganttProperties, true);\n this.parent.setRecordValue('predecessorsName', predecessors, ganttProperties, true);\n this.parent.setRecordValue('notes', notes, ganttProperties, true);\n this.parent.setRecordValue('cssClass', data[taskSettings.cssClass], ganttProperties, true);\n this.parent.setRecordValue('parentItem', this.getCloneParent(parentItem), ganttData);\n var parentUniqId = ganttData.parentItem ? ganttData.parentItem.uniqueID : null;\n this.parent.setRecordValue('parentUniqueID', parentUniqId, ganttData);\n if (this.parent.viewType === 'ResourceView' && !isNullOrUndefined(taskSettings.parentID)\n && !isNullOrUndefined(ganttData.parentItem)) {\n this.parent.setRecordValue('parentId', ganttData.parentItem.taskId, ganttProperties, true);\n }\n this.parent.setRecordValue('level', level, ganttData);\n this.parent.setRecordValue('uniqueID', getUid(this.parent.element.id + '_data_'), ganttData);\n this.parent.setRecordValue('uniqueID', ganttData.uniqueID, ganttProperties, true);\n this.parent.setRecordValue('childRecords', [], ganttData);\n if (this.parent.dataSource instanceof Object && isCountRequired(this.parent) &&\n !isNullOrUndefined(taskSettings.child)) {\n this.parent.setRecordValue(taskSettings.child, [], ganttData);\n }\n if (!isNullOrUndefined(data[taskSettings.child]) && data[taskSettings.child].length > 0) {\n this.parent.setRecordValue('hasChildRecords', true, ganttData);\n this.parent.setRecordValue('isMilestone', false, ganttProperties, true);\n if (!this.parent.allowParentDependency) {\n this.resetDependency(ganttData);\n }\n }\n else {\n this.parent.setRecordValue('hasChildRecords', false, ganttData);\n }\n if (ganttData.hasChildRecords) {\n this.parent.setRecordValue('autoStartDate', ganttData.ganttProperties.startDate, ganttProperties);\n this.parent.setRecordValue('autoEndDate', ganttData.ganttProperties.endDate, ganttProperties);\n this.parent.setRecordValue('autoDuration', ganttData.ganttProperties.duration, ganttProperties);\n }\n this.parent.setRecordValue('expanded', (ganttData.hasChildRecords && this.parent.collapseAllParentTasks) ? false : true, ganttData);\n this.updateExpandStateMappingValue(ganttData, data);\n if (!isLoad) {\n this.parent.setRecordValue('width', this.calculateWidth(ganttData), ganttProperties, true);\n this.parent.setRecordValue('left', this.calculateLeft(ganttProperties), ganttProperties, true);\n this.parent.setRecordValue('progressWidth', this.getProgressWidth(ganttProperties.width, progress), ganttProperties, true);\n if (ganttProperties.baselineEndDate && ganttProperties.baselineStartDate) {\n this.parent.setRecordValue('baselineLeft', this.calculateBaselineLeft(ganttProperties), ganttProperties, true);\n this.parent.setRecordValue('baselineWidth', this.calculateBaselineWidth(ganttProperties), ganttProperties, true);\n }\n }\n if (isNullOrUndefined(taskSettings.work)) {\n this.updateWorkWithDuration(ganttData);\n }\n if (!isNullOrUndefined(taskSettings.manual)) {\n this.parent.dataOperation.updateMappingData(ganttData, 'manual');\n }\n this.updateTaskData(ganttData);\n if (predecessors) {\n this.parent.predecessorsCollection.push(ganttData);\n }\n if (!isNullOrUndefined(parentItem)) {\n parentItem.childRecords.push(ganttData);\n if (this.parent.dataSource instanceof Object && isCountRequired(this.parent) &&\n !isNullOrUndefined(this.parent.taskFields.child)) {\n parentItem[this.parent.taskFields.child].push(ganttData.taskData);\n }\n }\n if (this.parent.viewType === 'ProjectView') {\n this.parent.setRecordValue('rowUniqueID', ganttProperties.taskId.toString(), ganttProperties, true);\n }\n else {\n var uniqueId = ganttData.uniqueID.replace(this.parent.element.id + '_data_', '');\n // if (this.parent.viewType === 'ResourceView' && typeof(ganttData.ganttProperties.taskId) === \"string\") {\n // uniqueId = ganttProperties.taskId.toString();\n // }\n this.parent.setRecordValue('rowUniqueID', uniqueId, ganttData);\n this.parent.setRecordValue('rowUniqueID', uniqueId, ganttProperties, true);\n this.parent.setRecordValue('sharedTaskUniqueIds', [], ganttProperties, true);\n }\n if (this.parent.allowUnscheduledTasks && ganttData.ganttProperties.startDate\n && (ganttData.ganttProperties.endDate || ganttData.ganttProperties.duration)) {\n this.parent.setRecordValue('segments', this.setSegmentsInfo(ganttData, true), ganttProperties, true);\n this.parent.dataOperation.updateMappingData(ganttData, 'segments');\n if (!isLoad) {\n this.updateWidthLeft(ganttData);\n }\n }\n return ganttData;\n };\n TaskProcessor.prototype.sortSegmentsData = function (segments, onLoad, ganttProp) {\n var _this = this;\n if (onLoad) {\n segments.sort(function (a, b) {\n var startDate = _this.parent.taskFields.startDate;\n return _this.getDateFromFormat(a[startDate]).getTime() - _this.getDateFromFormat(b[startDate]).getTime();\n });\n }\n else {\n segments.sort(function (a, b) {\n return a.startDate.getTime() - b.startDate.getTime();\n });\n }\n return segments;\n };\n TaskProcessor.prototype.setSegmentsInfo = function (data, onLoad) {\n var taskSettings = this.parent.taskFields;\n var ganttSegments = [];\n var segments;\n var sumOfDuration = 0;\n var remainingDuration = 0;\n var taskData = [];\n if (!isNullOrUndefined(this.parent.taskFields.segments)) {\n segments = onLoad ? data.taskData[this.parent.taskFields.segments] : data.ganttProperties.segments;\n if (!isNullOrUndefined(segments) && segments.length > 1) {\n this.sortSegmentsData(segments, onLoad, data.ganttProperties);\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var startDate = onLoad ? segment[taskSettings.startDate] : segment.startDate;\n var endDate = onLoad ? segment[taskSettings.endDate] : segment.endDate;\n var duration = onLoad ? segment[taskSettings.duration] : segment.duration;\n startDate = this.getDateFromFormat(startDate);\n startDate = this.checkStartDate(startDate, data.ganttProperties, false);\n if (!isNullOrUndefined(duration)) {\n endDate = this.getEndDate(startDate, duration, data.ganttProperties.durationUnit, data.ganttProperties, false);\n if (taskSettings.duration) {\n remainingDuration = data.ganttProperties.duration - sumOfDuration;\n if (remainingDuration <= 0) {\n continue;\n }\n duration = i === segments.length - 1 ? remainingDuration : remainingDuration > 0 &&\n duration > remainingDuration ? remainingDuration : duration;\n endDate = this.getEndDate(startDate, duration, data.ganttProperties.durationUnit, data.ganttProperties, false);\n }\n else if (!taskSettings.duration && taskSettings.endDate) {\n endDate = (!isNullOrUndefined(data.ganttProperties.endDate)) && endDate.getTime() >\n data.ganttProperties.endDate.getTime() && i !== segments.length - 1 ? endDate : data.ganttProperties.endDate;\n duration = this.getDuration(startDate, endDate, data.ganttProperties.durationUnit, data.ganttProperties.isAutoSchedule, data.ganttProperties.isMilestone);\n if (ganttSegments.length > 0 && endDate.getTime() < startDate.getTime()\n && endDate.getTime() <= data.ganttProperties.endDate.getTime()) {\n ganttSegments[i - 1].duration = this.getDuration(ganttSegments[i - 1].startDate, data.ganttProperties.endDate, data.ganttProperties.durationUnit, data.ganttProperties.isAutoSchedule, data.ganttProperties.isMilestone);\n continue;\n }\n }\n }\n else {\n endDate = this.getDateFromFormat(endDate);\n if (endDate && (isNullOrUndefined(duration) || String(duration) === '')) {\n if (endDate.getHours() === 0 && this.parent.defaultEndTime !== 86400) {\n this.setTime(this.parent.defaultEndTime, endDate);\n }\n }\n endDate = this.checkEndDate(endDate, data.ganttProperties, false);\n duration = this.getDuration(startDate, endDate, data.ganttProperties.durationUnit, data.ganttProperties.isAutoSchedule, data.ganttProperties.isMilestone);\n if (taskSettings.duration) {\n remainingDuration = data.ganttProperties.duration - sumOfDuration - 1;\n if (remainingDuration <= 0) {\n continue;\n }\n duration = i === segments.length - 1 ? remainingDuration : remainingDuration > 0 &&\n duration > remainingDuration ? remainingDuration : duration;\n endDate = this.getEndDate(startDate, duration, data.ganttProperties.durationUnit, data.ganttProperties, false);\n }\n else if (!taskSettings.duration && taskSettings.endDate) {\n endDate = (!isNullOrUndefined(data.ganttProperties.endDate)) && endDate.getTime() <\n data.ganttProperties.endDate.getTime() && i !== segments.length - 1 ? endDate : data.ganttProperties.endDate;\n duration = this.getDuration(startDate, endDate, data.ganttProperties.durationUnit, data.ganttProperties.isAutoSchedule, data.ganttProperties.isMilestone);\n if (ganttSegments.length > 0 && endDate.getTime() < startDate.getTime()\n && endDate.getTime() <= data.ganttProperties.endDate.getTime()) {\n ganttSegments[i - 1].duration = this.getDuration(ganttSegments[i - 1].startDate, data.ganttProperties.endDate, data.ganttProperties.durationUnit, data.ganttProperties.isAutoSchedule, data.ganttProperties.isMilestone);\n continue;\n }\n }\n }\n segment = {};\n if (!(startDate && endDate) || !(startDate && duration)) {\n break;\n }\n sumOfDuration += duration;\n segment.startDate = startDate;\n segment.endDate = endDate;\n segment.duration = duration;\n segment.width = 0;\n segment.left = 0;\n segment.segmentIndex = i;\n ganttSegments.push(segment);\n if (!isNullOrUndefined(ganttSegments[i - 1])) {\n var offsetDuration = this.getDuration(ganttSegments[i - 1].endDate, ganttSegments[i].startDate, data.ganttProperties.durationUnit, data.ganttProperties.isAutoSchedule, data.ganttProperties.isMilestone);\n segment.offsetDuration = offsetDuration;\n if (offsetDuration < 1) {\n segment.startDate = this.getEndDate(ganttSegments[i - 1].endDate, 1, data.ganttProperties.durationUnit, data.ganttProperties, false);\n segment.startDate = this.checkStartDate(segment.startDate, data.ganttProperties, false);\n segment.endDate = this.getEndDate(segment.startDate, segment.duration, data.ganttProperties.durationUnit, data.ganttProperties, false);\n segment.endDate = !taskSettings.duration && taskSettings.endDate\n && segment.endDate > data.ganttProperties.endDate ? data.ganttProperties.endDate : segment.endDate;\n segment.offsetDuration = 1;\n segment.duration = this.getDuration(segment.startDate, segment.endDate, data.ganttProperties.durationUnit, data.ganttProperties.isAutoSchedule, data.ganttProperties.isMilestone);\n }\n }\n else {\n segment.offsetDuration = 0;\n }\n taskData.push(this.setSegmentTaskData(segment, segments[i]));\n }\n this.parent.setRecordValue('duration', sumOfDuration, data.ganttProperties, true);\n if (!isNullOrUndefined(ganttSegments[ganttSegments.length - 1])) {\n this.parent.setRecordValue('endDate', ganttSegments[ganttSegments.length - 1].endDate, data.ganttProperties, true);\n }\n if (!isNullOrUndefined(taskSettings.endDate) && !isNullOrUndefined(ganttSegments[ganttSegments.length - 1])) {\n this.parent.setRecordValue(this.parent.taskFields.endDate, ganttSegments[ganttSegments.length - 1].endDate, data, true);\n }\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.segments, taskData, data);\n }\n }\n if (ganttSegments.length > 1) {\n this.parent.setRecordValue('segments', ganttSegments, data.ganttProperties, true);\n }\n else {\n ganttSegments = null;\n }\n return ganttSegments;\n };\n TaskProcessor.prototype.setSegmentTaskData = function (segments, segmenttaskData) {\n var taskSettings = this.parent.taskFields;\n var taskData = extend({}, {}, segmenttaskData, true);\n if (!isNullOrUndefined(taskSettings.startDate)) {\n taskData[this.parent.taskFields.startDate] = segments.startDate;\n }\n if (!isNullOrUndefined(taskSettings.endDate)) {\n taskData[this.parent.taskFields.endDate] = segments.endDate;\n }\n if (!isNullOrUndefined(taskSettings.duration)) {\n taskData[this.parent.taskFields.duration] = Number(segments.duration);\n }\n return taskData;\n };\n /**\n * Method to calculate work based on resource unit and duration.\n *\n * @param {IGanttData} ganttData .\n * @returns {void} .\n */\n TaskProcessor.prototype.updateWorkWithDuration = function (ganttData) {\n var resources = ganttData.ganttProperties.resourceInfo;\n var work = 0;\n if (!isNullOrUndefined(resources)) {\n var resourcesLength = resources.length;\n var index = void 0;\n var resourceUnit = void 0;\n var resourceOneDayWork = void 0;\n var actualOneDayWork = (this.parent.secondsPerDay) / 3600;\n var durationInDay = this.getDurationInDay(ganttData.ganttProperties.duration, ganttData.ganttProperties.durationUnit);\n for (index = 0; index < resourcesLength; index++) {\n resourceUnit = resources[index][this.parent.resourceFields.unit]; //in percentage\n resourceOneDayWork = resourceUnit > 0 ? (actualOneDayWork * resourceUnit) / 100 : actualOneDayWork; //in hours\n work += (resourceOneDayWork * durationInDay);\n }\n //Update work as per defined unit.\n if (ganttData.ganttProperties.workUnit === 'minute') {\n work = work * 60;\n }\n if (ganttData.ganttProperties.workUnit === 'day') {\n work = work / actualOneDayWork;\n }\n //To check the decimal places.\n if (work % 1 !== 0) {\n work = parseFloat(work.toFixed(2));\n }\n }\n if (ganttData.childRecords.length > 0 && this.parent.isOnEdit) {\n var childCompletedWorks = 0;\n for (var i = 0; i < ganttData.childRecords.length; i++) {\n childCompletedWorks += ganttData.childRecords[i].ganttProperties.work;\n }\n work += childCompletedWorks;\n }\n this.parent.setRecordValue('work', work, ganttData.ganttProperties, true);\n if (!isNullOrUndefined(this.parent.taskFields.work)) {\n this.parent.dataOperation.updateMappingData(ganttData, 'work');\n }\n };\n /**\n *\n * @param {IGanttData} parent .\n * @returns {IParent} .\n * @private\n */\n TaskProcessor.prototype.getCloneParent = function (parent) {\n if (!isNullOrUndefined(parent)) {\n var cloneParent = {};\n cloneParent.uniqueID = parent.uniqueID;\n cloneParent.expanded = parent.expanded;\n cloneParent.level = parent.level;\n cloneParent.index = parent.index;\n cloneParent.taskId = parent.ganttProperties.rowUniqueID;\n return cloneParent;\n }\n else {\n return null;\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.reUpdateResources = function () {\n if (this.parent.flatData.length > 0) {\n var data = void 0;\n var ganttProperties = void 0;\n var ganttData = void 0;\n for (var index = 0; index < this.parent.flatData.length; index++) {\n data = this.parent.flatData[index].taskData;\n ganttProperties = this.parent.flatData[index].ganttProperties;\n ganttData = this.parent.flatData[index];\n this.parent.setRecordValue('resourceInfo', this.setResourceInfo(data), ganttProperties, true);\n this.updateResourceName(ganttData);\n }\n }\n };\n TaskProcessor.prototype.addTaskData = function (ganttData, data, isLoad) {\n var _this = this;\n var taskSettings = this.parent.taskFields;\n var dataManager = this.parent.dataSource;\n if (isLoad) {\n if (taskSettings.parentID || (dataManager instanceof DataManager &&\n dataManager.dataSource.json && dataManager.dataSource.offline)) {\n if (taskSettings.parentID) {\n var id = data[taskSettings.id];\n var index = this.taskIds.indexOf(id.toString());\n var tempData_1 = (index > -1) ? this.dataArray[index] : {};\n if (!isNullOrUndefined(this.parent.taskFields.segmentId)) {\n var segmentDataCollection = this.segmentCollection.\n filter(function (x) { return x.key === tempData_1[_this.parent.taskFields.id]; });\n if (segmentDataCollection.length > 0) {\n tempData_1[this.parent.taskFields.segments] = segmentDataCollection[0].items;\n }\n }\n this.parent.setRecordValue('taskData', tempData_1, ganttData);\n }\n else {\n this.parent.setRecordValue('taskData', data, ganttData);\n }\n }\n else {\n this.parent.setRecordValue('taskData', data, ganttData);\n }\n }\n else {\n this.parent.setRecordValue('taskData', data, ganttData);\n }\n };\n TaskProcessor.prototype.updateExpandStateMappingValue = function (ganttData, data) {\n var expandStateMapping = this.parent.taskFields.expandState;\n var mappingValue = data[expandStateMapping];\n var updatableValue;\n if (expandStateMapping && ganttData.hasChildRecords) {\n if (!isNullOrUndefined(mappingValue)) {\n updatableValue = mappingValue.toString() === 'true' ? true : false;\n }\n else if (isNullOrUndefined(mappingValue) && !this.parent.collapseAllParentTasks) {\n updatableValue = true;\n }\n else if (isNullOrUndefined(mappingValue) && this.parent.collapseAllParentTasks) {\n updatableValue = false;\n }\n this.parent.setRecordValue('taskData.' + expandStateMapping, updatableValue, ganttData);\n this.parent.setRecordValue(expandStateMapping, updatableValue, ganttData);\n this.parent.setRecordValue('expanded', updatableValue, ganttData);\n }\n };\n /**\n * @param {IGanttData} ganttData .\n * @param {object} data .\n * @returns {void} .\n */\n TaskProcessor.prototype.setValidatedDates = function (ganttData, data) {\n var ganttProperties = ganttData.ganttProperties;\n var taskSettings = this.parent.taskFields;\n var duration = data[taskSettings.duration];\n var startDate = this.getDateFromFormat(data[taskSettings.startDate], true);\n var endDate = this.getDateFromFormat(data[taskSettings.endDate], true);\n duration = isNullOrUndefined(duration) || duration === '' ? null : duration;\n this.parent.setRecordValue('startDate', new Date(startDate.getTime()), ganttProperties, true);\n if (!isNullOrUndefined(duration) && duration !== '') {\n this.updateDurationValue(duration, ganttProperties);\n }\n else {\n this.calculateDuration(ganttData);\n }\n this.parent.setRecordValue('endDate', new Date((endDate.getTime())), ganttProperties, true);\n };\n /**\n *\n * @param {IGanttData} ganttData .\n * @param {object} data .\n * @param {boolean} isLoad .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.calculateScheduledValues = function (ganttData, data, isLoad) {\n var taskSettings = this.parent.taskFields;\n var ganttProperties = ganttData.ganttProperties;\n var duration = data[taskSettings.duration];\n duration = isNullOrUndefined(duration) || duration === '' ? null : duration;\n var startDate;\n var endDate;\n if (ganttProperties.startDate && ganttProperties.endDate) {\n startDate = this.getDateFromFormat(ganttProperties.startDate, true);\n endDate = this.getDateFromFormat(ganttProperties.endDate, true);\n }\n else {\n startDate = this.getDateFromFormat(data[taskSettings.startDate], true);\n endDate = this.getDateFromFormat(data[taskSettings.endDate], true);\n }\n var segments = taskSettings.segments ? (data[taskSettings.segments] ||\n ganttData.taskData[taskSettings.segments]) : null;\n var isMileStone = taskSettings.milestone ? data[taskSettings.milestone] ? true : false : false;\n var durationMapping = data[taskSettings.durationUnit] ? data[taskSettings.durationUnit] : '';\n this.parent.setRecordValue('durationUnit', this.validateDurationUnitMapping(durationMapping), ganttProperties, true);\n var work = !isNullOrUndefined(data[taskSettings.work]) ? parseFloat(data[taskSettings.work]) : 0;\n this.parent.setRecordValue('workUnit', this.validateWorkUnitMapping(this.parent.workUnit), ganttProperties, true);\n var taskTypeMapping = data[taskSettings.type] ? data[taskSettings.type] : '';\n var tType = this.validateTaskTypeMapping(taskTypeMapping);\n this.parent.setRecordValue('taskType', tType, ganttProperties, true);\n if (isLoad && !this.parent.enableValidation && startDate && endDate) {\n this.setValidatedDates(ganttData, data);\n }\n else {\n if (!endDate && !startDate && (isNullOrUndefined(duration) || duration === '')) {\n if (this.parent.allowUnscheduledTasks) {\n return;\n }\n else {\n this.parent.setRecordValue('duration', 1, ganttProperties, true);\n this.parent.setRecordValue('startDate', this.getProjectStartDate(ganttProperties, isLoad), ganttProperties, true);\n this.calculateEndDate(ganttData);\n }\n }\n else if (startDate) {\n this.calculateDateFromStartDate(startDate, endDate, duration, ganttData, isLoad);\n }\n else if (endDate) {\n this.calculateDateFromEndDate(endDate, duration, ganttData);\n }\n else if (!isNullOrUndefined(duration) && duration !== '') {\n this.updateDurationValue(duration, ganttProperties);\n if (this.parent.allowUnscheduledTasks) {\n this.parent.setRecordValue('startDate', null, ganttProperties, true);\n this.parent.setRecordValue('endDate', null, ganttProperties, true);\n }\n else {\n this.parent.setRecordValue('startDate', this.getProjectStartDate(ganttProperties, isLoad), ganttProperties, true);\n this.calculateEndDate(ganttData);\n }\n }\n }\n if (!this.parent.autoCalculateDateScheduling) {\n if (!isNullOrUndefined(ganttData.ganttProperties.startDate)) {\n ganttData[this.parent.taskFields.startDate] = ganttData.ganttProperties.startDate;\n ganttData.taskData[this.parent.taskFields.startDate] = ganttData.ganttProperties.startDate;\n }\n if (!isNullOrUndefined(ganttData.ganttProperties.endDate)) {\n ganttData[this.parent.taskFields.endDate] = ganttData.ganttProperties.endDate;\n ganttData.taskData[this.parent.taskFields.endDate] = ganttData.ganttProperties.endDate;\n }\n }\n if (!isNullOrUndefined(segments)) {\n this.parent.setRecordValue('segments', this.setSegmentsInfo(ganttData, true), ganttProperties, true);\n }\n if (ganttProperties.duration === 0) {\n this.parent.setRecordValue('isMilestone', true, ganttProperties, true);\n this.parent.setRecordValue('endDate', ganttProperties.startDate, ganttProperties, true);\n }\n if (!isNullOrUndefined(isMileStone) && isMileStone) {\n this.parent.setRecordValue('duration', 0, ganttProperties, true);\n this.parent.setRecordValue('isMilestone', true, ganttProperties, true);\n this.parent.setRecordValue('endDate', ganttProperties.startDate, ganttProperties, true);\n }\n if (!isNullOrUndefined(taskSettings.work)) {\n this.parent.setRecordValue('durationUnit', this.parent.durationUnit, ganttProperties, true);\n if (isNaN(work) || isNullOrUndefined(work)) {\n this.parent.setRecordValue('work', 0, ganttProperties, true);\n this.parent.setRecordValue('duration', 0, ganttProperties, true);\n this.parent.setRecordValue('isMilestone', true, ganttProperties, true);\n this.parent.setRecordValue('endDate', ganttProperties.startDate, ganttProperties, true);\n }\n else {\n this.parent.setRecordValue('work', work, ganttProperties, true);\n switch (tType) {\n case 'FixedDuration':\n this.updateUnitWithWork(ganttData);\n break;\n case 'FixedWork':\n this.updateUnitWithWork(ganttData);\n break;\n case 'FixedUnit':\n this.updateDurationWithWork(ganttData);\n break;\n }\n if (!isNullOrUndefined(taskSettings.type)) {\n this.parent.dataOperation.updateMappingData(ganttData, 'type');\n }\n if (ganttProperties.duration === 0) {\n this.parent.setRecordValue('isMilestone', true, ganttProperties, true);\n this.parent.setRecordValue('endDate', ganttProperties.startDate, ganttProperties, true);\n }\n else if (!isNullOrUndefined(ganttProperties.startDate) && !isNullOrUndefined(ganttProperties.duration)) {\n this.parent.setRecordValue('isMilestone', false, ganttProperties, true);\n this.calculateEndDate(ganttData);\n }\n }\n this.parent.dataOperation.updateMappingData(ganttData, 'work');\n }\n else if (taskSettings.type && ganttProperties.taskType) {\n this.parent.dataOperation.updateMappingData(ganttData, 'type');\n }\n };\n /**\n * Method to update duration with work value.\n *\n * @param {IGanttData} ganttData .\n * @returns {void} .\n */\n TaskProcessor.prototype.updateDurationWithWork = function (ganttData) {\n var ganttProperties = ganttData.ganttProperties;\n var resources = ganttProperties.resourceInfo;\n if (!isNullOrUndefined(resources)) {\n var resourcesLength = !isNullOrUndefined(resources) ? resources.length : 0;\n var totalResourceOneDayWork = 0;\n var actualOneDayWork = (this.parent.secondsPerDay) / 3600;\n var updatedDuration = 0;\n var resourceUnit = void 0;\n var index = void 0;\n for (index = 0; index < resourcesLength; index++) {\n resourceUnit = resources[index][this.parent.resourceFields.unit]; //in percentage\n totalResourceOneDayWork += (resourceUnit > 0 ? (actualOneDayWork * resourceUnit) / 100 : actualOneDayWork); //in hours\n }\n var totalHours = this.getWorkInHour(ganttProperties.work, ganttProperties.workUnit);\n if (resourcesLength > 0) {\n updatedDuration += (totalHours / totalResourceOneDayWork);\n }\n //Update duration as per defined unit.\n if (ganttProperties.durationUnit === 'minute') {\n updatedDuration = updatedDuration * actualOneDayWork * 60;\n }\n if (ganttProperties.durationUnit === 'hour') {\n updatedDuration = updatedDuration * actualOneDayWork;\n }\n //To check the decimal places.\n if (updatedDuration % 1 !== 0) {\n updatedDuration = parseFloat(updatedDuration.toFixed(2));\n }\n if (!isNullOrUndefined(ganttProperties.duration)) {\n this.parent.setRecordValue('duration', updatedDuration, ganttProperties, true);\n }\n this.parent.dataOperation.updateMappingData(ganttData, 'duration');\n }\n };\n /**\n * Update units of resources with respect to duration and work of a task.\n *\n * @param {IGanttData} ganttData .\n * @returns {void} .\n */\n TaskProcessor.prototype.updateUnitWithWork = function (ganttData) {\n var ganttProperties = ganttData.ganttProperties;\n var resources = ganttProperties.resourceInfo;\n var resourcesLength = !isNullOrUndefined(resources) ? resources.length : 0;\n var actualOneDayWork = (this.parent.secondsPerDay) / 3600;\n if (resourcesLength === 0) {\n return;\n }\n var durationInDay = this.getDurationInDay(ganttData.ganttProperties.duration, ganttData.ganttProperties.durationUnit);\n var totalHours = this.getWorkInHour(ganttProperties.work, ganttProperties.workUnit);\n var totalUnitInPercentage = durationInDay > 0 ? (totalHours / (durationInDay * actualOneDayWork)) * 100 : 0;\n var individualUnit = totalUnitInPercentage > 0 ? totalUnitInPercentage / resourcesLength : 100;\n //To check the decimal places.\n if (individualUnit % 1 !== 0) {\n individualUnit = parseFloat(individualUnit.toFixed(2));\n }\n for (var index = 0; index < resourcesLength; index++) {\n resources[index][this.parent.resourceFields.unit] = individualUnit;\n }\n //To update the unit value in data source\n this.updateResourceName(ganttData);\n };\n TaskProcessor.prototype.calculateDateFromEndDate = function (endDate, duration, ganttData) {\n var ganttProperties = ganttData.ganttProperties;\n if (endDate.getHours() === 0 && this.parent.defaultEndTime !== 86400) {\n this.setTime(this.parent.defaultEndTime, endDate);\n }\n var validateAsMilestone = (parseInt(duration, 10) === 0) ? true : null;\n this.parent.setRecordValue('endDate', this.checkEndDate(endDate, ganttData.ganttProperties, validateAsMilestone), ganttProperties, true);\n if (isNullOrUndefined(duration) || duration === '') {\n if (this.parent.allowUnscheduledTasks) {\n this.parent.setRecordValue('startDate', null, ganttProperties, true);\n this.parent.setRecordValue('duration', null, ganttProperties, true);\n }\n else {\n this.parent.setRecordValue('duration', 1, ganttProperties, true);\n this.parent.setRecordValue('startDate', this.getStartDate(ganttProperties.endDate, ganttProperties.duration, ganttProperties.durationUnit, ganttProperties), ganttProperties, true);\n }\n }\n else if (!isNullOrUndefined(duration) && duration !== '') {\n this.updateDurationValue(duration, ganttProperties);\n this.parent.setRecordValue('startDate', this.getStartDate(ganttProperties.endDate, ganttProperties.duration, ganttProperties.durationUnit, ganttProperties), ganttProperties, true);\n }\n };\n TaskProcessor.prototype.calculateDateFromStartDate = function (startDate, endDate, duration, ganttData, isLoad) {\n var ganttProperties = ganttData.ganttProperties;\n var validateAsMilestone = (parseInt(duration, 10) === 0 || ((startDate && endDate) &&\n (new Date(startDate.getTime()) === new Date(endDate.getTime())))) ? true : null;\n this.parent.setRecordValue('startDate', this.checkStartDate(startDate, ganttProperties, validateAsMilestone, isLoad), ganttProperties, true);\n if (this.parent.isTreeGridRendered && ganttData) {\n this.updateTaskData(ganttData);\n }\n if (!endDate && (isNullOrUndefined(duration) || duration === '')) {\n if (this.parent.allowUnscheduledTasks) {\n this.parent.setRecordValue('endDate', null, ganttProperties, true);\n this.parent.setRecordValue('duration', null, ganttProperties, true);\n }\n else {\n this.parent.setRecordValue('duration', 1, ganttProperties, true);\n this.calculateEndDate(ganttData);\n }\n }\n else if (!isNullOrUndefined(duration) && !endDate) {\n this.updateDurationValue(duration, ganttProperties);\n this.calculateEndDate(ganttData);\n }\n else if (endDate && (isNullOrUndefined(duration) || duration === '')) {\n if (endDate.getHours() === 0 && this.parent.defaultEndTime !== 86400) {\n this.setTime(this.parent.defaultEndTime, endDate);\n }\n this.parent.setRecordValue('endDate', this.checkEndDate(endDate, ganttData.ganttProperties), ganttProperties, true);\n if (this.compareDates(ganttProperties.startDate, ganttProperties.endDate) === 1) {\n this.parent.setRecordValue('endDate', ganttProperties.startDate, ganttProperties, true);\n this.parent.setRecordValue('isMilestone', true, ganttProperties, true);\n this.parent.setRecordValue('duration', 0, ganttProperties, true);\n }\n else {\n this.calculateDuration(ganttData);\n }\n }\n else {\n this.updateDurationValue(duration, ganttProperties);\n this.calculateEndDate(ganttData);\n }\n };\n /**\n *\n * @param {number} parentWidth .\n * @param {number} percent .\n * @returns {number} .\n * @private\n */\n TaskProcessor.prototype.getProgressWidth = function (parentWidth, percent) {\n return (parentWidth * percent) / 100;\n };\n /**\n *\n * @param {IGanttData} ganttData .\n * @param {boolean} isAuto .\n * @returns {number} .\n * @private\n */\n TaskProcessor.prototype.calculateWidth = function (ganttData, isAuto) {\n var ganttProp = ganttData.ganttProperties;\n var sDate = isAuto ? ganttProp.autoStartDate : ganttProp.startDate;\n var eDate = isAuto ? ganttProp.autoEndDate : ganttProp.endDate;\n var unscheduledTaskWidth = 3;\n if (isNullOrUndefined(sDate) && isNullOrUndefined(eDate)) {\n sDate = this.getValidStartDate(ganttProp, isAuto);\n eDate = this.getValidEndDate(ganttProp, isAuto);\n }\n if (isNullOrUndefined(sDate) || isNullOrUndefined(eDate)) {\n return unscheduledTaskWidth;\n }\n else if (ganttProp.isMilestone && (!ganttData.hasChildRecords || ganttProp.isAutoSchedule)) {\n //let taskBarHeight: number = this.getTaskbarHeight();\n return 0;\n }\n else {\n return this.getTaskWidth(sDate, eDate, ganttProp);\n }\n };\n TaskProcessor.prototype.getTaskbarHeight = function () {\n var rowHeight = this.parent.rowHeight;\n var taskBarHeight = this.parent.taskbarHeight;\n if (taskBarHeight < rowHeight) {\n return taskBarHeight;\n }\n else {\n return rowHeight;\n }\n };\n /**\n * Method to calculate left\n *\n * @param {ITaskData} ganttProp .\n * @param {boolean} isAuto .\n * @returns {number} .\n * @private\n */\n TaskProcessor.prototype.calculateLeft = function (ganttProp, isAuto) {\n var sDate = null;\n var left = -300;\n var startDate = isAuto ? ganttProp.autoStartDate : ganttProp.startDate;\n var endDate = isAuto ? ganttProp.autoEndDate : ganttProp.endDate;\n var duration = isAuto ? ganttProp.autoDuration : ganttProp.duration; // eslint-disable-line\n var milestone = ganttProp.isMilestone;\n if (startDate) {\n sDate = new Date(startDate.getTime());\n }\n else if (endDate) {\n sDate = new Date(endDate.getTime());\n milestone = isNullOrUndefined(startDate) && this.parent.allowUnscheduledTasks ? false : true;\n }\n else {\n sDate = this.getValidStartDate(ganttProp);\n }\n if (!isNullOrUndefined(sDate)) {\n left = this.getTaskLeft(sDate, milestone);\n }\n return left;\n };\n /**\n * calculate the left position of the auto scheduled taskbar\n *\n * @param {ITaskData} ganttProperties - Defines the gantt data.\n * @returns {number} .\n * @private\n */\n TaskProcessor.prototype.calculateAutoLeft = function (ganttProperties) {\n return this.getTaskLeft(ganttProperties.autoStartDate, ganttProperties.isMilestone);\n };\n /**\n * To calculate duration of Gantt record with auto scheduled start date and auto scheduled end date\n *\n * @param {ITaskData} ganttProperties - Defines the gantt data.\n * @returns {number} .\n */\n TaskProcessor.prototype.calculateAutoDuration = function (ganttProperties) {\n return this.getDuration(ganttProperties.autoStartDate, ganttProperties.autoEndDate, ganttProperties.durationUnit, false, ganttProperties.isMilestone);\n };\n /**\n * calculate the with between auto scheduled start date and auto scheduled end date\n *\n * @param {ITaskData} ganttProperties - Defines the gantt data.\n * @returns {number} .\n * @private\n */\n TaskProcessor.prototype.calculateAutoWidth = function (ganttProperties) {\n return this.getTaskWidth(ganttProperties.autoStartDate, ganttProperties.autoEndDate);\n };\n /**\n * calculate the left margin of the baseline element\n *\n * @param {ITaskData} ganttProperties .\n * @returns {number} .\n * @private\n */\n TaskProcessor.prototype.calculateBaselineLeft = function (ganttProperties) {\n var baselineStartDate = this.getDateFromFormat(ganttProperties.baselineStartDate);\n var baselineEndDate = this.getDateFromFormat(ganttProperties.baselineEndDate);\n if (baselineStartDate && baselineEndDate) {\n return (this.getTaskLeft(baselineStartDate, ganttProperties.isMilestone));\n }\n else {\n return 0;\n }\n };\n /**\n * calculate the width between baseline start date and baseline end date.\n *\n * @param {ITaskData} ganttProperties .\n * @returns {number} .\n * @private\n */\n TaskProcessor.prototype.calculateBaselineWidth = function (ganttProperties) {\n var baselineStartDate = this.getDateFromFormat(ganttProperties.baselineStartDate);\n var baselineEndDate = this.getDateFromFormat(ganttProperties.baselineEndDate);\n if (baselineStartDate && baselineEndDate && (baselineStartDate.getTime() !== baselineEndDate.getTime())) {\n return (this.getTaskWidth(baselineStartDate, baselineEndDate));\n }\n else {\n return 0;\n }\n };\n /**\n * To get tasks width value\n *\n * @param {Date} startDate .\n * @param {Date} endDate .\n * @returns {number} .\n * @private\n */\n TaskProcessor.prototype.getTaskWidth = function (startDate, endDate, ganttData) {\n var sDate = new Date(startDate.getTime());\n var eDate = new Date(endDate.getTime());\n var tierMode = this.parent.timelineModule.bottomTier !== 'None' ? this.parent.timelineModule.bottomTier :\n this.parent.timelineModule.topTier;\n var isValid = false;\n var modifiedsDate = new Date(startDate.getTime());\n var hour = 0;\n if (!isNullOrUndefined(ganttData) && ganttData.durationUnit == 'hour') {\n modifiedsDate = new Date(modifiedsDate.getTime() + ganttData.duration * 60 * 60 * 1000);\n }\n if (!isNullOrUndefined(ganttData) && (ganttData.durationUnit == 'minute') || !isNullOrUndefined(ganttData) && ganttData.durationUnit == \"day\" && ganttData.duration < 1) {\n modifiedsDate = new Date(modifiedsDate.getTime() + ganttData.duration * 60 * 1000);\n }\n for (var i = 0; i < this.parent.dayWorkingTime.length; i++) {\n hour = hour + this.parent.dayWorkingTime[i].to - this.parent.dayWorkingTime[i].from;\n }\n var dateDiff = modifiedsDate.getTime() - sDate.getTime();\n if (!isNullOrUndefined(ganttData) && (ganttData.durationUnit == 'minute' && ganttData.duration < (hour * 60)) || !isNullOrUndefined(ganttData) && ganttData.durationUnit == \"day\" && ganttData.duration < 1) {\n if (tierMode === 'Day') {\n if ((Math.floor((dateDiff / (1000 * 60 * 60)) % 24) >= hour || dateDiff === 0)) {\n isValid = true;\n }\n if (this.getSecondsInDecimal(sDate) === this.parent.defaultStartTime && isValid) {\n sDate.setHours(0, 0, 0, 0);\n }\n if (this.getSecondsInDecimal(eDate) === this.parent.defaultEndTime) {\n eDate.setHours(24);\n }\n if (this.getSecondsInDecimal(eDate) === this.parent.defaultStartTime) {\n eDate.setHours(0, 0, 0, 0);\n }\n }\n else {\n isValid = true;\n }\n if ((sDate).getTime() === (eDate).getTime()) {\n return (this.parent.perDayWidth);\n }\n else {\n if (isValid) {\n return ((this.getTimeDifference(sDate, eDate) / (1000 * 60 * 60 * 24)) * this.parent.perDayWidth);\n }\n else {\n return ((this.getTimeDifference(sDate, eDate) / (1000 * 60 * 60 * hour)) * this.parent.perDayWidth);\n }\n }\n }\n else {\n if (tierMode === 'Day') {\n if (this.getSecondsInDecimal(sDate) === this.parent.defaultStartTime) {\n sDate.setHours(0, 0, 0, 0);\n }\n if (this.getSecondsInDecimal(eDate) === this.parent.defaultEndTime) {\n eDate.setHours(24);\n }\n if (this.getSecondsInDecimal(eDate) === this.parent.defaultStartTime) {\n eDate.setHours(0, 0, 0, 0);\n }\n }\n if ((sDate).getTime() === (eDate).getTime()) {\n return (this.parent.perDayWidth);\n }\n else {\n return ((this.getTimeDifference(sDate, eDate) / (1000 * 60 * 60 * 24)) * this.parent.perDayWidth);\n }\n }\n };\n /**\n * Get task left value\n *\n * @param {Date} startDate .\n * @param {boolean} isMilestone .\n * @returns {number} .\n * @private\n */\n TaskProcessor.prototype.getTaskLeft = function (startDate, isMilestone) {\n var date = new Date(startDate.getTime());\n var tierMode = this.parent.timelineModule.bottomTier !== 'None' ? this.parent.timelineModule.bottomTier :\n this.parent.timelineModule.topTier;\n if (tierMode === 'Day') {\n if (this.getSecondsInDecimal(date) === this.parent.defaultStartTime) {\n date.setHours(0, 0, 0, 0);\n }\n else if (isMilestone && this.getSecondsInDecimal(date) === this.parent.defaultEndTime) {\n date.setHours(24);\n }\n else if (this.getSecondsInDecimal(date) === this.parent.defaultEndTime && this.parent.allowUnscheduledTasks) {\n date.setHours(22);\n }\n }\n var timelineStartDate = this.parent.timelineModule.timelineStartDate;\n if (timelineStartDate) {\n return (date.getTime() - timelineStartDate.getTime()) / (1000 * 60 * 60 * 24) * this.parent.perDayWidth;\n }\n else {\n return 0;\n }\n };\n TaskProcessor.prototype.getSplitTaskWidth = function (sDate, duration, data) {\n var startDate = new Date(sDate.getTime());\n var endDate = new Date((this.getEndDate(startDate, duration, data.ganttProperties.durationUnit, data.ganttProperties, false).getTime()));\n var tierViewMode = this.parent.timelineModule.bottomTier !== 'None' ? this.parent.timelineModule.bottomTier :\n this.parent.timelineModule.topTier;\n if (tierViewMode === 'Day') {\n if (this.getSecondsInDecimal(startDate) === this.parent.defaultStartTime) {\n startDate.setHours(0, 0, 0, 0);\n }\n if (this.getSecondsInDecimal(endDate) === this.parent.defaultEndTime) {\n endDate.setHours(24);\n }\n if (this.getSecondsInDecimal(endDate) === this.parent.defaultStartTime) {\n endDate.setHours(0, 0, 0, 0);\n }\n }\n return ((this.getTimeDifference(startDate, endDate) / (1000 * 60 * 60 * 24)) * this.parent.perDayWidth);\n };\n TaskProcessor.prototype.getSplitTaskLeft = function (sDate, segmentTaskStartDate) {\n var stDate = new Date(sDate.getTime());\n var tierViewMode = this.parent.timelineModule.bottomTier !== 'None' ? this.parent.timelineModule.bottomTier :\n this.parent.timelineModule.topTier;\n if (tierViewMode === 'Day') {\n if (this.getSecondsInDecimal(stDate) === this.parent.defaultStartTime) {\n stDate.setHours(0, 0, 0, 0);\n }\n if (this.getSecondsInDecimal(segmentTaskStartDate) === this.parent.defaultStartTime) {\n segmentTaskStartDate.setHours(0, 0, 0, 0);\n }\n }\n if (segmentTaskStartDate) {\n return (stDate.getTime() - segmentTaskStartDate.getTime()) / (1000 * 60 * 60 * 24) * this.parent.perDayWidth;\n }\n else {\n return 0;\n }\n };\n /**\n *\n * @param {IGanttData} ganttData .\n * @param {string} fieldName .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateMappingData = function (ganttData, fieldName) {\n var columnMapping = this.parent.columnMapping;\n var ganttProp = ganttData.ganttProperties;\n if (isNullOrUndefined(columnMapping[fieldName]) && fieldName !== 'taskType' && fieldName !== 'segments') {\n return;\n }\n if (fieldName === 'predecessorName') {\n //\n }\n else if (fieldName === 'resourceInfo') {\n var resourceData = ganttProp.resourceInfo;\n var resourceSettings = this.parent.resourceFields;\n // eslint-disable-next-line\n var resourcesId = [];\n var resourcesName = [];\n if (!isNullOrUndefined(resourceData)) {\n for (var i = 0; i < resourceData.length; i++) {\n resourcesId.push(resourceData[i][resourceSettings.id]);\n var resName = resourceData[i][resourceSettings.name];\n var resourceUnit = resourceData[i][resourceSettings.unit];\n if (resourceUnit !== 100) {\n resName += '[' + resourceUnit + '%' + ']';\n }\n resourcesName.push(resName);\n }\n }\n this.parent.setRecordValue('resourceNames', resourcesName.join(','), ganttProp, true);\n this.updateTaskDataResource(ganttData);\n this.parent.setRecordValue(columnMapping[fieldName], resourcesName.join(','), ganttData);\n }\n else if (fieldName === 'startDate' || fieldName === 'endDate') {\n this.setRecordDate(ganttData, ganttProp[fieldName], columnMapping[fieldName]);\n }\n else if (fieldName === 'duration') {\n this.setRecordDuration(ganttData, columnMapping[fieldName]);\n }\n else if (fieldName === 'work') {\n this.parent.setRecordValue('taskData.' + columnMapping[fieldName], this.getWorkString(ganttProp.work, ganttProp.workUnit), ganttData);\n this.parent.setRecordValue(columnMapping[fieldName], ganttProp[fieldName], ganttData);\n }\n else if (fieldName === 'type') {\n this.parent.setRecordValue('taskData.' + columnMapping[fieldName], ganttProp[fieldName], ganttData);\n this.parent.setRecordValue(columnMapping[fieldName], ganttProp[fieldName], ganttData);\n }\n else if (fieldName === 'manual') {\n this.parent.setRecordValue('taskData.' + columnMapping[fieldName], !ganttProp.isAutoSchedule, ganttData);\n this.parent.setRecordValue(columnMapping[fieldName], !ganttProp.isAutoSchedule, ganttData);\n }\n else if (fieldName === 'segments') {\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.segments, this.segmentTaskData(ganttData), ganttData);\n }\n else {\n this.parent.setRecordValue('taskData.' + columnMapping[fieldName], ganttProp[fieldName], ganttData);\n this.parent.setRecordValue(columnMapping[fieldName], ganttProp[fieldName], ganttData);\n }\n };\n TaskProcessor.prototype.segmentTaskData = function (data) {\n var segments = data.ganttProperties.segments;\n var taskSettings = this.parent.taskFields;\n if (isNullOrUndefined(segments)) {\n return null;\n }\n var taskData = extend([], [], data.taskData[taskSettings.segments], true);\n for (var i = 0; i < segments.length; i++) {\n if (this.parent.isEdit || (this.parent.editModule && this.parent.editModule.dialogModule &&\n getValue('isEdit', this.parent.editModule.dialogModule)) || (this.parent.contextMenuModule && getValue('isEdit', this.parent.contextMenuModule))) {\n taskData[i] = {};\n }\n if (!isNullOrUndefined(taskSettings.startDate)) {\n taskData[i][this.parent.taskFields.startDate] = segments[i].startDate;\n }\n if (!isNullOrUndefined(taskSettings.endDate)) {\n taskData[i][this.parent.taskFields.endDate] = segments[i].endDate;\n }\n if (!isNullOrUndefined(taskSettings.duration)) {\n taskData[i][this.parent.taskFields.duration] = Number(segments[i].duration);\n }\n }\n return taskData;\n };\n /**\n * Method to update the task data resource values\n *\n * @param {IGanttData} ganttData .\n * @returns {void} .\n */\n TaskProcessor.prototype.updateTaskDataResource = function (ganttData) {\n var resourceData = ganttData.ganttProperties.resourceInfo;\n var preTaskResources = ganttData.taskData[this.parent.taskFields.resourceInfo];\n var resourceSettings = this.parent.resourceFields;\n if (isNullOrUndefined(preTaskResources)) {\n ganttData.taskData[this.parent.taskFields.resourceInfo] = resourceData;\n }\n else if (resourceData.length) {\n for (var i = 0; i < resourceData.length; i++) {\n var isAdded = false;\n for (var j = 0; j < preTaskResources.length; j++) {\n if (typeof preTaskResources[j] === 'number' || typeof preTaskResources[j] === 'string') {\n if (parseInt(preTaskResources[j], 10) === parseInt(resourceData[i][resourceSettings.id], 10)) {\n preTaskResources[j] = resourceData[i];\n isAdded = true;\n break;\n }\n }\n else if (preTaskResources[j][resourceSettings.id] === resourceData[i][resourceSettings.id] && typeof preTaskResources[j] !== 'number') {\n preTaskResources[j] = extend({}, preTaskResources[j], resourceData[i], true);\n isAdded = true;\n break;\n }\n }\n if (!isAdded) {\n preTaskResources.push(resourceData[i]);\n }\n }\n var data_1 = [];\n var _loop_4 = function (k) {\n resourceData.filter(function (resourceInfo) {\n if (resourceInfo[resourceSettings.id] === preTaskResources[k][resourceSettings.id] && data_1.indexOf(preTaskResources[k]) === -1) {\n data_1.push(preTaskResources[k]);\n }\n });\n };\n for (var k = 0; k < preTaskResources.length; k++) {\n _loop_4(k);\n }\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.resourceInfo, data_1, ganttData);\n }\n else {\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.resourceInfo, [], ganttData);\n }\n };\n TaskProcessor.prototype.setRecordDate = function (task, value, mapping) {\n var tempDate = typeof value === 'string' ? new Date(value) : value;\n if (!isNullOrUndefined(value)) {\n value = new Date(tempDate.getTime());\n }\n this.parent.setRecordValue(mapping, value, task);\n if (!isNullOrUndefined(value)) {\n value = new Date(tempDate.getTime());\n }\n if (!this.parent.isLoad && !this.parent.isDynamicData) {\n this.parent.setRecordValue('taskData.' + mapping, value, task);\n }\n this.parent.isDynamicData = false;\n };\n TaskProcessor.prototype.getDurationInDay = function (duration, durationUnit) {\n if (durationUnit === 'day') {\n return duration;\n }\n else if (durationUnit === 'hour') {\n return duration / (this.parent.secondsPerDay / 3600);\n }\n else {\n return duration / (this.parent.secondsPerDay / 60);\n }\n };\n TaskProcessor.prototype.setRecordDuration = function (task, mapping) {\n var duration = task.ganttProperties.duration;\n var durationUnit = task.ganttProperties.durationUnit;\n if (!isNullOrUndefined(duration)) {\n this.parent.setRecordValue(mapping, task.ganttProperties.duration, task);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var durationValue = (getValue(mapping, task.taskData));\n if (isNaN(durationValue) && isNullOrUndefined(this.parent.taskFields.durationUnit) && !isNullOrUndefined(durationValue)) {\n this.parent.setRecordValue('taskData.' + mapping, this.getDurationString(duration, durationUnit), task);\n }\n else {\n if (typeof durationValue === 'string') {\n this.parent.setRecordValue('taskData.' + mapping, duration.toString(), task);\n }\n else {\n this.parent.setRecordValue('taskData.' + mapping, duration, task);\n }\n }\n }\n else {\n this.parent.setRecordValue(mapping, duration, task);\n this.parent.setRecordValue('taskData.' + mapping, duration, task);\n }\n if (this.parent.taskFields.durationUnit) {\n task.taskData[this.parent.taskFields.durationUnit] = task.ganttProperties.durationUnit;\n }\n };\n TaskProcessor.prototype.setDataSource = function (data) {\n var createData = [];\n var length = data.length;\n for (var i = 0; i < length; i++) {\n var record = data[i];\n createData.push(record);\n if (!(isNullOrUndefined(data[i][this.parent.taskFields.child]))) {\n this.setDataSource(data[i][this.parent.taskFields.child]);\n }\n }\n return createData;\n };\n TaskProcessor.prototype.setStartDate = function (task) {\n var _this = this;\n var hierarchicalData = [];\n if (!isNullOrUndefined(this.parent.taskFields.parentID) && !isNullOrUndefined(this.parent.taskFields.id)) {\n hierarchicalData = this.setDataSource(this.parent.dataSource);\n }\n else {\n hierarchicalData = this.parent.dataSource;\n }\n hierarchicalData.map(function (record) {\n if (task.ganttProperties.taskId === record[_this.parent.taskFields.id]) {\n if (!isNullOrUndefined(_this.parent.taskFields.startDate)) {\n task[_this.parent.taskFields.startDate] = record[_this.parent.taskFields.startDate];\n }\n if (!isNullOrUndefined(_this.parent.taskFields.endDate)) {\n task[_this.parent.taskFields.endDate] = record[_this.parent.taskFields.endDate];\n }\n }\n });\n };\n TaskProcessor.prototype.getWorkInHour = function (work, workUnit) {\n if (workUnit === 'day') {\n return work * (this.parent.secondsPerDay / 3600);\n }\n else if (workUnit === 'minute') {\n return work / 60;\n }\n else {\n return work;\n }\n };\n /**\n *\n * @param {IGanttData} ganttData .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateTaskData = function (ganttData) {\n var dataMapping = this.parent.taskFields;\n var ganttProperties = ganttData.ganttProperties;\n if (!isNullOrUndefined(ganttData.taskData)) {\n var data = ganttData.taskData;\n if (dataMapping.id) {\n this.parent.setRecordValue('taskData.' + dataMapping.id, ganttProperties.taskId, ganttData);\n this.parent.setRecordValue(dataMapping.id, ganttProperties.taskId, ganttData);\n }\n if (dataMapping.name) {\n if (!this.parent.isLoad) {\n this.parent.setRecordValue('taskData.' + dataMapping.name, ganttProperties.taskName, ganttData);\n }\n this.parent.setRecordValue(dataMapping.name, ganttProperties.taskName, ganttData);\n }\n if (dataMapping.startDate) {\n this.setRecordDate(ganttData, ganttProperties.startDate, dataMapping.startDate);\n }\n if (dataMapping.endDate) {\n this.setRecordDate(ganttData, ganttProperties.endDate, dataMapping.endDate);\n }\n if (dataMapping.duration) {\n if (!isNullOrUndefined(dataMapping.milestone) && !ganttData.taskData[dataMapping.milestone]) {\n this.setRecordDuration(ganttData, dataMapping.duration);\n }\n }\n if (dataMapping.durationUnit) {\n data[dataMapping.durationUnit] = ganttProperties.durationUnit;\n }\n if (dataMapping.progress) {\n if (!this.parent.isLoad) {\n this.parent.setRecordValue('taskData.' + dataMapping.progress, ganttProperties.progress, ganttData);\n }\n this.parent.setRecordValue(dataMapping.progress, ganttProperties.progress, ganttData);\n }\n if (dataMapping.baselineStartDate) {\n this.setRecordDate(ganttData, ganttProperties.baselineStartDate, dataMapping.baselineStartDate);\n }\n if (dataMapping.baselineEndDate) {\n this.setRecordDate(ganttData, ganttProperties.baselineEndDate, dataMapping.baselineEndDate);\n }\n if (dataMapping.notes) {\n if (!this.parent.isLoad) {\n this.parent.setRecordValue('taskData.' + dataMapping.notes, ganttProperties.notes, ganttData);\n }\n this.parent.setRecordValue(dataMapping.notes, ganttProperties.notes, ganttData);\n }\n if (dataMapping.cssClass) {\n if (!this.parent.isLoad) {\n this.parent.setRecordValue('taskData.' + dataMapping.cssClass, ganttProperties.cssClass, ganttData);\n }\n this.parent.setRecordValue(dataMapping.cssClass, ganttProperties.cssClass, ganttData);\n }\n if (dataMapping.indicators) {\n if (!this.parent.isLoad) {\n this.parent.setRecordValue('taskData.' + dataMapping.indicators, ganttProperties.indicators, ganttData);\n }\n this.parent.setRecordValue(dataMapping.indicators, ganttProperties.indicators, ganttData);\n }\n if (dataMapping.parentID) {\n var parentID = this.parent.viewType === 'ProjectView' ? ganttProperties.parentId : data[dataMapping.parentID];\n this.parent.setRecordValue('taskData.' + dataMapping.parentID, parentID, ganttData);\n this.parent.setRecordValue(dataMapping.parentID, ganttProperties.parentId, ganttData);\n }\n if (dataMapping.work) {\n if (!this.parent.isLoad) {\n this.parent.setRecordValue('taskData.' + dataMapping.work, this.getWorkString(ganttProperties.work, ganttProperties.workUnit), ganttData);\n }\n this.parent.setRecordValue(dataMapping.work, ganttProperties.work, ganttData);\n }\n if (dataMapping.type) {\n if (!this.parent.isLoad) {\n this.parent.setRecordValue('taskData.' + dataMapping.type, ganttProperties.taskType, ganttData);\n }\n this.parent.setRecordValue(dataMapping.type, ganttProperties.taskType, ganttData);\n }\n }\n };\n /**\n * To set resource value in Gantt record\n *\n * @param {object} data .\n * @returns {object[]} .\n * @private\n */\n TaskProcessor.prototype.setResourceInfo = function (data) {\n // eslint-disable-next-line\n var resourceIdCollection;\n if (isNullOrUndefined(data[this.parent.taskFields.resourceInfo])) {\n return resourceIdCollection;\n }\n resourceIdCollection = data[this.parent.taskFields.resourceInfo];\n var resourceData;\n if (!isNullOrUndefined(this.parent.editModule) && !isNullOrUndefined(this.parent.editModule.dialogModule)\n && this.parent.editModule.dialogModule.isAddNewResource) {\n resourceData = this.parent.editModule.dialogModule.ganttResources;\n }\n else {\n resourceData = this.parent.resources;\n }\n var resourceIDMapping = this.parent.resourceFields.id;\n var resourceUnitMapping = this.parent.resourceFields.unit;\n var resourceGroup = this.parent.resourceFields.group;\n var resources = [];\n var _loop_5 = function (count) {\n var resource = resourceData.filter(function (resourceInfo) {\n if (typeof (resourceIdCollection[count]) === 'object' &&\n resourceIdCollection[count][resourceIDMapping] === resourceInfo[resourceIDMapping]) {\n return true;\n }\n else {\n return (resourceIdCollection[count] === resourceInfo[resourceIDMapping]);\n }\n });\n var ganttDataResource = extend({}, resource[0]);\n resources.push(ganttDataResource);\n if (!isNullOrUndefined(resourceUnitMapping) && !isNullOrUndefined(resourceIdCollection[count][resourceUnitMapping])) {\n ganttDataResource[resourceUnitMapping] = resourceIdCollection[count][resourceUnitMapping];\n }\n if (!isNullOrUndefined(resourceGroup) && !isNullOrUndefined(resourceIdCollection[count][resourceGroup])) {\n ganttDataResource[resourceGroup] = resourceIdCollection[count][resourceGroup];\n }\n };\n for (var count = 0; count < resourceIdCollection.length; count++) {\n _loop_5(count);\n }\n this.updateResourceUnit(resources);\n return resources;\n };\n /**\n * To set resource unit in Gantt record\n *\n * @param {object[]} resourceData .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateResourceUnit = function (resourceData) {\n var resourceUnit = this.parent.resourceFields.unit;\n if (!isNullOrUndefined(resourceUnit)) {\n var length_1 = resourceData.length;\n var index = void 0;\n for (index = 0; index < length_1; index++) {\n if (isNullOrUndefined(resourceData[index][resourceUnit])) {\n resourceData[index][resourceUnit] = 100;\n }\n }\n }\n };\n /**\n * @param {IGanttData} data .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateResourceName = function (data) {\n var resourceInfo = data.ganttProperties.resourceInfo;\n var resourceName = [];\n var taskMapping = this.parent.taskFields;\n if (resourceInfo) {\n var resourceLength = resourceInfo.length;\n var taskResources = extend([], [], data.taskData[this.parent.taskFields.resourceInfo], true);\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.resourceInfo, [], data);\n for (var i = 0; i < resourceLength; i++) {\n var resource = resourceInfo[i];\n var resName = resource[this.parent.resourceFields.name];\n var resourceUnit = resource[this.parent.resourceFields.unit];\n if (resourceUnit !== 100) {\n resName += '[' + resourceUnit + '%' + ']';\n }\n if (!isNullOrUndefined(resName)) {\n resourceName.push(resName);\n }\n if (data.taskData) {\n var mapping = taskMapping.resourceInfo;\n // eslint-disable-next-line\n if (typeof (taskResources[i] === 'object')) {\n data.taskData[mapping].push(taskResources[i]);\n }\n else {\n data.taskData[mapping].push(resource[this.parent.resourceFields.id]);\n }\n }\n }\n this.parent.setRecordValue('resourceNames', resourceName.join(','), data.ganttProperties, true);\n this.parent.setRecordValue(this.parent.taskFields.resourceInfo, resourceName.join(','), data, true);\n this.updateTaskDataResource(data);\n }\n };\n TaskProcessor.prototype.dataReorder = function (flatCollection, rootCollection) {\n var result = [];\n while (flatCollection.length > 0 && rootCollection.length > 0) {\n var index = rootCollection.indexOf(flatCollection[0]);\n if (index === -1) {\n flatCollection.shift();\n }\n else {\n result.push(flatCollection.shift());\n rootCollection.splice(index, 1);\n }\n }\n return result;\n };\n TaskProcessor.prototype.validateDurationUnitMapping = function (durationUnit) {\n var unit = durationUnit;\n if ((unit === 'minute') || (unit === 'minutes') || (unit === 'm') || (unit === 'min')) {\n unit = 'minute';\n }\n else if ((unit === 'hour') || (unit === 'hours') || (unit === 'h') || (unit === 'hr')) {\n unit = 'hour';\n }\n else if ((unit === 'day') || (unit === 'days') || (unit === 'd')) {\n unit = 'day';\n }\n else {\n unit = this.parent.durationUnit.toLocaleLowerCase();\n }\n return unit;\n };\n TaskProcessor.prototype.validateTaskTypeMapping = function (taskType) {\n var type = taskType;\n if (type === 'FixedDuration') {\n type = 'FixedDuration';\n }\n else if (type === 'FixedUnit') {\n type = 'FixedUnit';\n }\n else if (type === 'FixedWork') {\n type = 'FixedWork';\n }\n else {\n type = this.parent.taskType;\n }\n return type;\n };\n TaskProcessor.prototype.validateWorkUnitMapping = function (workUnit) {\n var unit = workUnit;\n if (unit === 'minute') {\n unit = 'minute';\n }\n else if (unit === 'hour') {\n unit = 'hour';\n }\n else if (unit === 'day') {\n unit = 'day';\n }\n else {\n unit = this.parent.workUnit.toLocaleLowerCase();\n }\n return unit;\n };\n /**\n * To update duration value in Task\n *\n * @param {string} duration .\n * @param {ITaskData} ganttProperties .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateDurationValue = function (duration, ganttProperties) {\n var tempDuration = this.getDurationValue(duration);\n if (!isNaN(getValue('duration', tempDuration))) {\n this.parent.setRecordValue('duration', getValue('duration', tempDuration), ganttProperties, true);\n }\n if (!isNullOrUndefined(getValue('durationUnit', tempDuration))) {\n this.parent.setRecordValue('durationUnit', getValue('durationUnit', tempDuration), ganttProperties, true);\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.reUpdateGanttData = function () {\n if (this.parent.flatData.length > 0) {\n var data = void 0;\n var ganttData = void 0;\n this.parent.secondsPerDay = this.getSecondsPerDay();\n for (var index = 0; index < this.parent.flatData.length; index++) {\n data = this.parent.flatData[index].taskData;\n ganttData = this.parent.flatData[index];\n if (!isNullOrUndefined(this.parent.taskFields.duration)) {\n this.setRecordDuration(ganttData, this.parent.taskFields.duration);\n }\n if (this.parent.isLoad) {\n this.setStartDate(ganttData);\n }\n this.calculateScheduledValues(ganttData, data, false);\n }\n this.updateGanttData();\n }\n };\n //check day is fall between from and to date range\n TaskProcessor.prototype._isInStartDateRange = function (day, from, to) {\n var isInRange = false;\n if (day.getTime() >= from.getTime() && day.getTime() < to.getTime()) {\n isInRange = true;\n }\n return isInRange;\n };\n //check day is fall between from and to date range\n TaskProcessor.prototype._isInEndDateRange = function (day, from, to) {\n var isInRange = false;\n if (day.getTime() > from.getTime() && day.getTime() <= to.getTime()) {\n isInRange = true;\n }\n return isInRange;\n };\n /**\n * Method to find overlapping value of the parent task\n *\n * @param {IGanttData} resourceTask .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateOverlappingValues = function (resourceTask) {\n var tasks = resourceTask.childRecords;\n var currentTask;\n var ranges = [];\n if (tasks.length <= 1) {\n resourceTask.ganttProperties.workTimelineRanges = [];\n return;\n }\n tasks = this.setSortedChildTasks(resourceTask);\n this.updateOverlappingIndex(tasks);\n for (var count = 1; count < tasks.length; count++) {\n currentTask = tasks[count];\n var cStartDate = new Date(currentTask.ganttProperties.startDate.getTime());\n var cEndDate = new Date(currentTask.ganttProperties.endDate.getTime()); //task 2\n var range = [];\n // eslint-disable-next-line\n var rangeObj = {};\n for (var index = 0; index < count; index++) {\n var tStartDate = tasks[index].ganttProperties.startDate;\n var tEndDate = tasks[index].ganttProperties.endDate; // task 1\n var rangeObj_1 = {};\n if (this._isInStartDateRange(cStartDate, tStartDate, tEndDate) || this._isInEndDateRange(cEndDate, tStartDate, tEndDate)) {\n if ((tStartDate.getTime() > cStartDate.getTime() && tStartDate.getTime() < cEndDate.getTime()\n && tEndDate.getTime() > cStartDate.getTime() && tEndDate.getTime() >= cEndDate.getTime())\n || (cStartDate.getTime() === tStartDate.getTime() && cEndDate.getTime() <= tEndDate.getTime())) {\n rangeObj_1.from = tStartDate;\n rangeObj_1.to = cEndDate;\n }\n else if (cStartDate.getTime() === tStartDate.getTime() && cEndDate.getTime() > tEndDate.getTime()) {\n rangeObj_1.from = tStartDate;\n rangeObj_1.to = tEndDate;\n }\n else if (cStartDate.getTime() > tStartDate.getTime() && cEndDate.getTime() >= tEndDate.getTime()) {\n rangeObj_1.from = cStartDate;\n rangeObj_1.to = tEndDate;\n }\n else if (cStartDate.getTime() > tStartDate.getTime() && cEndDate.getTime() < tEndDate.getTime()) {\n rangeObj_1.from = cStartDate;\n rangeObj_1.to = cEndDate;\n }\n range.push(rangeObj_1);\n }\n }\n // eslint-disable-next-line\n ranges.push.apply(ranges, this.mergeRangeCollections(range));\n }\n this.parent.setRecordValue('workTimelineRanges', this.mergeRangeCollections(ranges, true), resourceTask.ganttProperties, true);\n this.calculateRangeLeftWidth(resourceTask.ganttProperties.workTimelineRanges);\n };\n /**\n * @param {IGanttData[]} tasks .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateOverlappingIndex = function (tasks) {\n for (var i = 0; i < tasks.length; i++) {\n tasks[i].ganttProperties.eOverlapIndex = i;\n }\n };\n /**\n * Method to calculate the left and width value of oarlapping ranges\n *\n * @param {IWorkTimelineRanges[]} ranges .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.calculateRangeLeftWidth = function (ranges) {\n for (var count = 0; count < ranges.length; count++) {\n ranges[count].left = this.getTaskLeft(ranges[count].from, false);\n ranges[count].width = this.getTaskWidth(ranges[count].from, ranges[count].to);\n }\n };\n /**\n * @param {IWorkTimelineRanges[]} ranges .\n * @param {boolean} isSplit .\n * @returns {IWorkTimelineRanges[]} .\n * @private\n */\n TaskProcessor.prototype.mergeRangeCollections = function (ranges, isSplit) {\n var finalRange = [];\n var currentTopRange = {};\n var cCompareRange = {};\n var cStartDate;\n var cEndDate;\n var tStartDate;\n var tEndDate;\n var sortedRanges = new DataManager(ranges).executeLocal(new Query()\n .sortBy(this.parent.taskFields.startDate, 'Ascending'));\n for (var i = 0; i < sortedRanges.length; i++) {\n if (finalRange.length === 0 && i === 0) {\n finalRange.push(sortedRanges[i]);\n continue;\n }\n currentTopRange = finalRange[finalRange.length - 1];\n cStartDate = currentTopRange.from;\n cEndDate = currentTopRange.to;\n cCompareRange = sortedRanges[i];\n tStartDate = cCompareRange.from;\n tEndDate = cCompareRange.to;\n if ((cStartDate.getTime() === tStartDate.getTime() && cEndDate.getTime() >= tEndDate.getTime())\n || (cStartDate.getTime() < tStartDate.getTime() && cEndDate.getTime() >= tEndDate.getTime())) {\n continue;\n }\n /* eslint-disable-next-line */\n else if ((cStartDate.getTime() <= tStartDate.getTime() && cEndDate.getTime() >= tStartDate.getTime() && cEndDate.getTime() < tEndDate.getTime())\n || (cEndDate.getTime() < tStartDate.getTime() && this.checkStartDate(cEndDate).getTime() === tStartDate.getTime())) {\n currentTopRange.to = tEndDate;\n }\n else if (cEndDate.getTime() < tStartDate.getTime() && this.checkStartDate(cEndDate).getTime() !== tStartDate.getTime()) {\n finalRange.push(sortedRanges[i]);\n }\n }\n if (isSplit) {\n finalRange = this.splitRangeCollection(finalRange);\n }\n return finalRange;\n };\n /**\n * Sort resource child records based on start date\n *\n * @param {IGanttData} resourceTask .\n * @returns {IGanttData} .\n * @private\n */\n TaskProcessor.prototype.setSortedChildTasks = function (resourceTask) {\n var sortedRecords = [];\n sortedRecords = new DataManager(resourceTask.childRecords).executeLocal(new Query()\n .sortBy(this.parent.taskFields.startDate, 'Ascending'));\n return sortedRecords;\n };\n TaskProcessor.prototype.splitRangeCollection = function (rangeCollection, fromField, toField) {\n var splitArray = [];\n var unit;\n if (this.parent.timelineModule.isSingleTier) {\n unit = this.parent.timelineModule.bottomTier !== 'None' ?\n this.parent.timelineModule.bottomTier : this.parent.timelineModule.topTier;\n }\n else {\n unit = this.parent.timelineModule.bottomTier;\n }\n if (unit === 'Week' || unit === 'Month' || unit === 'Year') {\n splitArray = rangeCollection;\n }\n else if (unit === 'Day') {\n splitArray = this.getRangeWithWeek(rangeCollection, fromField, toField);\n }\n else {\n if (this.parent.workingTimeRanges[0].from === 0 && this.parent.workingTimeRanges[0].to === 86400) {\n splitArray = this.getRangeWithWeek(rangeCollection, fromField, toField);\n }\n else {\n splitArray = this.getRangeWithDay(rangeCollection, fromField, toField);\n }\n }\n return splitArray;\n };\n TaskProcessor.prototype.getRangeWithDay = function (ranges, fromField, toField) {\n var splitArray = [];\n for (var i = 0; i < ranges.length; i++) {\n // eslint-disable-next-line\n splitArray.push.apply(splitArray, this.splitRangeForDayMode(ranges[i], fromField, toField));\n }\n return splitArray;\n };\n TaskProcessor.prototype.splitRangeForDayMode = function (range, fromField, toField) {\n var fromString = fromField ? fromField : 'from';\n var toString = toField ? toField : 'to';\n var tempStart = new Date(range[fromString]);\n var end = new Date(range[toString]);\n var ranges = [];\n var rangeObject = {};\n if (tempStart.getTime() < end.getTime()) {\n do {\n var nStart = new Date(tempStart.getTime());\n var nEndDate = new Date(tempStart.getTime());\n var nextAvailDuration = 0;\n var sHour = this.parent.dataOperation.getSecondsInDecimal(tempStart);\n var startRangeIndex = -1;\n for (var i = 0; i < this.parent.workingTimeRanges.length; i++) {\n var val = this.parent.workingTimeRanges[i];\n if (sHour >= val.from && sHour <= val.to) {\n startRangeIndex = i;\n break;\n }\n }\n if (startRangeIndex !== -1) {\n nextAvailDuration = Math.round(this.parent.workingTimeRanges[startRangeIndex].to - sHour);\n nEndDate.setSeconds(nEndDate.getSeconds() + nextAvailDuration);\n }\n var taskName = 'task';\n if (nEndDate.getTime() < end.getTime()) {\n rangeObject = {};\n if (range.task) {\n rangeObject[taskName] = extend([], range.task);\n }\n rangeObject[fromString] = nStart;\n rangeObject[toString] = nEndDate;\n rangeObject.isSplit = true;\n ranges.push(rangeObject);\n }\n else {\n rangeObject = {};\n if (range.task) {\n rangeObject[taskName] = extend([], range.task);\n }\n rangeObject[fromString] = nStart;\n rangeObject[toString] = end;\n rangeObject.isSplit = true;\n ranges.push(rangeObject);\n }\n tempStart = this.checkStartDate(nEndDate);\n } while (tempStart.getTime() < end.getTime());\n }\n else {\n ranges.push(range);\n }\n return ranges;\n };\n TaskProcessor.prototype.getRangeWithWeek = function (ranges, fromField, toField) {\n var splitArray = [];\n for (var i = 0; i < ranges.length; i++) {\n // eslint-disable-next-line\n splitArray.push.apply(splitArray, this.splitRangeForWeekMode(ranges[i], fromField, toField));\n }\n return splitArray;\n };\n TaskProcessor.prototype.splitRangeForWeekMode = function (range, fromField, toField) {\n var from = fromField ? fromField : 'from';\n var to = toField ? toField : 'to';\n var start = new Date(range[from]);\n var tempStart = new Date(range[from]);\n var end = new Date(range[to]);\n var isInSplit = false;\n var ranges = [];\n var rangeObj = {};\n tempStart.setDate(tempStart.getDate() + 1);\n if (tempStart.getTime() < end.getTime()) {\n do {\n if (this.parent.dataOperation.isOnHolidayOrWeekEnd(tempStart, null)) {\n var tempEndDate = new Date(tempStart.getTime());\n tempEndDate.setDate(tempStart.getDate() - 1);\n this.setTime(this.parent.defaultEndTime, tempEndDate);\n rangeObj = {};\n rangeObj[from] = start;\n rangeObj.isSplit = true;\n rangeObj[to] = tempEndDate;\n if (range.task) {\n rangeObj.task = extend([], range.task, true);\n }\n if (start.getTime() !== tempEndDate.getTime()) {\n ranges.push(rangeObj);\n }\n start = this.checkStartDate(tempEndDate);\n tempStart = new Date(start.getTime());\n isInSplit = true;\n }\n else {\n tempStart.setDate(tempStart.getDate() + 1);\n }\n } while (tempStart.getTime() < end.getTime());\n if (isInSplit) {\n if (start.getTime() !== end.getTime()) {\n rangeObj = {};\n if (range.task) {\n rangeObj.task = extend([], range.task, true);\n }\n rangeObj[from] = start;\n rangeObj[to] = end;\n rangeObj.isSplit = true;\n ranges.push(rangeObj);\n }\n }\n else {\n ranges.push(range);\n }\n }\n else {\n ranges.push(range);\n }\n return ranges;\n };\n /**\n * Update all gantt data collection width, progress width and left value\n *\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateGanttData = function () {\n var flatData = this.parent.flatData;\n var length = flatData.length;\n for (var i = 0; i < length; i++) {\n var data = flatData[i];\n this.updateTaskLeftWidth(data);\n }\n };\n /**\n * Update all gantt data collection width, progress width and left value\n *\n * @param {IGanttData} data .\n * @returns {void} .\n * @public\n */\n TaskProcessor.prototype.updateTaskLeftWidth = function (data) {\n var task = data.ganttProperties;\n if (!data.hasChildRecords || !this.parent.autoCalculateDateScheduling) {\n this.updateWidthLeft(data);\n }\n this.parent.setRecordValue('baselineLeft', this.calculateBaselineLeft(task), task, true);\n this.parent.setRecordValue('baselineWidth', this.calculateBaselineWidth(task), task, true);\n var childData = [];\n var parentItem;\n if (data.parentItem) {\n parentItem = this.parent.getParentTask(data.parentItem);\n childData = parentItem.childRecords;\n }\n if (parentItem && childData.indexOf(data) === childData.length - 1 && !data.hasChildRecords && this.parent.enableValidation) {\n if (this.parent.autoCalculateDateScheduling || this.parent.viewType === \"ResourceView\") {\n this.updateParentItems(parentItem);\n }\n if (!this.parent.autoCalculateDateScheduling) {\n this.updateWidthLeft(parentItem);\n }\n }\n else if (parentItem && !this.parent.enableValidation) {\n this.updateWidthLeft(parentItem);\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.reUpdateGanttDataPosition = function () {\n var flatData = this.parent.flatData;\n var length = flatData.length;\n for (var i = 0; i < length; i++) {\n var data = flatData[i];\n var task = data.ganttProperties;\n this.updateWidthLeft(data);\n if (this.parent.taskMode !== 'Auto' && data.hasChildRecords) {\n this.updateAutoWidthLeft(data);\n }\n this.parent.setRecordValue('baselineLeft', this.calculateBaselineLeft(task), task, true);\n this.parent.setRecordValue('baselineWidth', this.calculateBaselineWidth(task), task, true);\n this.parent.dataOperation.updateTaskData(data);\n }\n };\n /**\n * method to update left, width, progress width in record\n *\n * @param {IGanttData} data .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateWidthLeft = function (data) {\n var ganttRecord = data.ganttProperties;\n // task endDate may be changed in segment calculation so this must be calculated first.\n // task width calculating was based on endDate\n if (!isNullOrUndefined(ganttRecord.segments) && ganttRecord.segments.length > 0) {\n var segments = ganttRecord.segments;\n var fixedWidth = true;\n var totalTaskWidth = this.splitTasksDuration(segments) * ((this.parent.timelineModule.bottomTier === \"Hour\" || this.parent.timelineModule.bottomTier === \"Minutes\") ? this.parent.timelineSettings.timelineUnitSize : this.parent.perDayWidth);\n ;\n var totalProgressWidth = this.parent.dataOperation.getProgressWidth(totalTaskWidth, ganttRecord.progress);\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (i === 0 && !isNullOrUndefined(ganttRecord.startDate) &&\n segment.startDate.getTime() !== ganttRecord.startDate.getTime()) {\n segment.startDate = ganttRecord.startDate;\n var endDate = this.parent.dataOperation.getEndDate(segment.startDate, segment.duration, ganttRecord.durationUnit, ganttRecord, false);\n segment.endDate = this.parent.dataOperation.checkEndDate(endDate, ganttRecord, false);\n this.parent.chartRowsModule.incrementSegments(segments, 0, data);\n }\n segment.width = this.getSplitTaskWidth(segment.startDate, segment.duration, data);\n segment.showProgress = false;\n segment.progressWidth = -1;\n if (i !== 0) {\n var pStartDate = new Date(ganttRecord.startDate.getTime());\n segment.left = this.getSplitTaskLeft(segment.startDate, pStartDate);\n }\n if (totalProgressWidth > 0 && totalProgressWidth > segment.width) {\n totalProgressWidth = totalProgressWidth - segment.width;\n segment.progressWidth = segment.width;\n segment.showProgress = false;\n }\n else if (fixedWidth) {\n segment.progressWidth = totalProgressWidth;\n segment.showProgress = true;\n totalProgressWidth = totalProgressWidth - segment.width;\n fixedWidth = false;\n }\n }\n this.parent.setRecordValue('segments', ganttRecord.segments, ganttRecord, true);\n this.parent.dataOperation.updateMappingData(data, 'segments');\n }\n this.parent.setRecordValue('width', this.parent.dataOperation.calculateWidth(data), ganttRecord, true);\n this.parent.setRecordValue('left', this.parent.dataOperation.calculateLeft(ganttRecord), ganttRecord, true);\n this.parent.setRecordValue('progressWidth', this.parent.dataOperation.getProgressWidth((ganttRecord.isAutoSchedule || !data.hasChildRecords ? ganttRecord.width : ganttRecord.autoWidth), ganttRecord.progress), ganttRecord, true);\n };\n /**\n * method to update left, width, progress width in record\n *\n * @param {IGanttData} data .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateAutoWidthLeft = function (data) {\n var ganttRecord = data.ganttProperties;\n this.parent.setRecordValue('autoWidth', this.calculateWidth(data, true), ganttRecord, true);\n this.parent.setRecordValue('autoLeft', this.calculateLeft(ganttRecord, true), ganttRecord, true);\n this.parent.setRecordValue('progressWidth', this.parent.dataOperation.getProgressWidth((ganttRecord.isAutoSchedule ||\n !data.hasChildRecords ? ganttRecord.width : ganttRecord.autoWidth), ganttRecord.progress), ganttRecord, true);\n };\n /**\n * To calculate parent progress value\n *\n * @param {IGanttData} childGanttRecord .\n * @returns {object} .\n * @private\n */\n TaskProcessor.prototype.getParentProgress = function (childGanttRecord) {\n var durationInDay = 0;\n var progressValues = {};\n switch (childGanttRecord.ganttProperties.durationUnit) {\n case 'hour':\n durationInDay = (childGanttRecord.ganttProperties.duration / (this.parent.secondsPerDay / 3600));\n break;\n case 'minute':\n durationInDay = (childGanttRecord.ganttProperties.duration / (this.parent.secondsPerDay / 60));\n break;\n default:\n durationInDay = childGanttRecord.ganttProperties.duration;\n }\n if (childGanttRecord.hasChildRecords) {\n setValue('totalProgress', childGanttRecord.ganttProperties.totalProgress, progressValues);\n setValue('totalDuration', childGanttRecord.ganttProperties.totalDuration ? childGanttRecord.ganttProperties.totalDuration : 0, progressValues);\n }\n else {\n setValue('totalProgress', childGanttRecord.ganttProperties.progress * durationInDay, progressValues);\n setValue('totalDuration', durationInDay, progressValues);\n }\n return progressValues;\n };\n TaskProcessor.prototype.resetDependency = function (record) {\n var dependency = this.parent.taskFields.dependency;\n if (!isNullOrUndefined(dependency)) {\n var recordProp = record.ganttProperties;\n this.parent.setRecordValue('predecessor', [], recordProp, true);\n this.parent.setRecordValue('predecessorsName', null, recordProp, true);\n this.parent.setRecordValue('taskData.' + dependency, null, record);\n this.parent.setRecordValue(dependency, null, record);\n }\n };\n /**\n * @param {IParent | IGanttData} cloneParent .\n * @param {boolean} isParent .\n * @returns {void} .\n * @private\n */\n TaskProcessor.prototype.updateParentItems = function (cloneParent, isParent) {\n var parentData = isParent ? cloneParent : this.parent.getParentTask(cloneParent);\n var deleteUpdate = false;\n var ganttProp = parentData.ganttProperties;\n if (this.parent.autoCalculateDateScheduling || this.parent.viewType === \"ResourceView\") {\n if (parentData.childRecords.length > 0) {\n var previousStartDate = ganttProp.isAutoSchedule ? ganttProp.startDate : ganttProp.autoStartDate;\n var previousEndDate = ganttProp.isAutoSchedule ? ganttProp.endDate :\n ganttProp.autoEndDate;\n var childRecords = parentData.childRecords;\n var childLength = childRecords.length;\n var totalDuration = 0;\n var progressValues = {};\n var minStartDate = null;\n var maxEndDate = null;\n var milestoneCount = 0;\n var totalProgress = 0;\n var childCompletedWorks = 0;\n var childData = void 0;\n for (var count = 0; count < childLength; count++) {\n childData = childRecords[count];\n if (this.parent.isOnDelete && childData.isDelete) {\n if (childLength === 1 && this.parent.viewType === 'ProjectView') {\n deleteUpdate = true;\n }\n continue;\n }\n var startDate = this.getValidStartDate(childData.ganttProperties);\n if (parentData.hasChildRecords && !ganttProp.isAutoSchedule && !isNullOrUndefined(childData.ganttProperties.autoStartDate)) {\n startDate = childData.ganttProperties.autoStartDate;\n }\n var endDate = this.getValidEndDate(childData.ganttProperties);\n if (parentData.hasChildRecords && !ganttProp.isAutoSchedule && !isNullOrUndefined(childData.ganttProperties.autoEndDate)) {\n endDate = childData.ganttProperties.autoEndDate;\n }\n if (isNullOrUndefined(minStartDate)) {\n minStartDate = this.getDateFromFormat(startDate);\n }\n if (isNullOrUndefined(maxEndDate)) {\n maxEndDate = this.getDateFromFormat(endDate);\n }\n if (!isNullOrUndefined(endDate) && this.compareDates(endDate, maxEndDate) === 1) {\n maxEndDate = this.getDateFromFormat(endDate);\n }\n if (!isNullOrUndefined(startDate) && this.compareDates(startDate, minStartDate) === -1) {\n minStartDate = this.getDateFromFormat(startDate);\n }\n if (!childData.ganttProperties.isMilestone && isScheduledTask(childData.ganttProperties)) {\n progressValues = this.getParentProgress(childData);\n totalProgress += getValue('totalProgress', progressValues);\n if (childData[this.parent.taskFields.duration] < 1) {\n totalDuration += getValue('totalDuration', progressValues);\n totalDuration = Number(totalDuration.toFixed(4));\n }\n else {\n totalDuration += getValue('totalDuration', progressValues);\n }\n }\n else {\n milestoneCount++;\n }\n childCompletedWorks += childData.ganttProperties.work;\n }\n if (!deleteUpdate) {\n var taskCount = void 0;\n if (this.parent.isOnDelete && childData.isDelete) {\n taskCount = childLength - milestoneCount - 1;\n }\n else {\n taskCount = childLength - milestoneCount;\n }\n var parentProgress = (taskCount > 0 && totalDuration > 0) ? Number((totalProgress / totalDuration).toFixed(2)) : 0;\n var parentProp = parentData.ganttProperties;\n var milestone = (taskCount === 0) && minStartDate && maxEndDate &&\n minStartDate.getTime() === maxEndDate.getTime() ? true : false;\n if (this.compareDates(previousStartDate, minStartDate) !== 0) {\n this.parent.setRecordValue(ganttProp.isAutoSchedule ? 'startDate' : 'autoStartDate', minStartDate, parentData.ganttProperties, true);\n if ((((!isNullOrUndefined(ganttProp.autoDuration)) ? ganttProp.autoDuration === 0 : ganttProp.duration === 0)) && parentData['isManual'] && milestone && (parentData.hasChildRecords && parentData.ganttProperties.isAutoSchedule && this.parent.editModule.taskbarEditModule.taskbarEditedArgs.action !== \"TaskbarEditing\")) {\n this.parent.setRecordValue('startDate', minStartDate, parentData.ganttProperties, true);\n }\n }\n if (this.compareDates(previousEndDate, maxEndDate) !== 0) {\n this.parent.setRecordValue(ganttProp.isAutoSchedule ? 'endDate' : 'autoEndDate', maxEndDate, parentData.ganttProperties, true);\n if ((((!isNullOrUndefined(ganttProp.autoDuration)) ? ganttProp.autoDuration === 0 : ganttProp.duration === 0)) && parentData['isManual'] && milestone && (parentData.hasChildRecords && parentData.ganttProperties.isAutoSchedule && this.parent.editModule.taskbarEditModule.taskbarEditedArgs.action !== \"TaskbarEditing\")) {\n this.parent.setRecordValue('endDate', maxEndDate, parentData.ganttProperties, true);\n }\n }\n this.parent.setRecordValue('isMilestone', milestone, parentProp, true);\n if (!isNullOrUndefined(this.parent.taskFields.milestone)) {\n this.updateMappingData(parentData, 'milestone');\n }\n if (parentProp.isAutoSchedule) {\n this.calculateDuration(parentData);\n }\n this.updateWorkWithDuration(parentData);\n var parentWork = parentProp.work;\n parentWork = this.parent.isOnEdit ? parentWork : (parentWork + childCompletedWorks);\n this.parent.setRecordValue('work', parentWork, parentProp, true);\n this.parent.setRecordValue('taskType', 'FixedDuration', parentProp, true);\n if (!isNullOrUndefined(this.parent.taskFields.type)) {\n this.updateMappingData(parentData, 'type');\n }\n this.parent.setRecordValue('progress', Math.floor(parentProgress), parentProp, true);\n this.parent.setRecordValue('totalProgress', totalProgress, parentProp, true);\n this.parent.setRecordValue('totalDuration', totalDuration, parentProp, true);\n this.parent.setRecordValue('autoDuration', parentProp.duration, parentProp, true);\n if (!parentProp.isAutoSchedule) {\n this.parent.setRecordValue('autoDuration', this.calculateAutoDuration(parentProp), parentProp, true);\n this.updateAutoWidthLeft(parentData);\n }\n if (!this.parent.allowParentDependency) {\n this.resetDependency(parentData);\n }\n this.updateWidthLeft(parentData);\n this.updateTaskData(parentData);\n }\n }\n }\n else {\n parentData.ganttProperties.endDate = parentData.taskData[this.parent.taskFields.endDate];\n }\n if (deleteUpdate && parentData.childRecords.length === 1 && parentData.ganttProperties.duration === 0) {\n this.parent.setRecordValue('isMilestone', true, parentData.ganttProperties, true);\n this.updateWidthLeft(parentData);\n this.updateTaskData(parentData);\n }\n var parentItem = this.parent.getParentTask(parentData.parentItem);\n if (parentItem) {\n if (this.parent.autoCalculateDateScheduling || this.parent.viewType === \"ResourceView\") {\n this.updateParentItems(parentItem);\n }\n }\n deleteUpdate = false;\n };\n return TaskProcessor;\n}(DateProcessor));\nexport { TaskProcessor };\n","/**\n * CSS Constants\n */\n/** @hidden */\nexport var root = 'e-gantt';\nexport var ganttChartPane = 'e-gantt-chart-pane';\nexport var treeGridPane = 'e-gantt-tree-grid-pane';\nexport var splitter = 'e-gantt-splitter';\nexport var ganttChart = 'e-gantt-chart';\nexport var chartBodyContainer = 'e-chart-root-container';\nexport var toolbar = 'e-gantt-toolbar';\nexport var chartScrollElement = 'e-chart-scroll-container';\nexport var chartBodyContent = 'e-chart-rows-container';\nexport var scrollContent = 'e-content';\nexport var adaptive = 'e-device';\nexport var focusCell = 'e-grid';\n// Timeline-Class\nexport var taskTable = 'e-task-table';\nexport var zeroSpacing = 'e-zero-spacing';\nexport var timelineHeaderContainer = 'e-timeline-header-container';\nexport var timelineHeaderTableContainer = 'e-timeline-header-table-container';\nexport var timelineHeaderTableBody = 'e-timeline-header-table-body';\nexport var timelineTopHeaderCell = 'e-timeline-top-header-cell';\nexport var timelineHeaderCellLabel = 'e-header-cell-label';\nexport var weekendHeaderCell = 'e-weekend-header-cell';\nexport var timelineSingleHeaderCell = 'e-timeline-single-header-cell';\nexport var timelineSingleHeaderOuterDiv = 'e-timeline-single-header-outer-div';\n// Chart Rows-Class\nexport var leftLabelContainer = 'e-left-label-container';\nexport var leftLabelTempContainer = 'e-left-label-container e-left-label-temp-container';\nexport var leftLabelInnerDiv = 'e-left-label-inner-div';\nexport var rightLabelContainer = 'e-right-label-container';\nexport var rightLabelTempContainer = 'e-right-label-container e-right-label-temp-container';\nexport var rightLabelInnerDiv = 'e-right-label-inner-div';\nexport var taskBarMainContainer = 'e-taskbar-main-container';\nexport var parentTaskBarInnerDiv = 'e-gantt-parent-taskbar-inner-div';\nexport var parentProgressBarInnerDiv = 'e-gantt-parent-progressbar-inner-div';\nexport var taskLabel = 'e-task-label';\nexport var childTaskBarInnerDiv = 'e-gantt-child-taskbar-inner-div';\nexport var childProgressBarInnerDiv = 'e-gantt-child-progressbar-inner-div';\nexport var criticalChildTaskBarInnerDiv = 'e-gantt-child-critical-taskbar-inner-div';\nexport var criticalChildProgressBarInnerDiv = 'e-gantt-child-critical-progressbar-inner-div';\nexport var criticalMilestone = 'e-critical-milestone';\nexport var baselineBar = 'e-baseline-bar';\nexport var baselineMilestoneContainer = 'e-baseline-gantt-milestone-container';\nexport var baselineMilestoneDiv = 'e-baseline-gantt-milestone';\nexport var chartRowCell = 'e-chart-row-cell';\nexport var chartRow = 'e-chart-row';\nexport var rowExpand = 'e-row-expand';\nexport var rowCollapse = 'e-row-collapse';\nexport var collapseParent = 'e-collapse-parent';\nexport var taskBarLeftResizer = 'e-taskbar-left-resizer';\nexport var taskBarRightResizer = 'e-taskbar-right-resizer';\nexport var childProgressResizer = 'e-child-progress-resizer';\nexport var progressBarHandler = 'e-progressbar-handler';\nexport var progressHandlerElement = 'e-progressbar-handler-element';\nexport var progressBarHandlerAfter = 'e-progressbar-handler-after';\nexport var icon = 'e-icon';\nexport var traceMilestone = 'e-gantt-milestone';\nexport var parentMilestone = 'e-gantt-parent-milestone';\nexport var traceChildTaskBar = 'e-gantt-child-taskbar';\nexport var traceChildProgressBar = 'e-gantt-child-progressbar';\nexport var manualParentMainContainer = 'e-manualparent-main-container';\nexport var manualParentTaskBar = 'e-gantt-manualparenttaskbar';\nexport var manualParentMilestone = 'e-gantt-manualparent-milestone';\nexport var manualChildTaskBar = 'e-gantt-child-manualtaskbar';\nexport var manualChildProgressBar = 'e-gantt-child-manualprogressbar';\nexport var manualParentRightResizer = 'e-gantt-manualparenttaskbar-right';\nexport var manualParentLeftResizer = 'e-gantt-manualparenttaskbar-left';\nexport var traceManualUnscheduledTask = 'e-gantt-unscheduled-manualtask';\nexport var traceParentTaskBar = 'e-gantt-parent-taskbar';\nexport var traceParentProgressBar = 'e-gantt-parent-progressbar';\nexport var traceUnscheduledTask = 'e-gantt-unscheduled-task';\nexport var criticalUnscheduledTask = 'e-gantt-critical-unscheduled-taskbar';\nexport var taskIndicatorDiv = 'e-indicator-span';\nexport var leftResizeGripper = 'e-left-resize-gripper';\nexport var rightResizeGripper = 'e-right-resize-gripper';\nexport var progressResizeGripper = 'e-progress-resize-gripper';\nexport var label = 'e-label';\n//event Markers classes\nexport var eventMarkersContainer = 'e-event-markers-container';\nexport var eventMarkersChild = 'e-event-markers';\nexport var eventMarkersSpan = 'e-span-label';\n//holiday classes\nexport var nonworkingContainer = 'e-nonworking-day-container';\nexport var holidayContainer = 'e-holiday-container';\nexport var holidayElement = 'e-holiday';\nexport var holidayLabel = 'e-span';\n//weekend classes\nexport var weekendContainer = 'e-weekend-container';\nexport var weekend = 'e-weekend';\n//Unscheduled Taskbar\nexport var unscheduledTaskbarLeft = 'e-gantt-unscheduled-taskbar-left';\nexport var unscheduledTaskbarRight = 'e-gantt-unscheduled-taskbar-right';\nexport var unscheduledTaskbar = 'e-gantt-unscheduled-taskbar';\nexport var unscheduledMilestoneTop = 'e-unscheduled-milestone-top';\nexport var unscheduledMilestoneBottom = 'e-unscheduled-milestone-bottom';\n//Connector Line\nexport var dependencyViewContainer = 'e-gantt-dependency-view-container';\nexport var connectorLineContainer = 'e-connector-line-container';\nexport var connectorLine = 'e-line';\nexport var connectorLineSVG = 'e-connector-line';\nexport var criticalConnectorLineSVG = 'e-critical-line';\nexport var criticalConnectorArrowSVG = 'e-critical-line-arrow';\nexport var connectorLineArrow = 'e-connector-line-arrow';\nexport var criticalConnectorLine = 'e-criticalconnector-line';\nexport var criticalConnectorLineRightArrow = 'e-criticalconnector-line-right-arrow';\nexport var criticalConnectorLineLeftArrow = 'e-criticalconnector-line-left-arrow';\nexport var connectorLineRightArrow = 'e-connector-line-right-arrow';\nexport var connectorLineLeftArrow = 'e-connector-line-left-arrow';\nexport var connectorLineZIndex = 'e-connector-line-z-index';\nexport var connectorLineHover = 'e-connector-line-hover';\nexport var criticalConnectorLineHover = 'e-critical-connector-line-hover';\nexport var connectorLineHoverZIndex = 'e-connector-line-hover-z-index';\nexport var connectorLineRightArrowHover = 'e-connector-line-right-arrow-hover';\nexport var connectorLineLeftArrowHover = 'e-connector-line-left-arrow-hover';\nexport var criticalConnectorLineRightArrowHover = 'e-critical-connector-line-right-arrow-hover';\nexport var criticalConnectorLineLeftArrowHover = 'e-critical-connector-line-left-arrow-hover';\nexport var connectorTouchPoint = 'e-connectortouchpoint';\nexport var connectorPointLeft = 'e-connectorpoint-left';\nexport var connectorPointRight = 'e-connectorpoint-right';\nexport var connectorPointLeftHover = 'e-connectorpoint-left-hover';\nexport var connectorPointRightHover = 'e-connectorpoint-right-hover';\nexport var falseLine = 'e-gantt-false-line';\nexport var connectorTooltipTaskName = 'e-tooltiptaskname';\nexport var connectorTooltipFalse = 'e-predecessor-false';\nexport var connectorTooltipTrue = 'e-predecessor-true';\nexport var rightConnectorPointOuterDiv = 'e-right-connectorpoint-outer-div';\nexport var leftConnectorPointOuterDiv = 'e-left-connectorpoint-outer-div';\nexport var connectorPointAllowBlock = 'e-connectorpoint-allow-block';\nexport var ganttTooltip = 'e-gantt-tooltip';\n// Context Menu\nexport var columnHeader = '.e-gridheader';\nexport var content = '.e-content';\nexport var editForm = '.e-gridform';\nexport var deleteIcon = 'e-delete';\nexport var saveIcon = 'e-save';\nexport var cancelIcon = 'e-cancel';\nexport var ascendingIcon = 'e-icon-ascending';\nexport var descendingIcon = 'e-icon-descending';\nexport var editIcon = 'e-edit';\nexport var indentIcon = 'e-indent';\nexport var outdentIcon = 'e-outdent';\nexport var addIcon = 'e-add';\nexport var criticalPathIcon = 'e-critical-path';\nexport var addAboveIcon = 'e-add-above';\nexport var addBelowIcon = 'e-add-below';\n//Predecessor touch mode\nexport var activeParentTask = 'e-active-parent-task';\nexport var activeChildTask = 'e-active-child-task';\nexport var activeConnectedTask = 'e-active-connected-task';\nexport var touchMode = 'e-predecessor-touch-mode';\n//Over allocation range container\nexport var rangeContainer = 'e-rangecontainer';\nexport var rangeChildContainer = 'e-rg-rangdiv';\nexport var rangeChildMiddleContainer = 'e-rg-middlerangdiv';\n","import { formatUnit, EventHandler, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * To handle scroll event on chart and from TreeGrid\n *\n * @hidden\n */\nvar ChartScroll = /** @class */ (function () {\n /**\n * Constructor for the scrolling.\n *\n * @param {Gantt} parent .\n * @hidden\n */\n function ChartScroll(parent) {\n this.previousScroll = { top: 0, left: 0 };\n this.parent = parent;\n this.element = this.parent.ganttChartModule.scrollElement;\n this.addEventListeners();\n }\n /**\n * Bind event\n *\n * @returns {void} .\n */\n ChartScroll.prototype.addEventListeners = function () {\n this.parent.on('grid-scroll', this.gridScrollHandler, this);\n EventHandler.add(this.element, 'scroll', this.onScroll, this);\n this.parent.treeGrid.grid.on('showGanttShimmer', this.updateShimmer, this);\n this.parent.treeGrid.grid.on('removeGanttShimmer', this.removeShimmer, this);\n };\n /**\n * Unbind events\n *\n * @returns {void} .\n */\n ChartScroll.prototype.removeEventListeners = function () {\n EventHandler.remove(this.element, 'scroll', this.onScroll);\n this.parent.off('grid-scroll', this.gridScrollHandler);\n this.parent.treeGrid.grid.off('showGanttShimmer', this.updateShimmer);\n this.parent.treeGrid.grid.off('removeGanttShimmer', this.removeShimmer);\n };\n /**\n *\n * @param {object} args .\n * @returns {void} .\n */\n ChartScroll.prototype.gridScrollHandler = function (args) {\n this.element.scrollTop = getValue('top', args);\n this.isFromTreeGrid = true;\n };\n /**\n * Method to update vertical grid line, holiday, event markers and weekend container's top position on scroll action\n *\n * @returns {void} .\n * @private\n */\n ChartScroll.prototype.updateTopPosition = function () {\n var content = this.parent.treeGrid.element.querySelector('.e-content');\n var contentScrollTop = content.scrollTop;\n var scrollTop;\n if (this.parent.virtualScrollModule && this.parent.enableVirtualization) {\n var top_1 = this.parent.virtualScrollModule.getTopPosition();\n scrollTop = contentScrollTop - top_1;\n }\n else {\n scrollTop = contentScrollTop;\n }\n if (!isNullOrUndefined(this.parent.dayMarkersModule)) {\n var holidayContainer = getValue('nonworkingDayRender.holidayContainer', this.parent.dayMarkersModule);\n var weekendContainer = getValue('nonworkingDayRender.weekendContainer', this.parent.dayMarkersModule);\n var eventMarkersContainer = getValue('eventMarkerRender.eventMarkersContainer', this.parent.dayMarkersModule);\n if (holidayContainer) {\n holidayContainer.style.top = formatUnit(scrollTop);\n }\n if (weekendContainer) {\n weekendContainer.style.top = formatUnit(scrollTop);\n }\n if (eventMarkersContainer) {\n eventMarkersContainer.style.top = formatUnit(scrollTop);\n }\n }\n if (this.parent.chartVerticalLineContainer) {\n this.parent.chartVerticalLineContainer.style.top = formatUnit(scrollTop);\n }\n };\n ChartScroll.prototype.removeShimmer = function () {\n var parent = this.parent;\n setTimeout(function () {\n parent.hideMaskRow();\n if (parent.viewType === 'ResourceView' && !parent.allowTaskbarOverlap && parent.showOverAllocation) {\n for (var i = 0; i < parent.currentViewData.length; i++) {\n var tr = parent.chartRowsModule.ganttChartTableBody.childNodes[i];\n if (tr['style'].display !== 'none' && parent.currentViewData[i].hasChildRecords && !parent.currentViewData[i].expanded) {\n parent.treeGrid.getRowByIndex(i)['style'].height = tr['style'].height;\n }\n }\n parent.contentHeight = parent.enableRtl ? parent['element'].getElementsByClassName('e-content')[2].children[0]['offsetHeight'] :\n parent['element'].getElementsByClassName('e-content')[0].children[0]['offsetHeight'];\n document.getElementsByClassName('e-chart-rows-container')[0]['style'].height = parent.contentHeight + 'px';\n }\n }, 0);\n };\n ChartScroll.prototype.updateShimmer = function () {\n var parent = this.parent;\n setTimeout(function () {\n parent.showMaskRow();\n }, 0);\n };\n ChartScroll.prototype.updateSpinner = function () {\n var parent = this.parent;\n this.parent.showSpinner();\n window.clearTimeout(this.isScrolling);\n this.isScrolling = setTimeout(function () {\n parent.hideSpinner();\n }, 200);\n };\n /**\n * Scroll event handler\n *\n * @returns {void} .\n */\n ChartScroll.prototype.onScroll = function () {\n var scrollArgs = {};\n if (this.element.scrollTop !== this.previousScroll.top) {\n // eslint-disable-next-line\n !this.isFromTreeGrid ? this.parent.notify('chartScroll', { top: this.element.scrollTop }) : (this.isFromTreeGrid = false);\n scrollArgs.previousScrollTop = this.previousScroll.top;\n this.previousScroll.top = this.element.scrollTop;\n scrollArgs.scrollTop = this.element.scrollTop;\n scrollArgs.scrollDirection = 'Vertical';\n scrollArgs.action = 'VerticalScroll';\n this.updateTopPosition();\n }\n if (this.element.scrollLeft !== this.previousScroll.left) {\n this.parent.ganttChartModule.chartTimelineContainer.scrollLeft = this.element.scrollLeft;\n scrollArgs.previousScrollLeft = this.previousScroll.left;\n this.previousScroll.left = this.element.scrollLeft;\n scrollArgs.scrollLeft = this.element.scrollLeft;\n scrollArgs.scrollDirection = 'Horizontal';\n scrollArgs.action = 'HorizontalScroll';\n }\n if ((scrollArgs.scrollDirection !== 'Horizontal' && !isNullOrUndefined(scrollArgs.scrollDirection)) && this.parent.enableVirtualization === true && (this.parent.isToolBarClick\n || isNullOrUndefined(this.parent.isToolBarClick))) {\n this.parent.isVirtualScroll = true;\n if (this.parent.showIndicator || isNullOrUndefined(this.parent.showIndicator)) {\n if (!this.parent.enableVirtualMaskRow && this.parent.enableVirtualization && this.parent.loadingIndicator.indicatorType === 'Spinner') {\n this.updateSpinner();\n }\n }\n }\n this.parent.isToolBarClick = true;\n scrollArgs.requestType = 'scroll';\n this.parent.trigger('actionComplete', scrollArgs);\n };\n /**\n * To set height for chart scroll container\n *\n * @param {string | number} height - To set height for scroll container in chart side\n * @returns {void} .\n * @private\n */\n ChartScroll.prototype.setHeight = function (height) {\n this.element.style.height = formatUnit(height);\n };\n /**\n * To set width for chart scroll container\n *\n * @param {string | number} width - To set width to scroll container\n * @returns {void} .\n * @private\n */\n ChartScroll.prototype.setWidth = function (width) {\n this.element.style.width = formatUnit(width);\n };\n /**\n * To set scroll top for chart scroll container\n *\n * @param {number} scrollTop - To set scroll top for scroll container\n * @returns {void} .\n * @private\n */\n ChartScroll.prototype.setScrollTop = function (scrollTop) {\n this.element.scrollTop = scrollTop;\n this.parent.treeGrid.element.querySelector('.e-content').scrollTop = scrollTop;\n };\n /**\n * To set scroll left for chart scroll container\n *\n * @param {number} scrollLeft - To set scroll left for scroll container\n * @param {number} leftSign - specifies left sign\n * @returns {void} .\n */\n ChartScroll.prototype.setScrollLeft = function (scrollLeft, leftSign) {\n if (leftSign) {\n scrollLeft = leftSign === -1 && this.parent.enableRtl ? -scrollLeft : scrollLeft;\n }\n this.element.scrollLeft = scrollLeft;\n this.parent.ganttChartModule.chartTimelineContainer.scrollLeft = this.element.scrollLeft;\n this.previousScroll.left = this.element.scrollLeft;\n };\n /**\n * Destroy scroll related elements and unbind the events\n *\n * @returns {void} .\n * @private\n */\n ChartScroll.prototype.destroy = function () {\n this.removeEventListeners();\n };\n return ChartScroll;\n}());\nexport { ChartScroll };\n","import { createElement } from '@syncfusion/ej2-base';\n/**\n * virtual Content renderer for Gantt\n */\nvar VirtualContentRenderer = /** @class */ (function () {\n function VirtualContentRenderer(parent) {\n this.parent = parent;\n }\n /**\n * To render a wrapper for chart body content when virtualization is enabled.\n *\n * @returns {void} .\n * @hidden\n */\n VirtualContentRenderer.prototype.renderWrapper = function () {\n this.wrapper = createElement('div', { className: 'e-virtualtable', styles: 'position: absolute; transform: translate(0px, 0px);' });\n this.parent.ganttChartModule.scrollElement.appendChild(this.wrapper);\n this.virtualTrack = createElement('div', { className: 'e-virtualtrack', styles: 'position: relative; pointer-events: none; width: 100%;' });\n this.parent.ganttChartModule.scrollElement.appendChild(this.virtualTrack);\n this.wrapper.appendChild(this.parent.ganttChartModule.chartBodyContent);\n };\n /**\n * To append child elements for wrappered element when virtualization is enabled.\n *\n * @param {HTMLElement} element .\n * @returns {void} .\n * @hidden\n */\n VirtualContentRenderer.prototype.appendChildElements = function (element) {\n this.wrapper.appendChild(element);\n };\n /**\n * To adjust gantt content table's style when virtualization is enabled\n *\n * @returns {void} .\n * @hidden\n */\n VirtualContentRenderer.prototype.adjustTable = function () {\n var content = this.parent.treeGrid.getContent().querySelector('.e-content').querySelector('.e-virtualtable');\n this.parent.ganttChartModule.virtualRender.wrapper.style.transform = content.style.transform;\n };\n return VirtualContentRenderer;\n}());\nexport { VirtualContentRenderer };\n","import { createElement, formatUnit, EventHandler, Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, closest, addClass, removeClass, getValue, setValue } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constants';\nimport { ChartScroll } from '../actions/chart-scroll';\nimport { click } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '../renderer/virtual-content-render';\n/**\n * module to render gantt chart - project view\n */\nvar GanttChart = /** @class */ (function () {\n function GanttChart(parent) {\n this.isExpandCollapseFromChart = false;\n this.isExpandAll = false;\n this.isGanttElement = false;\n this.parent = parent;\n this.chartTimelineContainer = null;\n this.rangeViewContainer =\n createElement('div', { className: cls.rangeContainer });\n this.rangeViewContainer.setAttribute(\"role\", \"RangeContainer\");\n this.virtualRender = new VirtualContentRenderer(this.parent);\n this.addEventListener();\n }\n GanttChart.prototype.addEventListener = function () {\n this.parent.on('renderPanels', this.renderChartContainer, this);\n this.parent.on('recordsUpdated', this.renderChartElements, this);\n this.parent.on('dataReady', this.renderInitialContents, this);\n this.parent.on('tree-grid-created', this.renderChartContents, this);\n this.parent.on('destroy', this.destroy, this);\n };\n GanttChart.prototype.renderChartContents = function () {\n this.parent.notify('refreshDayMarkers', {});\n this.wireEvents();\n };\n /**\n * Method to render top level containers in Gantt chart\n *\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.renderChartContainer = function () {\n this.chartElement = createElement('div', { id: this.parent.element.id + 'GanttChart', className: cls.ganttChart });\n this.parent.chartPane.appendChild(this.chartElement);\n this.renderTimelineContainer();\n this.renderBodyContainers();\n // render top level div header and content\n // Get timeline header from timeline class file and append to header div\n // render content div\n // Render scroll able div\n // Render container for all element like, table, weekend and holidays\n // Get rows element from rows renderer class\n // Get label related info label renderer class\n // Get baseline from baseline renderer class\n // Get weekend elements from weekend-holidays renderer class\n };\n /**\n * method to render timeline, holidays, weekends at load time\n *\n * @returns {void} .\n */\n GanttChart.prototype.renderInitialContents = function () {\n this.parent.timelineModule.createTimelineSeries();\n };\n /**\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.renderOverAllocationContainer = function () {\n for (var i = 0; i < this.parent.flatData.length; i++) {\n var data = this.parent.flatData[i];\n if (data.childRecords.length > 0) {\n this.parent.dataOperation.updateOverlappingValues(data);\n }\n }\n var rangeContainer = this.parent.element.querySelector('.' + cls.rangeContainer);\n if (rangeContainer) {\n rangeContainer.innerHTML = '';\n }\n if (this.parent.treeGrid.grid.filterSettings.columns.length === 0) {\n this.renderRangeContainer(this.parent.currentViewData);\n }\n };\n GanttChart.prototype.renderChartElements = function () {\n if (this.parent.isFromOnPropertyChange) {\n this.rangeViewContainer.innerHTML = '';\n this.parent.updateProjectDates(this.parent.cloneProjectStartDate, this.parent.cloneProjectEndDate, this.parent.isTimelineRoundOff);\n this.parent.isFromOnPropertyChange = false;\n }\n else {\n this.parent.chartRowsModule.renderChartRows();\n if (this.parent.predecessorModule && this.parent.taskFields.dependency) {\n this.parent.connectorLineIds = [];\n this.parent.updatedConnectorLineCollection = [];\n this.parent.predecessorModule.createConnectorLinesCollection();\n }\n this.parent.connectorLineModule.renderConnectorLines(this.parent.updatedConnectorLineCollection);\n for (var i = 0; i < this.parent.chartRowsModule.ganttChartTableBody.children.length; i++) {\n if (this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[4]) {\n this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[1].setAttribute('tabindex', '-1');\n this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[2].setAttribute('tabindex', '-1');\n this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[4].setAttribute('tabindex', '-1');\n }\n else {\n if (this.parent.viewType === 'ProjectView') {\n if (!isNullOrUndefined(this.parent.chartRowsModule.ganttChartTableBody.children[parseInt(i.toString(), 10)].children[0].children[1].children[1])) {\n this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[1].setAttribute('tabindex', '-1');\n }\n }\n else if (this.parent.chartRowsModule.ganttChartTableBody.children[parseInt(i.toString(), 10)].children[0].children[1].children[0]) {\n this.parent.chartRowsModule.ganttChartTableBody.children[i].children[0].children[1].children[0].setAttribute('tabindex', '-1');\n }\n }\n }\n var criticalModule = this.parent.criticalPathModule;\n if (this.parent.enableCriticalPath && criticalModule && criticalModule.criticalPathCollection) {\n this.parent.criticalPathModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, this.parent.enableCriticalPath, criticalModule.predecessorCollectionTaskIds);\n }\n if (this.parent.viewType === 'ResourceView' && this.parent.showOverAllocation) {\n this.renderOverAllocationContainer();\n }\n }\n this.updateWidthAndHeight();\n this.parent.notify('selectRowByIndex', {});\n if (this.parent.timelineModule.isZoomToFit) {\n this.parent.timelineModule.processZoomToFit();\n }\n };\n /**\n * @param {IGanttData[]} records .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.renderRangeContainer = function (records) {\n var recordLength = records.length;\n var count;\n var ganttRecord;\n var rangeCollection;\n if (this.parent.treeGrid.grid.filterSettings.columns.length === 0) {\n for (count = 0; count < recordLength; count++) {\n ganttRecord = records[count];\n rangeCollection = ganttRecord.ganttProperties.workTimelineRanges;\n if (rangeCollection) {\n this.renderRange(rangeCollection, ganttRecord);\n }\n }\n }\n };\n GanttChart.prototype.getTopValue = function (currentRecord) {\n var updatedRecords = this.parent.getExpandedRecords(this.parent.currentViewData);\n var recordIndex = updatedRecords.indexOf(currentRecord);\n if (!currentRecord.expanded) {\n return (recordIndex * this.parent.rowHeight);\n }\n return ((recordIndex + 1) * this.parent.rowHeight);\n };\n /*get height for range bar*/\n GanttChart.prototype.getRangeHeight = function (data) {\n if (!data.expanded && data.hasChildRecords) {\n return (this.parent.rowHeight - Math.floor((this.parent.rowHeight - this.parent.chartRowsModule.taskBarHeight)));\n }\n return (data.childRecords.length * this.parent.rowHeight) -\n Math.floor((this.parent.rowHeight - this.parent.chartRowsModule.taskBarHeight));\n };\n GanttChart.prototype.renderRange = function (rangeCollection, currentRecord) {\n var topValue = 0;\n var rowIndex = this.parent.currentViewData.indexOf(currentRecord);\n if (!this.parent.allowTaskbarOverlap && this.parent.enableMultiTaskbar) {\n topValue = !currentRecord.expanded ? this.parent.getRowByIndex(rowIndex).offsetTop : this.parent.getRowByIndex(rowIndex).offsetTop + this.parent.rowHeight;\n }\n else {\n topValue = this.getTopValue(currentRecord);\n }\n var sameIDElement = this.rangeViewContainer.querySelector('.' + 'rangeContainer' + currentRecord.ganttProperties.rowUniqueID);\n if (sameIDElement) {\n sameIDElement.remove();\n }\n var parentDiv = createElement('div', {\n className: 'rangeContainer' + currentRecord.ganttProperties.rowUniqueID, styles: \"top:\" + topValue + \"px; position: absolute;\"\n });\n if (currentRecord.level === 0 && !currentRecord.expanded && isNullOrUndefined(currentRecord.parentItem)\n && !this.parent.enableMultiTaskbar) {\n return;\n }\n for (var i = 0; i < rangeCollection.length; i++) {\n var height = void 0;\n if (!this.parent.allowTaskbarOverlap && !currentRecord.expanded && this.parent.enableMultiTaskbar) {\n height = parseInt(this.parent.chartRowsModule.ganttChartTableBody.childNodes[rowIndex].style.height) -\n (this.parent.rowHeight - this.parent.chartRowsModule.taskBarHeight);\n }\n else {\n height = this.getRangeHeight(currentRecord);\n }\n var leftDiv = createElement('div', {\n className: cls.rangeChildContainer + ' ' + 'e-leftarc', styles: (this.parent.enableRtl ? 'right:' : 'left:') +\n ((this.parent.enableRtl ? rangeCollection[i].left + rangeCollection[i].width - 5 : rangeCollection[i].left) + \"px;\\n top: \" + Math.floor((this.parent.rowHeight - this.parent.chartRowsModule.taskBarHeight) / 2) + \"px;\\n height: \" + (height + 1) + \"px; border-right: 0px\")\n });\n var rightDiv = createElement('div', {\n className: cls.rangeChildContainer + ' ' + 'e-rightarc',\n styles: (this.parent.enableRtl ? 'right:' : 'left:') + ((this.parent.enableRtl ? rangeCollection[i].left :\n rangeCollection[i].left + rangeCollection[i].width - 5) + \"px;\\n top: \" + Math.floor((this.parent.rowHeight - this.parent.chartRowsModule.taskBarHeight) / 2) + \"px; height: \" + (height + 1) + \"px;\\n border-left: 0px\")\n });\n parentDiv.appendChild(leftDiv);\n parentDiv.appendChild(rightDiv);\n this.rangeViewContainer.appendChild(parentDiv);\n }\n this.parent.ganttChartModule.chartBodyContent.appendChild(this.rangeViewContainer);\n };\n /**\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.renderTimelineContainer = function () {\n this.chartTimelineContainer =\n createElement('div', { className: cls.timelineHeaderContainer });\n if (this.parent.enableRtl) {\n this.chartTimelineContainer.style.borderLeftWidth = '1px';\n this.chartTimelineContainer.style.borderRightWidth = '0px';\n }\n this.chartTimelineContainer.setAttribute(\"role\", \"presentation\");\n this.chartElement.appendChild(this.chartTimelineContainer);\n };\n /**\n * initiate chart container\n *\n * @returns {void} .\n */\n GanttChart.prototype.renderBodyContainers = function () {\n this.chartBodyContainer = createElement('div', { className: cls.chartBodyContainer });\n this.chartElement.appendChild(this.chartBodyContainer);\n this.scrollElement = createElement('div', {\n className: cls.chartScrollElement + ' ' + cls.scrollContent, styles: 'position:relative;'\n });\n this.chartBodyContainer.appendChild(this.scrollElement);\n this.chartBodyContent = createElement('div', { className: cls.chartBodyContent, styles: 'position:relative; overflow:hidden ' });\n if (this.parent.virtualScrollModule && this.parent.enableVirtualization) {\n this.parent.ganttChartModule.virtualRender.renderWrapper();\n }\n else {\n this.scrollElement.appendChild(this.chartBodyContent);\n }\n // this.parent.chartRowsModule.createChartTable();\n this.scrollObject = new ChartScroll(this.parent);\n //this.scrollObject.setWidth(this.chartProperties.width);\n var toolbarHeight = 0;\n if (!isNullOrUndefined(this.parent.toolbarModule) && !isNullOrUndefined(this.parent.toolbarModule.element)) {\n toolbarHeight = this.parent.toolbarModule.element.offsetHeight;\n }\n this.scrollObject.\n setHeight(this.parent.ganttHeight - this.chartTimelineContainer.offsetHeight - toolbarHeight);\n };\n /**\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.updateWidthAndHeight = function () {\n //empty row height\n var emptydivHeight = 36;\n var emptyHeight = this.parent.contentHeight === 0 ? this.parent.flatData.length > 1 ? emptydivHeight : 0 : this.parent.contentHeight;\n var contentElement = this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0];\n if (emptyHeight >= contentElement['offsetHeight'] || this.parent.height === 'auto') {\n this.chartBodyContent.style.height = formatUnit(emptyHeight);\n }\n else {\n var scrollHeight = this.parent.element.getElementsByClassName('e-chart-rows-container')[0]['offsetHeight'];\n if (contentElement['offsetHeight'] >= scrollHeight) {\n this.chartBodyContent.style.height = contentElement['offsetHeight'] - 17 + 'px';\n }\n else {\n this.chartBodyContent.style.height = contentElement['offsetHeight'] + 'px';\n }\n } //let element: HTMLElement = this.chartTimelineContainer.querySelector('.' + cls.timelineHeaderTableContainer);\n this.chartBodyContent.style.width = formatUnit(this.parent.timelineModule.totalTimelineWidth);\n this.setVirtualHeight();\n this.parent.notify('updateHeight', {});\n this.parent.updateGridLineContainerHeight();\n this.updateLastRowBottomWidth();\n };\n GanttChart.prototype.setVirtualHeight = function () {\n if (this.parent.virtualScrollModule && this.parent.enableVirtualization) {\n var wrapper = getValue('virtualTrack', this.parent.ganttChartModule.virtualRender);\n wrapper.style.height = this.parent.treeGrid.element.getElementsByClassName('e-virtualtrack')[0].style.height;\n var wrapper1 = getValue('wrapper', this.parent.ganttChartModule.virtualRender);\n var treegridVirtualHeight = this.parent.treeGrid.element.getElementsByClassName('e-virtualtable')[0].style.transform;\n wrapper1.style.transform = treegridVirtualHeight;\n }\n };\n /**\n * Method to update bottom border for chart rows\n *\n * @returns {void} .\n */\n GanttChart.prototype.updateLastRowBottomWidth = function () {\n if (this.parent.currentViewData.length > 0 && this.parent.height !== 'auto') {\n var expandedRecords = this.parent.virtualScrollModule && this.parent.enableVirtualization ?\n this.parent.currentViewData : this.parent.getExpandedRecords(this.parent.currentViewData);\n var lastExpandedRow = expandedRecords[expandedRecords.length - 1];\n var lastExpandedRowIndex = this.parent.currentViewData.indexOf(lastExpandedRow);\n var lastRow = this.parent.getRowByIndex(lastExpandedRowIndex);\n var table = this.parent.chartRowsModule.ganttChartTableBody;\n if (table.querySelectorAll('.e-chart-row-cell.e-chart-row-border.e-lastrow')) {\n removeClass(table.querySelectorAll('.e-chart-row-cell.e-chart-row-border.e-lastrow'), 'e-lastrow');\n }\n if (this.chartBodyContent.clientHeight < this.chartBodyContainer.clientHeight) {\n if (lastRow) {\n addClass(lastRow.querySelectorAll('td'), 'e-lastrow');\n var emptydivHeight = 36;\n var emptyHeight = this.parent.contentHeight === 0 ? this.parent.flatData.length > 1 ? emptydivHeight : 0 : this.parent.contentHeight;\n var contentElement = this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0];\n if (emptyHeight >= contentElement['offsetHeight']) {\n this.chartBodyContent.style.height = formatUnit(emptyHeight);\n }\n else {\n var scrollHeight = this.parent.element.getElementsByClassName('e-chart-rows-container')[0]['offsetHeight'];\n if (contentElement['offsetHeight'] >= scrollHeight) {\n this.chartBodyContent.style.height = contentElement['offsetHeight'] - 17 + 'px';\n }\n else {\n this.chartBodyContent.style.height = contentElement['offsetHeight'] + 'px';\n }\n }\n }\n }\n }\n };\n GanttChart.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('renderPanels', this.renderChartContainer);\n this.parent.off('recordsUpdated', this.renderChartElements);\n this.parent.off('dataReady', this.renderInitialContents);\n this.parent.off('tree-grid-created', this.renderChartContents);\n this.parent.off('destroy', this.destroy);\n };\n /**\n * Click event handler in chart side\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n */\n GanttChart.prototype.ganttChartMouseDown = function (e) {\n if (e.which !== 3 && this.parent.editSettings.allowTaskbarEditing) {\n this.parent.notify('chartMouseDown', e);\n this.parent.element.tabIndex = 0;\n }\n if (this.parent.editSettings.allowEditing && this.parent.treeGrid.element.getElementsByClassName('e-editedbatchcell').length > 0) {\n this.parent.treeGrid.endEdit();\n }\n };\n GanttChart.prototype.ganttChartMouseClick = function (e) {\n if (this.parent.autoFocusTasks) {\n this.scrollToTarget(e); /** Scroll to task */\n }\n this.parent.notify('chartMouseClick', e);\n };\n GanttChart.prototype.ganttChartMouseUp = function (e) {\n if (this.parent.editSettings.allowTaskbarEditing) {\n this.parent.notify('chartMouseUp', e);\n }\n };\n /**\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n */\n GanttChart.prototype.scrollToTarget = function (e) {\n var row = closest(e.target, 'tr');\n if (row && this.parent.element.contains(row) &&\n (this.parent.element.querySelectorAll('.e-chart-rows-container')[0].contains(e.target) ||\n this.parent.element.querySelectorAll('.e-gridcontent')[0].contains(e.target)) &&\n this.parent.currentViewData.length > 0) {\n var rowIndex = getValue('rowIndex', closest(e.target, 'tr'));\n var dateObject = this.parent.currentViewData[rowIndex].ganttProperties.startDate;\n if (!isNullOrUndefined(dateObject)) {\n var left = this.parent.dataOperation.getTaskLeft(dateObject, false);\n if (this.parent.autoFocusTasks) {\n this.updateScrollLeft(left);\n }\n }\n }\n };\n /**\n * To focus selected task in chart side\n *\n * @param {number} scrollLeft .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.updateScrollLeft = function (scrollLeft) {\n scrollLeft = scrollLeft > 0 ? scrollLeft : 0;\n scrollLeft = this.scrollElement.scrollWidth <= scrollLeft ? this.scrollElement.scrollWidth : scrollLeft;\n if ((this.scrollElement.offsetWidth + this.parent.ganttChartModule.scrollElement.scrollLeft) < scrollLeft\n || (this.scrollElement.scrollLeft > scrollLeft)) {\n this.scrollObject.setScrollLeft(scrollLeft - 50, this.parent.enableRtl ? -1 : 0);\n }\n // this.parent.ganttChartModule.scrollObject.updateLeftPosition();\n };\n /**\n * Method trigger while perform mouse up action.\n *\n * @param {PointerEvent} e .\n * @returns {void}\n * @private\n */\n GanttChart.prototype.mouseUp = function (e) {\n if (!isNullOrUndefined(this.parent.editModule) && !isNullOrUndefined(this.parent.editModule.taskbarEditModule)) {\n this.parent.editModule.taskbarEditModule.removeFalseLine(false);\n }\n var resizeCheck = this.parent.element.querySelector(\".e-taskbar-resize-div\");\n if (!isNullOrUndefined(resizeCheck)) {\n resizeCheck.remove();\n }\n if (this.parent.allowRowDragAndDrop) {\n var ganttDragElemet = this.parent.element.querySelector('.e-ganttdrag');\n if (ganttDragElemet) {\n ganttDragElemet.remove();\n }\n }\n if (!this.isGanttElement) {\n this.parent.notify('chartMouseUp', e);\n }\n this.isGanttElement = false;\n };\n /**\n * Method trigger while perform mouse up action.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.documentMouseUp = function (e) {\n this.isGanttElement = true;\n if (e.target.classList.contains('e-treegridexpand') ||\n e.target.classList.contains('e-treegridcollapse')) {\n if (getValue('isEditCollapse', this.parent.treeGrid) === true) {\n setValue('isEditCollapse', false, this.parent.treeGrid);\n }\n }\n if (this.parent.allowRowDragAndDrop) {\n var ganttDragElemet = this.parent.element.querySelector('.e-ganttdrag');\n if (ganttDragElemet) {\n ganttDragElemet.remove();\n }\n }\n if (this.parent.isDestroyed || e.which === 3) {\n return;\n }\n var resizeCheck = this.parent.ganttChartModule.chartBodyContainer.querySelector('.e-taskbar-resize-div');\n if (!isNullOrUndefined(resizeCheck)) {\n resizeCheck.remove();\n }\n var Check = this.parent.ganttChartModule.chartBodyContainer.querySelector('.e-clone-taskbar');\n if (!isNullOrUndefined(Check)) {\n var clonetbody = Check.parentElement;\n var cloneTable = clonetbody.parentElement;\n cloneTable.remove();\n }\n var isTaskbarEdited = false;\n if (this.parent.editSettings.allowTaskbarEditing &&\n getValue('editModule.taskbarEditModule.isMouseDragged', this.parent) &&\n getValue('editModule.taskbarEditModule.taskBarEditAction', this.parent)) {\n isTaskbarEdited = true;\n }\n this.parent.notify('chartMouseUp', e);\n if (this.parent.showActiveElement) {\n this.parent.showIndicator = true;\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.hideMaskRow();\n }\n else {\n this.parent.hideSpinner();\n }\n if (this.focusedElement && !e.target.classList.contains('e-split-bar')) {\n this.focusedElement.tabIndex = this.focusedElement.tabIndex === 0 ? -1 : this.focusedElement.tabIndex;\n removeClass([this.focusedElement], 'e-active-container');\n }\n }\n if (!isTaskbarEdited) {\n /** Expand/collapse action */\n var target = e.target;\n var isOnTaskbarElement = e.target.classList.contains(cls.taskBarMainContainer)\n || closest(e.target, '.' + cls.taskBarMainContainer);\n if (closest(target, '.e-gantt-parent-taskbar') && !this.parent.editSettings.allowEditing) {\n this.chartExpandCollapseRequest(e);\n }\n else if (!isOnTaskbarElement && this.parent.autoFocusTasks) {\n this.scrollToTarget(e); /** Scroll to task */\n }\n }\n if (this.parent.editModule && this.parent.editModule.taskbarEditModule) {\n this.parent.editModule.taskbarEditModule.removeFalseLine(true);\n }\n if (!isNullOrUndefined(this.parent.onTaskbarClick) && !isTaskbarEdited) {\n var target = e.target;\n var taskbarElement = closest(target, '.e-gantt-parent-taskbar,.e-gantt-child-taskbar,.e-gantt-milestone');\n if (taskbarElement) {\n this.onTaskbarClick(e, target, taskbarElement);\n }\n }\n };\n /**\n * This event triggered when click on taskbar element\n *\n * @param {PointerEvent | KeyboardEventArgs} e .\n * @param {EventTarget} target .\n * @param {Element} taskbarElement .\n * @returns {void}\n */\n GanttChart.prototype.onTaskbarClick = function (e, target, taskbarElement) {\n var chartRow = closest(target, 'tr');\n var rowIndex = getValue('rowIndex', chartRow);\n var data = this.getRecordByTarget(e);\n var args = {\n data: data,\n taskbarElement: taskbarElement,\n rowIndex: rowIndex,\n target: target\n };\n this.parent.trigger('onTaskbarClick', args);\n };\n /**\n * Method trigger while perform mouse leave action.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.ganttChartLeave = function (e) {\n if (this.parent.editSettings.allowTaskbarEditing) {\n this.parent.notify('chartMouseLeave', e);\n }\n };\n /**\n * Method trigger while perform mouse move action.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.ganttChartMove = function (e) {\n if (this.parent.editSettings.allowTaskbarEditing) {\n this.parent.notify('chartMouseMove', e);\n if (!isNullOrUndefined(this.parent.taskFields.dependency) && this.parent.connectorLineEditModule) {\n this.parent.connectorLineEditModule.updateConnectorLineEditElement(e);\n }\n }\n };\n /**\n * Method trigger while perform right click action.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.contextClick = function (e) {\n if (this.parent.allowFiltering && this.parent.filterModule) {\n this.parent.filterModule.closeFilterOnContextClick(e.srcElement);\n }\n };\n /**\n * Method to trigger while perform mouse move on Gantt.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.mouseMoveHandler = function (e) {\n if (!isNullOrUndefined(this.parent.onMouseMove) &&\n (this.parent.flatData.length ||\n e.target.classList.contains('e-header-cell-label') ||\n e.target.classList.contains('e-headercell'))) {\n var target = e.target;\n var args = { originalEvent: e };\n var element = closest(target, '.e-chart-row-cell,.e-connector-line-container,' +\n '.e-event-markers,.e-header-cell-label,.e-rowcell,.e-headercell,.e-indicator-span');\n if (element) {\n var rowData = void 0;\n var rowElement = closest(target, '.e-rowcell,.e-chart-row-cell');\n var columnElement = closest(target, '.e-rowcell,.e-headercell');\n if (rowElement) {\n rowData = this.parent.ganttChartModule.getRecordByTarget(e);\n args.data = rowData;\n }\n if (columnElement) {\n var cellIndex = getValue('cellIndex', columnElement);\n args.column = this.parent.treeGrid.columns[cellIndex];\n }\n if (closest(target, '.e-indicator-span')) {\n var index = 0;\n var indicators = rowData.ganttProperties.indicators;\n if (indicators.length > 1) {\n for (index = 0; index < indicators.length; index++) {\n if (indicators[index].name === (element.innerText).trim()) {\n break;\n }\n }\n }\n args.indicator = indicators[index];\n }\n if (closest(target, '.e-connector-line-container')) {\n var obj = {};\n obj.target = element;\n args.predecessor = this.parent.tooltipModule.getPredecessorTooltipData(obj);\n }\n if (closest(target, '.e-event-markers')) {\n var obj = {};\n obj.target = element;\n args.eventMarkers = this.parent.tooltipModule.getMarkerTooltipData(obj);\n }\n if (target.classList.contains('e-header-cell-label')) {\n args.date = new Date(target.dataset.content);\n }\n }\n this.parent.trigger('onMouseMove', args);\n }\n };\n /**\n * Double click handler for chart\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n */\n GanttChart.prototype.doubleClickHandler = function (e) {\n this.parent.notify('chartDblClick', e);\n var target = e.target;\n var row = closest(target, 'tr');\n var rowIndex = getValue('rowIndex', row);\n var rowData = this.parent.ganttChartModule.getRecordByTarget(e);\n var args = {\n row: row,\n rowData: rowData,\n rowIndex: rowIndex,\n target: target\n };\n this.recordDoubleClick(args);\n };\n /**\n * To trigger record double click event.\n *\n * @param {RecordDoubleClickEventArgs} args .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.recordDoubleClick = function (args) {\n this.parent.trigger('recordDoubleClick', args);\n };\n /**\n * @param {PointerEvent | KeyboardEventArgs} e .\n * @returns {IGanttData} .\n * @private\n */\n GanttChart.prototype.getRecordByTarget = function (e) {\n var ganttData;\n var row = closest(e.target, 'div.' + cls.taskBarMainContainer);\n if (!isNullOrUndefined(row)) {\n var id = row.getAttribute('rowUniqueId');\n ganttData = this.parent.getRecordByID(id);\n }\n else {\n row = closest(e.target, 'tr');\n if (row) {\n var rowIndex = getValue('rowIndex', closest(e.target, 'tr'));\n ganttData = this.parent.currentViewData[rowIndex];\n }\n }\n return ganttData;\n };\n /**\n * To get gantt chart row elements\n *\n * @returns {NodeListOf} .\n * @private\n */\n GanttChart.prototype.getChartRows = function () {\n if (document.getElementById(this.parent.element.id + 'GanttTaskTableBody') != null) {\n return document.getElementById(this.parent.element.id + 'GanttTaskTableBody').querySelectorAll('.e-chart-row');\n }\n else {\n return null;\n }\n };\n /**\n * Expand Collapse operations from gantt chart side\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.chartExpandCollapseRequest = function (e) {\n if (this.parent.enableMultiTaskbar) {\n return;\n }\n var target = e.target;\n var parentElement = closest(target, '.e-gantt-parent-taskbar');\n var record = this.getRecordByTarget(e);\n var chartRow = closest(target, 'tr');\n var rowIndex = getValue('rowIndex', chartRow);\n var gridRow = this.parent.treeGrid.getRows()[rowIndex];\n var args = { data: record, gridRow: gridRow, chartRow: chartRow, cancel: false };\n this.isExpandCollapseFromChart = true;\n if (parentElement.classList.contains('e-row-expand')) {\n this.collapseGanttRow(args);\n }\n else if (parentElement.classList.contains('e-row-collapse')) {\n this.expandGanttRow(args);\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.reRenderConnectorLines = function () {\n this.parent.connectorLineModule.dependencyViewContainer.innerHTML = '';\n this.parent.connectorLineIds = [];\n this.parent.updatedConnectorLineCollection = [];\n this.parent.predecessorModule.createConnectorLinesCollection();\n this.parent.connectorLineModule.renderConnectorLines(this.parent.updatedConnectorLineCollection);\n var criticalModule = this.parent.criticalPathModule;\n if (this.parent.enableCriticalPath && criticalModule && criticalModule.criticalPathCollection) {\n criticalModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);\n }\n };\n /**\n * To collapse gantt rows\n *\n * @param {object} args .\n * @param {boolean} isCancel .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.collapseGanttRow = function (args, isCancel) {\n var _this = this;\n if (isCancel) {\n this.collapsedGanttRow(args);\n }\n else {\n this.parent.trigger('collapsing', args, function (arg) {\n if (_this.isExpandCollapseFromChart && !getValue('cancel', arg)) {\n _this.collapsedGanttRow(arg);\n }\n _this.isExpandCollapseFromChart = false;\n });\n }\n };\n /**\n * @returns {void} .\n * @param {object} args .\n * @private\n */\n GanttChart.prototype.collapsedGanttRow = function (args) {\n if ((isNullOrUndefined(args['gridRow']) && this.parent.enableVirtualization) || isNullOrUndefined(args['chartRow'])) {\n return;\n }\n var record = getValue('data', args);\n if (this.isExpandCollapseFromChart) {\n this.expandCollapseChartRows('collapse', getValue('chartRow', args), record, null);\n this.parent.treeGrid.collapseRow(getValue('gridRow', args), record);\n this.isExpandCollapseFromChart = false;\n }\n else {\n this.expandCollapseChartRows('collapse', getValue('chartRow', args), record, null);\n }\n // To render the child record on parent row after collapsing\n if (this.parent.viewType === 'ResourceView') {\n this.renderMultiTaskbar(record);\n }\n if (!this.parent.enableVirtualization) {\n this.parent.updateContentHeight();\n }\n this.updateWidthAndHeight();\n this.reRenderConnectorLines();\n getValue('chartRow', args).setAttribute('aria-expanded', 'false');\n };\n /**\n * To expand gantt rows\n *\n * @returns {void} .\n * @param {object} args .\n * @param {boolean} isCancel .\n * @private\n */\n GanttChart.prototype.expandGanttRow = function (args, isCancel) {\n var _this = this;\n if (isCancel) {\n this.expandedGanttRow(args);\n }\n else {\n this.parent.trigger('expanding', args, function (arg) {\n if (_this.isExpandCollapseFromChart && !getValue('cancel', arg)) {\n _this.expandedGanttRow(arg);\n }\n _this.isExpandCollapseFromChart = false;\n });\n }\n };\n /**\n * @returns {void} .\n * @param {object} args .\n * @private\n */\n GanttChart.prototype.expandedGanttRow = function (args) {\n if ((isNullOrUndefined(args['gridRow']) && this.parent.enableVirtualization) || isNullOrUndefined(args['chartRow'])) {\n return;\n }\n var record = getValue('data', args);\n if (this.isExpandCollapseFromChart) {\n this.expandCollapseChartRows('expand', getValue('chartRow', args), record, null);\n this.parent.treeGrid.expandRow(getValue('gridRow', args), record);\n this.isExpandCollapseFromChart = false;\n }\n else {\n if (!this.parent.isExpandCollapseLevelMethod) {\n this.expandCollapseChartRows('expand', getValue('chartRow', args), record, null);\n }\n this.parent.isExpandCollapseLevelMethod = false;\n }\n // To render the child record on parent row after expanding.\n if (this.parent.viewType === 'ResourceView') {\n this.renderMultiTaskbar(record);\n }\n if (!this.parent.enableVirtualization) {\n this.parent.updateContentHeight();\n }\n this.updateWidthAndHeight();\n this.reRenderConnectorLines();\n getValue('chartRow', args).setAttribute('aria-expanded', 'true');\n };\n GanttChart.prototype.renderMultiTaskbar = function (record) {\n if (this.parent.enableMultiTaskbar) {\n this.parent.chartRowsModule.refreshRecords([record], true);\n }\n else if (this.parent.showOverAllocation) {\n this.parent.ganttChartModule.renderRangeContainer(this.parent.currentViewData);\n }\n };\n /**\n * On expand collapse operation row properties will be updated here.\n *\n * @param {string} action .\n * @param {Node} rowElement .\n * @param {IGanttData} record .\n * @param {boolean} isChild .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.expandCollapseChartRows = function (action, rowElement, record, isChild) {\n var displayType;\n if (action === 'expand') {\n displayType = 'table-row';\n if (!isChild) {\n record.expanded = true;\n }\n var targetElement = rowElement.querySelectorAll('.e-row-collapse');\n for (var t = 0; t < targetElement.length; t++) {\n addClass([targetElement[t]], 'e-row-expand');\n removeClass([targetElement[t]], 'e-row-collapse');\n }\n }\n else if (action === 'collapse') {\n displayType = 'none';\n if (!isChild) {\n record.expanded = false;\n }\n var targetElement = rowElement.querySelectorAll('.e-row-expand');\n for (var t = 0; t < targetElement.length; t++) {\n addClass([targetElement[t]], 'e-row-collapse');\n removeClass([targetElement[t]], 'e-row-expand');\n }\n }\n if (!this.parent.enableVirtualization) {\n var childRecords = record.childRecords;\n var chartRows = this.getChartRows();\n var rows = [];\n for (var i = 0; i < chartRows.length; i++) {\n if (chartRows[i].classList.contains(\"gridrowtaskId\" +\n record.ganttProperties.rowUniqueID +\n \"level\" +\n (record.level + 1))) {\n rows.push(chartRows[i]);\n }\n }\n for (var i = 0; i < rows.length; i++) {\n rows[i].style.display = displayType;\n if (childRecords[i].childRecords &&\n childRecords[i].childRecords.length &&\n (action === \"collapse\" ||\n childRecords[i].expanded ||\n this.isExpandAll)) {\n this.expandCollapseChartRows(action, rows[i], childRecords[i], true);\n }\n }\n }\n };\n /**\n * Public method to expand or collapse all the rows of Gantt\n *\n * @returns {void}\n * @param {string} action .\n * @private\n */\n GanttChart.prototype.expandCollapseAll = function (action) {\n if (action === 'expand') {\n this.isExpandAll = true;\n this.parent.treeGrid.expandAll();\n }\n else {\n this.parent.treeGrid.collapseAll();\n }\n this.isExpandAll = false;\n };\n /**\n * Public method to expand particular level of rows.\n *\n * @returns {void} .\n * @param {number} level .\n * @private\n */\n GanttChart.prototype.expandAtLevel = function (level) {\n this.parent.treeGrid.expandAtLevel(level);\n };\n /**\n * Public method to collapse particular level of rows.\n *\n * @returns {void} .\n * @param {number} level .\n * @private\n */\n GanttChart.prototype.collapseAtLevel = function (level) {\n if (this.parent.enableVirtualization) {\n this.parent.isExpandCollapseLevelMethod = true;\n }\n this.parent.treeGrid.collapseAtLevel(level);\n };\n /**\n * Event Binding for gantt chart click\n *\n * @returns {void} .\n */\n GanttChart.prototype.wireEvents = function () {\n var isIE11Pointer = Browser.isPointer; // eslint-disable-line\n var mouseDown = Browser.touchStartEvent;\n var mouseUp = Browser.touchEndEvent;\n var mouseMove = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n EventHandler.add(this.parent.chartPane, mouseDown, this.ganttChartMouseDown, this);\n EventHandler.add(this.parent.chartPane, cancel, this.ganttChartLeave, this);\n EventHandler.add(this.parent.chartPane, mouseMove, this.ganttChartMove, this);\n if (this.parent.isAdaptive) {\n EventHandler.add(this.parent.chartPane, click, this.ganttChartMouseClick, this);\n EventHandler.add(this.parent.chartPane, mouseUp, this.ganttChartMouseUp, this);\n }\n if (!this.parent.isAdaptive) {\n EventHandler.add(this.parent.element, mouseUp, this.documentMouseUp, this);\n EventHandler.add(document, mouseUp, this.mouseUp, this);\n }\n EventHandler.add(this.parent.element, 'mousemove', this.mouseMoveHandler, this);\n EventHandler.add(document.body, 'contextmenu', this.contextClick, this);\n EventHandler.add(document, 'mouseup', this.contextClick, this);\n EventHandler.add(this.parent.chartRowsModule.ganttChartTableBody, 'dblclick', this.doubleClickHandler, this);\n };\n GanttChart.prototype.unWireEvents = function () {\n var isIE11Pointer = Browser.isPointer; // eslint-disable-line\n var mouseDown = Browser.touchStartEvent;\n var mouseUp = Browser.touchEndEvent;\n var mouseMove = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n EventHandler.remove(this.parent.chartRowsModule.ganttChartTableBody, mouseDown, this.ganttChartMouseDown);\n EventHandler.remove(this.parent.chartPane, cancel, this.ganttChartLeave);\n EventHandler.remove(this.parent.chartPane, mouseMove, this.ganttChartMove);\n if (this.parent.isAdaptive) {\n EventHandler.remove(this.parent.chartPane, click, this.ganttChartMouseClick);\n EventHandler.remove(this.parent.chartPane, mouseUp, this.ganttChartMouseUp);\n }\n if (!this.parent.isAdaptive) {\n EventHandler.remove(this.parent.element, mouseUp, this.documentMouseUp);\n EventHandler.remove(document, mouseUp, this.mouseUp);\n }\n EventHandler.remove(this.parent.element, 'mousemove', this.mouseMoveHandler);\n EventHandler.remove(document.body, 'contextmenu', this.contextClick);\n EventHandler.remove(document, 'mouseup', this.contextClick);\n EventHandler.remove(this.parent.chartRowsModule.ganttChartTableBody, 'dblclick', this.doubleClickHandler);\n };\n /**\n * To get record by taskbar element.\n *\n * @param {Element} target .\n * @returns {IGanttData} .\n * @private\n */\n GanttChart.prototype.getRecordByTaskBar = function (target) {\n var item;\n if (this.parent.enableVirtualization && this.parent.enableMultiTaskbar) {\n item = this.parent.flatData[this.getIndexByTaskBar(target)];\n }\n else {\n item = this.parent.currentViewData[this.getIndexByTaskBar(target)];\n }\n return item;\n };\n /**\n * Trigger Tab & Shift + Tab keypress to highlight active element.\n *\n * @param {KeyboardEventArgs} e .\n * @returns {void} .\n * @private\n */\n GanttChart.prototype.onTabAction = function (e) {\n this.parent.treeGrid.grid.enableHeaderFocus = this.parent.enableHeaderFocus;\n var isInEditedState = this.parent.editModule && this.parent.editModule.cellEditModule &&\n this.parent.editModule.cellEditModule.isCellEdit;\n if (!this.parent.showActiveElement && !isInEditedState) {\n return;\n }\n var $target = isInEditedState ? e.target.closest('.e-rowcell') : e.target;\n if ($target.closest('.e-rowcell') || $target.closest('.e-chart-row')) {\n this.parent.focusModule.setActiveElement($target);\n }\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.focusedRowIndex = $target.closest('.e-rowcell') ? $target.parentElement.rowIndex :\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n $target.closest('.e-chart-row') ? $target.closest('.e-chart-row').rowIndex : -1;\n var isTab = (e.action === 'tab') ? true : false;\n var nextElement = this.getNextElement($target, isTab, isInEditedState);\n if (nextElement && $target.classList.contains('e-headercell')) {\n var colIndex = parseInt(nextElement.getAttribute('data-colindex'));\n if (e.action === 'shiftTab') {\n while (colIndex != -1 && !this.parent.treeGrid.columns[colIndex]['visible']) {\n colIndex = colIndex - 1;\n }\n if (colIndex != -1) {\n nextElement = document.getElementsByClassName('e-columnheader')[0].childNodes[colIndex];\n }\n else {\n var toolbarItems = document.getElementsByClassName('e-toolbar-item');\n for (var i = toolbarItems.length - 1; i > 0; i--) {\n if (!document.getElementsByClassName('e-toolbar-item')[i].classList.contains('e-hidden')) {\n nextElement = document.getElementsByClassName('e-toolbar-item')[i];\n break;\n }\n }\n }\n }\n else {\n while (!this.parent.treeGrid.columns[colIndex]['visible']) {\n colIndex = colIndex + 1;\n }\n nextElement = document.getElementsByClassName('e-columnheader')[0].childNodes[colIndex];\n }\n }\n if (!nextElement && e.action === 'shiftTab' && $target.classList.contains('e-headercell')) {\n var toolbarItems = document.getElementsByClassName('e-toolbar-item');\n for (var i = toolbarItems.length - 1; i > 0; i--) {\n if (!document.getElementsByClassName('e-toolbar-item')[i].classList.contains('e-hidden')) {\n nextElement = document.getElementsByClassName('e-toolbar-item')[i];\n break;\n }\n }\n }\n if ($target.classList.contains('e-treegrid') && !nextElement) {\n for (var i = 0; i < this.parent.treeGrid.columns.length; i++) {\n if (this.parent.treeGrid.columns[i]['visible']) {\n nextElement = document.getElementsByClassName('e-columnheader')[0].childNodes[i];\n break;\n }\n }\n }\n if (!nextElement && $target.classList.contains('e-headercell')) {\n nextElement = document.getElementsByClassName('e-timeline-header-container')[0];\n }\n if (e.action !== 'shiftTab' && $target.classList.contains('e-timeline-header-container')) {\n for (var i = 0; i < this.parent.treeGrid.columns.length; i++) {\n if (this.parent.treeGrid.columns[i]['visible']) {\n nextElement = document.getElementsByClassName('e-row')[0].childNodes[i];\n break;\n }\n }\n }\n if (e.action === 'shiftTab' && !nextElement) {\n nextElement = document.getElementsByClassName('e-timeline-header-container')[0];\n }\n if (e.action === 'shiftTab' && $target.classList.contains('e-timeline-header-container')) {\n for (var i = this.parent.treeGrid.columns.length - 1; i > 0; i--) {\n if (this.parent.treeGrid.columns[i]['visible']) {\n nextElement = document.getElementsByClassName('e-columnheader')[0].childNodes[i];\n break;\n }\n }\n }\n this.tempNextElement = nextElement;\n if (!isNullOrUndefined(nextElement) && !isNullOrUndefined(nextElement['cellIndex'])) {\n if (this.parent.allowRowDragAndDrop) {\n this.childrenIndex = nextElement['cellIndex'];\n this.nextElementIndex = nextElement['cellIndex'] - 1;\n }\n else {\n this.childrenIndex = nextElement['cellIndex'];\n this.nextElementIndex = nextElement['cellIndex'];\n }\n if (!this.parent.ganttColumns[this.nextElementIndex]['allowEditing'] && this.parent.ganttColumns[this.nextElementIndex]['field'] !== this.parent.taskFields.id) {\n this.isEditableElement = true;\n }\n else {\n this.isEditableElement = false;\n }\n }\n if (nextElement === 'noNextRow') {\n this.manageFocus($target, 'remove', true);\n return;\n }\n if (typeof nextElement !== 'string') {\n if ($target.classList.contains('e-rowcell') || $target.closest('.e-chart-row-cell') ||\n $target.classList.contains('e-headercell') || $target.closest('.e-segmented-taskbar') || $target.classList.contains('e-timeline-header-container')) {\n e.preventDefault();\n }\n if (isTab && $target.classList.contains('e-rowdragdrop')) {\n this.parent.treeGrid.grid.notify('key-pressed', e);\n return;\n }\n if ($target.classList.contains('e-rowcell') && (nextElement && nextElement.classList.contains('e-rowcell')) ||\n $target.classList.contains('e-headercell')) { // eslint-disable-line \n if (isTab) {\n if (this.parent.editSettings.allowNextRowEdit) {\n var rowData = this.parent.currentViewData[this.focusedRowIndex];\n var columnName = this.parent.ganttColumns[nextElement.getAttribute('data-colindex')].field;\n if (rowData.hasChildRecords) {\n if (columnName === this.parent.taskFields.endDate || columnName ===\n this.parent.taskFields.duration || columnName === this.parent.taskFields.dependency ||\n columnName === this.parent.taskFields.progress || columnName === this.parent.taskFields.work ||\n columnName === 'taskType') {\n this.parent.treeGrid.grid.endEdit();\n this.parent.treeGrid.grid.notify('key-pressed', e);\n }\n else if (columnName === this.parent.taskFields.name || columnName === this.parent.taskFields.startDate) {\n this.parent.treeGrid.grid.notify('key-pressed', e);\n }\n else {\n this.parent.treeGrid.grid.notify('key-pressed', e);\n if (isInEditedState) {\n this.parent.treeGrid.editCell(this.focusedRowIndex, columnName); // eslint-disable-line\n }\n }\n }\n else {\n this.parent.treeGrid.grid.notify('key-pressed', e);\n }\n }\n else {\n if (!nextElement || nextElement && !nextElement.classList.contains('e-headercell')) {\n if ($target.classList.contains('e-headercell')) {\n this.manageFocus($target, 'remove', false);\n }\n if (!nextElement || $target.classList.contains('e-editedbatchcell')) {\n this.parent.treeGrid.grid.notify('key-pressed', e);\n }\n }\n }\n }\n else {\n if (!nextElement.classList.contains('e-headercell') && !nextElement.classList.contains('e-rowcell')\n && !nextElement.classList.contains('e-toolbar-item')) {\n this.parent.treeGrid.grid.notify('key-pressed', e);\n }\n }\n }\n if (!(this.parent.editModule && this.parent.editModule.cellEditModule\n && !isNullOrUndefined(this.parent.editModule.cellEditModule.editedColumn))) {\n if (nextElement) {\n if ($target.classList.contains('e-rowcell')) {\n this.manageFocus($target, 'remove', false);\n }\n else {\n this.manageFocus($target, 'remove', true);\n }\n if ((nextElement.classList.contains('e-rowcell') && $target.nextElementSibling && !$target.classList.contains('e-timeline-header-container'))\n || $target.classList.contains('e-right-label-container')) {\n if (!$target.classList.contains('e-rowcell')) {\n this.parent.treeGrid.grid.notify('key-pressed', e);\n var fmodule = getValue('focusModule', this.parent.treeGrid.grid);\n fmodule.currentInfo.element = nextElement;\n fmodule.currentInfo.elementToFocus = nextElement;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n fmodule.content.matrix.current = [nextElement.parentElement.rowIndex, nextElement.cellIndex];\n }\n this.manageFocus(nextElement, 'add', false);\n }\n else {\n if (nextElement && (nextElement.classList.contains('e-toolbar-item') || nextElement.classList.contains('e-headercell')\n || nextElement.classList.contains(\"e-rowcell\"))) {\n this.manageFocus($target, 'remove', false);\n this.manageFocus(nextElement, 'add', false);\n if ($target.classList.contains('e-treegrid')) {\n e.preventDefault();\n }\n }\n else {\n this.manageFocus(nextElement, 'add', true);\n }\n }\n this.parent.focusModule.setActiveElement(nextElement);\n }\n }\n }\n };\n /**\n * Get next/previous sibling element.\n *\n * @param {Element} $target .\n * @param {boolean} isTab .\n * @param {boolean} isInEditedState .\n * @returns {Element | string} .\n */\n GanttChart.prototype.getNextElement = function ($target, isTab, isInEditedState) {\n var nextElement = isTab ? $target.nextElementSibling : $target.previousElementSibling;\n while (nextElement && nextElement.parentElement.classList.contains('e-row')) {\n if (!nextElement.matches('.e-hide') && !nextElement.matches('.e-rowdragdrop')) {\n return nextElement;\n }\n nextElement = isTab ? nextElement.nextElementSibling : nextElement.previousElementSibling;\n }\n if (!isNullOrUndefined(nextElement) && (nextElement.classList.contains('e-taskbar-main-container')\n || nextElement.classList.contains('e-right-connectorpoint-outer-div'))) {\n var record = this.parent.currentViewData[this.focusedRowIndex];\n if (!isNullOrUndefined(record.ganttProperties.segments) && record.ganttProperties.segments.length > 0) {\n nextElement = nextElement.classList.contains('e-right-connectorpoint-outer-div')\n ? nextElement.parentElement.nextElementSibling\n : nextElement.getElementsByClassName('e-gantt-child-taskbar-inner-div')[0];\n }\n }\n if (this.validateNextElement(nextElement)) {\n return nextElement;\n }\n else {\n var rowIndex = -1;\n var rowElement = null;\n var childElement = void 0;\n if ($target.classList.contains('e-rowcell') && isInEditedState && this.parent.editSettings.allowNextRowEdit) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n rowIndex = $target.parentElement.rowIndex;\n rowElement = this.getNextRowElement(rowIndex, isTab, true);\n childElement = this.getChildElement(rowElement, isTab);\n return childElement;\n }\n else if ($target.classList.contains('e-rowcell')) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n rowIndex = $target.parentElement.rowIndex;\n if (isTab) {\n rowElement = this.parent.getRowByIndex(rowIndex);\n if (this.validateNextElement(rowElement, 'e-left-label-container')) {\n return rowElement.getElementsByClassName('e-left-label-container')[0];\n }\n else if (this.validateNextElement(rowElement, 'e-taskbar-main-container')) {\n return rowElement.getElementsByClassName('e-taskbar-main-container')[0];\n }\n else if (this.validateNextElement(rowElement, 'e-right-label-container')) {\n return rowElement.getElementsByClassName('e-right-label-container')[0];\n }\n }\n else {\n rowElement = this.getNextRowElement(rowIndex, isTab, false);\n if (this.validateNextElement(rowElement, 'e-right-label-container')) {\n return rowElement.getElementsByClassName('e-right-label-container')[0];\n }\n else if (this.validateNextElement(rowElement, 'e-taskbar-main-container')) {\n return rowElement.getElementsByClassName('e-taskbar-main-container')[0];\n }\n else if (this.validateNextElement(rowElement, 'e-left-label-container')) {\n return rowElement.getElementsByClassName('e-left-label-container')[0];\n }\n }\n }\n else if ($target.parentElement.classList.contains('e-chart-row-cell') ||\n $target.parentElement.parentElement.classList.contains('e-chart-row-cell')) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n rowIndex = closest($target, '.e-chart-row').rowIndex;\n if (isTab) {\n rowElement = this.getNextRowElement(rowIndex, isTab, true);\n }\n else {\n rowElement = this.parent.treeGrid.grid.getRowByIndex(rowIndex);\n }\n var childElement_1 = this.getChildElement(rowElement, isTab);\n return childElement_1;\n }\n nextElement = $target;\n if (nextElement && nextElement.parentElement.classList.contains('e-toolbar-item') && this.parent.toolbarModule) {\n while (nextElement && nextElement.parentElement.classList.contains('e-toolbar-item') && nextElement.parentElement.nextElementSibling.classList.contains('e-toolbar-item')) {\n if (nextElement.parentElement.nextElementSibling.classList.contains('e-hidden')) {\n nextElement = nextElement.parentElement.nextElementSibling.childNodes[0];\n }\n else {\n return nextElement.parentElement.nextElementSibling;\n }\n }\n }\n }\n return null;\n };\n /**\n * Get next/previous row element.\n *\n * @param {number} rowIndex .\n * @param {boolean} isTab .\n * @param {boolean} isChartRow .\n * @returns {Element} .\n */\n GanttChart.prototype.getNextRowElement = function (rowIndex, isTab, isChartRow) {\n var expandedRecords = this.parent.getExpandedRecords(this.parent.currentViewData);\n var currentItem = this.parent.currentViewData[rowIndex];\n var expandedRecordIndex = expandedRecords.indexOf(currentItem);\n var nextRecord = isTab ? expandedRecords[expandedRecordIndex + 1] : expandedRecords[expandedRecordIndex - 1];\n var nextRowIndex = this.parent.currentViewData.indexOf(nextRecord);\n if (nextRecord) {\n return isChartRow ? this.parent.treeGrid.grid.getRowByIndex(nextRowIndex) : this.parent.getRowByIndex(nextRowIndex);\n }\n else {\n return null;\n }\n };\n /**\n * Validate next/previous sibling element haschilds.\n *\n * @param {Element} $target .\n * @param {string} className .\n * @returns {boolean} .\n */\n GanttChart.prototype.validateNextElement = function ($target, className) {\n if ($target && $target.classList.contains('e-rowcell')) {\n return true;\n }\n if ($target && className) {\n var elementByClass = $target.getElementsByClassName(className)[0];\n return (elementByClass && elementByClass.hasChildNodes()) ? true : false;\n }\n else if ($target) {\n return (!isNullOrUndefined($target) && $target.hasChildNodes()) ? true : false;\n }\n return false;\n };\n /**\n * Getting child element based on row element.\n *\n * @param {Element} rowElement .\n * @param {boolean} isTab .\n * @returns {Element | string} .\n */\n GanttChart.prototype.getChildElement = function (rowElement, isTab) {\n var childElement;\n if (rowElement) {\n childElement = isTab ? rowElement.children[0] : rowElement.children[rowElement.children.length - 1];\n while (childElement) {\n if (!childElement.matches('.e-hide') && !childElement.matches('.e-rowdragdrop')) {\n return childElement;\n }\n childElement = isTab ? childElement.nextElementSibling : childElement.previousElementSibling;\n }\n }\n else {\n return 'noNextRow';\n }\n return childElement;\n };\n /**\n * Add/Remove active element.\n *\n * @private\n * @param {HTMLElement} element .\n * @param {string} focus .\n * @param {boolean} isChartElement .\n * @returns {void} .\n */\n GanttChart.prototype.manageFocus = function (element, focus, isChartElement) {\n if (isChartElement) {\n var childElement = null;\n if (element.classList.contains('e-left-label-container') ||\n element.classList.contains('e-right-label-container')) {\n childElement = element.getElementsByTagName('span')[0];\n }\n else if (element.classList.contains('e-taskbar-main-container')\n || element.classList.contains('e-gantt-child-taskbar-inner-div')) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var rowIndex = closest(element, '.e-chart-row').rowIndex;\n var data = this.parent.currentViewData[rowIndex];\n var className = data.hasChildRecords ? data.ganttProperties.isAutoSchedule ? 'e-gantt-parent-taskbar' :\n 'e-manualparent-main-container' :\n data.ganttProperties.isMilestone ? 'e-gantt-milestone' : !isNullOrUndefined(data.ganttProperties.segments)\n && data.ganttProperties.segments.length > 0 ? 'e-segmented-taskbar' : 'e-gantt-child-taskbar';\n childElement = element.getElementsByClassName(className)[0];\n if (isNullOrUndefined(childElement)) {\n childElement = element;\n }\n }\n if (element.classList.contains('e-right-label-temp-container') || element.classList.contains('e-left-label-temp-container') || element.classList.contains('e-indicator-span')) {\n if (focus === 'add') {\n element.setAttribute('tabIndex', '0');\n addClass([element], 'e-active-container');\n element.focus();\n }\n else {\n removeClass([element], 'e-active-container');\n element.setAttribute('tabIndex', '-1');\n element.blur();\n }\n }\n if (focus === 'add' && !isNullOrUndefined(childElement)) {\n element.setAttribute('tabIndex', '0');\n addClass([childElement], 'e-active-container');\n element.focus();\n this.focusedElement = childElement;\n }\n else if (!isNullOrUndefined(childElement)) {\n removeClass([childElement], 'e-active-container');\n element.setAttribute('tabIndex', '-1');\n element.blur();\n }\n }\n else {\n if (focus === 'add') {\n element.setAttribute('tabIndex', '0');\n addClass([element], ['e-focused', 'e-focus']);\n element.focus();\n }\n else {\n element.setAttribute('tabIndex', '-1');\n removeClass([element], ['e-focused', 'e-focus']);\n element.blur();\n }\n }\n };\n /**\n * To get index by taskbar element.\n *\n * @param {Element} target .\n * @returns {number} .\n * @private\n */\n GanttChart.prototype.getIndexByTaskBar = function (target) {\n var row;\n var recordIndex;\n if (!target.classList.contains(cls.taskBarMainContainer)) {\n row = closest(target, 'div.' + cls.taskBarMainContainer);\n }\n else {\n row = target;\n }\n if (isNullOrUndefined(row)) {\n row = closest(target, 'tr.' + cls.chartRow);\n recordIndex = [].slice.call(this.parent.chartRowsModule.ganttChartTableBody.childNodes).indexOf(row);\n }\n else {\n var id = row.getAttribute('rowUniqueId');\n var record = this.parent.getRecordByID(id);\n if (this.parent.enableVirtualization && this.parent.enableMultiTaskbar) {\n recordIndex = this.parent.flatData.indexOf(record);\n }\n else {\n recordIndex = this.parent.currentViewData.indexOf(record);\n }\n }\n return recordIndex;\n };\n GanttChart.prototype.destroy = function () {\n this.removeEventListener();\n this.unWireEvents();\n this.scrollObject.destroy();\n this.scrollObject = null;\n };\n return GanttChart;\n}());\nexport { GanttChart };\n","var __assign = (this && this.__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};\nimport { createElement, isNullOrUndefined, getValue, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constants';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Configures the `Timeline` of the gantt.\n */\nvar Timeline = /** @class */ (function () {\n function Timeline(ganttObj) {\n this.isZoomIn = false;\n this.isZooming = false;\n this.isZoomToFit = false;\n this.topTierCollection = [];\n this.bottomTierCollection = [];\n this.parent = ganttObj;\n this.initProperties();\n }\n /**\n * To initialize the public property.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.initProperties = function () {\n this.timelineStartDate = null;\n this.timelineEndDate = null;\n this.totalTimelineWidth = 0;\n this.customTimelineSettings = null;\n this.parent.isTimelineRoundOff = this.isZoomToFit ? false : isNullOrUndefined(this.parent.projectStartDate) ? true : false;\n if (this.parent.enablePersistence && this.parent.isLoad) {\n this.parent.timelineSettings = this.parent.currentZoomingLevel;\n }\n };\n /**\n * To render timeline header series.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.validateTimelineProp = function () {\n this.roundOffDays();\n this.processTimelineProperty();\n this.timelineWidthCalculation();\n };\n /**\n * Function used to refresh Gantt rows.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.refreshTimeline = function () {\n this.initProperties();\n this.processTimelineUnit();\n this.parent.dataOperation.calculateProjectDates();\n if (!this.parent.isFromOnPropertyChange) {\n this.parent.updateProjectDates(this.parent.cloneProjectStartDate, this.parent.cloneProjectEndDate, this.parent.isTimelineRoundOff);\n }\n };\n /**\n * Function used to refresh Gantt rows.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.refreshTimelineByTimeSpan = function () {\n this.validateTimelineProp();\n this.parent.ganttChartModule.chartTimelineContainer.innerHTML = '';\n this.createTimelineSeries();\n };\n /**\n * Function used to refresh Gantt rows.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.updateChartByNewTimeline = function () {\n this.parent.chartRowsModule.refreshChartByTimeline();\n this.parent.notify('refreshDayMarkers', {});\n };\n /**\n * Function used to perform Zoomin and Zoomout actions in Gantt control.\n *\n * @param {boolean} isZoomIn .\n * @private\n * @returns {void}\n */\n Timeline.prototype.processZooming = function (isZoomIn) {\n this.isZoomToFit = false;\n if (!this.parent['isProjectDateUpdated']) {\n this.parent.dateValidationModule.calculateProjectDates();\n }\n if (!isNullOrUndefined(this.parent.zoomingProjectStartDate)) {\n this.parent.cloneProjectStartDate = this.parent.cloneProjectStartDate.getTime() < this.parent.zoomingProjectStartDate.getTime()\n ? this.parent.cloneProjectStartDate : this.parent.zoomingProjectStartDate;\n this.parent.cloneProjectEndDate = this.parent.cloneProjectEndDate.getTime() > this.parent.zoomingProjectEndDate.getTime()\n ? this.parent.cloneProjectEndDate : this.parent.zoomingProjectEndDate;\n }\n this.parent.zoomingProjectStartDate = null;\n this.parent.zoomingProjectEndDate = null;\n var currentZoomingLevel = this.checkCurrentZoomingLevel();\n this.isZoomIn = isZoomIn;\n this.isZooming = true;\n var currentLevel = isZoomIn ? currentZoomingLevel + 1 : currentZoomingLevel - 1;\n if (this.parent.toolbarModule) {\n if (isZoomIn) {\n if (currentLevel === this.parent.zoomingLevels[this.parent.zoomingLevels.length - 1].level) {\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomin'], false); // disable toolbar items.\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomout'], true);\n }\n else {\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomout'], true); // disable toolbar items.\n }\n }\n else {\n if (currentLevel === this.parent.zoomingLevels[0].level) {\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomout'], false); // disable toolbar items.\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomin'], true);\n }\n else {\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomin'], true); // enable toolbar items.\n }\n }\n }\n currentLevel = this.parent.zoomingLevels.findIndex(function (tempLevel) {\n return tempLevel.level === currentLevel;\n });\n var newTimeline = this.parent.zoomingLevels[currentLevel];\n var args = {\n requestType: isZoomIn ? 'beforeZoomIn' : 'beforeZoomOut',\n timeline: newTimeline,\n cancel: false\n };\n this.parent.trigger('actionBegin', args);\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.showMaskRow();\n }\n else {\n this.parent.showSpinner();\n }\n if (!args.cancel) {\n newTimeline = args.timeline;\n this.changeTimelineSettings(newTimeline);\n }\n };\n /**\n * To change the timeline settings property values based upon the Zooming levels.\n *\n * @param {ZoomTimelineSettings} newTimeline .\n * @returns {void}\n * @private\n */\n Timeline.prototype.changeTimelineSettings = function (newTimeline) {\n var _this = this;\n if (this.isZoomToFit) {\n this.isSingleTier = this.customTimelineSettings.topTier.unit === 'None' || this.customTimelineSettings.bottomTier.unit === 'None' ? true : false;\n }\n else if (!this.isZoomIn) {\n this.isSingleTier = newTimeline.topTier.unit === 'None' || newTimeline.bottomTier.unit === 'None' ? true : false;\n }\n var skipProperty = this.isSingleTier ?\n this.customTimelineSettings.topTier.unit === 'None' ?\n 'topTier' : 'bottomTier' : null;\n Object.keys(this.customTimelineSettings).forEach(function (property) {\n if (property !== skipProperty) {\n _this.customTimelineSettings[property] = (typeof newTimeline[property] === 'object'\n && !isNullOrUndefined(newTimeline[property])) ? __assign({}, newTimeline[property]) : newTimeline[property];\n }\n else {\n var value = property === 'topTier' ? 'bottomTier' : 'topTier';\n var assignValue = 'bottomTier';\n if (newTimeline[\"\" + assignValue].unit != \"None\") {\n _this.customTimelineSettings[value] = __assign({}, newTimeline[assignValue]);\n }\n }\n });\n this.parent.isTimelineRoundOff = this.isZoomToFit ? false : isNullOrUndefined(this.parent.projectStartDate) ? true : false;\n this.processTimelineUnit();\n this.parent.updateProjectDates(this.parent.cloneProjectStartDate, this.parent.cloneProjectEndDate, this.parent.isTimelineRoundOff);\n var criticalModule = this.parent.criticalPathModule;\n if (this.parent.enableCriticalPath && criticalModule) {\n criticalModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);\n }\n if (this.isZooming || this.isZoomToFit) {\n var args = {\n requestType: this.isZoomIn ? 'AfterZoomIn' : this.isZoomToFit ? 'AfterZoomToProject' : 'AfterZoomOut',\n timeline: this.parent.currentZoomingLevel\n };\n this.parent.trigger('actionComplete', args);\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.hideMaskRow();\n }\n else {\n this.parent.hideSpinner();\n }\n }\n };\n /**\n * To perform the zoom to fit operation in Gantt.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.processZoomToFit = function () {\n this.isZoomToFit = true;\n this.isZooming = false;\n if (!this.parent.zoomingProjectStartDate) {\n this.parent.zoomingProjectStartDate = this.parent.cloneProjectStartDate;\n this.parent.zoomingProjectEndDate = this.parent.cloneProjectEndDate;\n }\n if (this.parent.zoomingProjectStartDate > this.parent.cloneProjectStartDate) {\n this.parent.cloneProjectStartDate = new Date(this.parent.allowUnscheduledTasks ? this.parent.zoomingProjectStartDate : this.parent.cloneProjectStartDate);\n }\n this.parent.dataOperation.calculateProjectDates();\n var timeDifference = (this.parent.cloneProjectEndDate.getTime() - this.parent.cloneProjectStartDate.getTime());\n var totalDays = (timeDifference / (1000 * 3600 * 24));\n var chartWidth = this.parent.ganttChartModule.chartElement.offsetWidth;\n var perDayWidth = chartWidth / totalDays;\n var zoomingLevel;\n var firstValue;\n var secondValue;\n var zoomingCollections = this.parent.zoomingLevels.slice();\n var sortedCollectons = zoomingCollections.sort(function (a, b) {\n return (!a.perDayWidth && !b.perDayWidth ? 0 : (a.perDayWidth < b.perDayWidth) ? 1 : -1);\n });\n if (perDayWidth === 0) { // return when the Gantt chart is not in viewable state.\n return;\n }\n for (var i = 0; i < sortedCollectons.length; i++) {\n firstValue = sortedCollectons[i];\n if (i === sortedCollectons.length - 1) {\n zoomingLevel = sortedCollectons[i];\n break;\n }\n else {\n secondValue = sortedCollectons[i + 1];\n }\n if (perDayWidth >= firstValue.perDayWidth) {\n zoomingLevel = sortedCollectons[i];\n break;\n }\n if (perDayWidth < firstValue.perDayWidth && perDayWidth > secondValue.perDayWidth) {\n zoomingLevel = sortedCollectons[i + 1];\n break;\n }\n }\n var newTimeline = extend({}, {}, zoomingLevel, true);\n this.roundOffDateToZoom(this.parent.cloneProjectStartDate, true, perDayWidth, newTimeline.bottomTier.unit, zoomingLevel);\n this.roundOffDateToZoom(this.parent.cloneProjectEndDate, false, perDayWidth, newTimeline.bottomTier.unit, zoomingLevel);\n var numberOfCells = this.calculateNumberOfTimelineCells(newTimeline);\n var scrollHeight = this.parent.ganttChartModule.scrollElement.offsetHeight - 17; //17 is horizontal scrollbar width\n var contentHeight = this.parent.ganttChartModule.chartBodyContent.offsetHeight;\n var emptySpace = contentHeight <= scrollHeight ? 0 : 17;\n newTimeline.timelineUnitSize = Math.abs((chartWidth - emptySpace)) / numberOfCells;\n var args = {\n requestType: 'beforeZoomToProject',\n timeline: newTimeline\n };\n if (this.parent.toolbarModule) {\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomin', this.parent.controlId + '_zoomout'], true);\n }\n this.parent.trigger('actionBegin', args);\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.showMaskRow();\n }\n else {\n this.parent.showSpinner();\n }\n this.changeTimelineSettings(newTimeline);\n this.parent.isTimelineRoundOff = isNullOrUndefined(this.parent.projectStartDate) ? true : false;\n };\n Timeline.prototype.bottomTierCellWidthCalc = function (mode, zoomLevel, date) {\n var convertedMilliSeconds;\n switch (mode) {\n case 'Minutes':\n convertedMilliSeconds = zoomLevel.bottomTier.count * (60 * 1000);\n break;\n case 'Hour':\n convertedMilliSeconds = zoomLevel.bottomTier.count * (60 * 60 * 1000);\n break;\n case 'Week':\n convertedMilliSeconds = zoomLevel.bottomTier.count * (7 * 24 * 60 * 60 * 1000);\n break;\n case 'Day':\n convertedMilliSeconds = zoomLevel.bottomTier.count * (24 * 60 * 60 * 1000);\n break;\n case 'Month':\n var daysInMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n convertedMilliSeconds = zoomLevel.bottomTier.count * (60 * 60 * 24 * daysInMonth * 1000);\n break;\n case 'Year':\n var daysInYear = (date.getFullYear() % 400 === 0 || (date.getFullYear() % 100 !== 0 && date.getFullYear() % 4 === 0)) ? 366 : 365;\n convertedMilliSeconds = zoomLevel.bottomTier.count * (60 * 60 * 24 * daysInYear * 1000);\n break;\n }\n return convertedMilliSeconds;\n };\n Timeline.prototype.roundOffDateToZoom = function (date, isStartDate, perDayWidth, tierMode, zoomingLevel) {\n var roundOffTime = this.bottomTierCellWidthCalc(tierMode, zoomingLevel, date);\n if (isStartDate) {\n date.setTime(date.getTime() - roundOffTime);\n }\n else {\n date.setTime(date.getTime() + roundOffTime);\n }\n };\n Timeline.prototype.calculateNumberOfTimelineCells = function (newTimeline) {\n var numberOfDays = Math.abs((this.parent.cloneProjectEndDate.getTime() -\n this.parent.cloneProjectStartDate.getTime()) / (24 * 60 * 60 * 1000));\n var count = newTimeline.bottomTier.count;\n var unit = newTimeline.bottomTier.unit;\n if (unit === 'Day') {\n return numberOfDays / count;\n }\n else if (unit === 'Week') {\n return (numberOfDays / count) / 7;\n }\n else if (unit === 'Month') {\n return (numberOfDays / count) / 28;\n }\n else if (unit === 'Year') {\n return (numberOfDays / count) / (12 * 28);\n }\n else if (unit === 'Hour') {\n return numberOfDays * (24 / count);\n }\n else {\n return numberOfDays * ((60 * 24) / count);\n }\n };\n /**\n * To validate time line unit.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.processTimelineUnit = function () {\n var directProperty = ['timelineViewMode', 'timelineUnitSize', 'weekStartDay', 'weekendBackground'];\n var innerProperty = {\n 'topTier': ['unit', 'format', 'count', 'formatter'],\n 'bottomTier': ['unit', 'format', 'count', 'formatter']\n };\n var tierUnits = ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minutes'];\n this.customTimelineSettings = this.customTimelineSettings ? this.customTimelineSettings :\n this.extendFunction(this.parent.timelineSettings, directProperty, innerProperty);\n if ((tierUnits.indexOf(this.customTimelineSettings.topTier.unit) === -1) &&\n (tierUnits.indexOf(this.customTimelineSettings.bottomTier.unit) === -1)) {\n this.customTimelineSettings.topTier.unit = tierUnits.indexOf(this.customTimelineSettings.timelineViewMode) !== -1 ?\n this.customTimelineSettings.timelineViewMode : 'Week';\n this.customTimelineSettings.bottomTier.unit = tierUnits.indexOf(this.customTimelineSettings.topTier.unit) !== 5 ?\n tierUnits[tierUnits.indexOf(this.customTimelineSettings.topTier.unit) + 1] : 'None';\n }\n else if ((tierUnits.indexOf(this.customTimelineSettings.topTier.unit) !== -1 &&\n tierUnits.indexOf(this.customTimelineSettings.bottomTier.unit) !== -1)\n && (tierUnits.indexOf(this.customTimelineSettings.topTier.unit) >\n tierUnits.indexOf(this.customTimelineSettings.bottomTier.unit))) {\n this.customTimelineSettings.bottomTier.unit = this.customTimelineSettings.topTier.unit;\n }\n else {\n this.customTimelineSettings.topTier.unit = tierUnits.indexOf(this.customTimelineSettings.topTier.unit) === -1 ?\n 'None' : this.customTimelineSettings.topTier.unit;\n this.customTimelineSettings.bottomTier.unit = tierUnits.indexOf(this.customTimelineSettings.bottomTier.unit) === -1 ?\n 'None' : this.customTimelineSettings.bottomTier.unit;\n }\n this.topTier = this.customTimelineSettings.topTier.unit;\n this.bottomTier = this.customTimelineSettings.bottomTier.unit;\n this.previousIsSingleTier = this.isSingleTier;\n this.isSingleTier = this.topTier === 'None' || this.bottomTier === 'None' ? true : false;\n };\n /**\n * To validate timeline properties.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.processTimelineProperty = function () {\n this.customTimelineSettings.topTier.count = (this.topTier === 'None') ?\n 1 : this.validateCount(this.customTimelineSettings.topTier.unit, this.customTimelineSettings.topTier.count, 'topTier');\n this.customTimelineSettings.bottomTier.count = this.customTimelineSettings.bottomTier.unit === 'None' ?\n 1 : this.validateCount(this.customTimelineSettings.bottomTier.unit, this.customTimelineSettings.bottomTier.count, 'bottomTier');\n this.customTimelineSettings.bottomTier.format = this.validateFormat(this.customTimelineSettings.bottomTier.unit, this.customTimelineSettings.bottomTier.format);\n this.customTimelineSettings.topTier.format = this.validateFormat(this.topTier, this.customTimelineSettings.topTier.format);\n this.customTimelineSettings.weekStartDay = this.customTimelineSettings.weekStartDay >= 0 &&\n this.customTimelineSettings.weekStartDay <= 6 ? this.customTimelineSettings.weekStartDay : 0;\n this.checkCurrentZoomingLevel();\n };\n /**\n * To find the current zooming level of the Gantt control.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.calculateZoomingLevelsPerDayWidth = function () {\n var collections = this.parent.zoomingLevels;\n for (var i = 0; i < collections.length; i++) {\n var perDayWidth = this.getPerDayWidth(collections[i].timelineUnitSize, collections[i].bottomTier.count, collections[i].bottomTier.unit);\n collections[i].perDayWidth = perDayWidth;\n }\n };\n /**\n * To find the current zooming level of the Gantt control.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.checkCurrentZoomingLevel = function () {\n var count = this.customTimelineSettings.bottomTier.unit !== 'None' ?\n this.customTimelineSettings.bottomTier.count : this.customTimelineSettings.topTier.count;\n var unit = this.customTimelineSettings.bottomTier.unit !== 'None' ?\n this.customTimelineSettings.bottomTier.unit : this.customTimelineSettings.topTier.unit;\n var tier = this.customTimelineSettings.bottomTier.unit !== 'None' ?\n \"bottomTier\" : \"topTier\";\n var zoomLevel = this.getCurrentZoomingLevel(unit, count, tier);\n if (this.parent.toolbarModule) {\n if (zoomLevel === this.parent.zoomingLevels[this.parent.zoomingLevels.length - 1].level) {\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomin'], false);\n }\n else if (zoomLevel === this.parent.zoomingLevels[0].level) {\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomout'], false);\n }\n }\n this.parent.currentZoomingLevel = this.parent.zoomingLevels[zoomLevel];\n return zoomLevel;\n };\n /**\n * @param {string} unit .\n * @param {number} count .\n * @returns {number} .\n * @private\n */\n Timeline.prototype.getCurrentZoomingLevel = function (unit, count, tier) {\n var level;\n var currentZoomCollection;\n var checkSameCountLevels;\n var secondValue;\n var firstValue;\n if (!this.parent.zoomingLevels.length) {\n this.parent.zoomingLevels = this.parent.getZoomingLevels();\n }\n var sameUnitLevels = this.parent.zoomingLevels.filter(function (tempLevel) {\n if (tier === \"bottomTier\") {\n return tempLevel.bottomTier.unit === unit;\n }\n else {\n return tempLevel.topTier.unit === unit;\n }\n });\n if (sameUnitLevels.length === 0) {\n var closestUnit_1 = this.getClosestUnit(unit, '', false);\n sameUnitLevels = this.parent.zoomingLevels.filter(function (tempLevel) {\n if (tier === \"bottomTier\") {\n return tempLevel.bottomTier.unit === closestUnit_1;\n }\n else {\n return tempLevel.topTier.unit === closestUnit_1;\n }\n });\n }\n var sortedUnitLevels = sameUnitLevels.sort(function (a, b) {\n if (tier === \"bottomTier\") {\n return (!a.bottomTier.count || !b.bottomTier.count) ? 0 : ((a.bottomTier.count < b.bottomTier.count) ? 1 : -1);\n }\n else {\n return (!a.topTier.count || !b.topTier.count) ? 0 : ((a.topTier.count < b.topTier.count) ? 1 : -1);\n }\n });\n for (var i = 0; i < sortedUnitLevels.length; i++) {\n firstValue = sortedUnitLevels[i];\n if (i === sortedUnitLevels.length - 1) {\n level = sortedUnitLevels[i].level;\n break;\n }\n else {\n secondValue = sortedUnitLevels[i + 1];\n }\n if (count >= firstValue[\"\" + tier].count) {\n currentZoomCollection = sortedUnitLevels[i];\n checkSameCountLevels = sortedUnitLevels.filter(function (tempLevel) {\n if (tier === \"bottomTier\") {\n return tempLevel.bottomTier.count === currentZoomCollection.bottomTier.count;\n }\n else {\n return tempLevel.topTier.count === currentZoomCollection.topTier.count;\n }\n });\n if (checkSameCountLevels.length > 1) {\n level = this.checkCollectionsWidth(checkSameCountLevels);\n }\n else {\n level = checkSameCountLevels[0].level;\n }\n break;\n }\n else if (count < firstValue[\"\" + tier].count && count > secondValue[\"\" + tier].count) {\n currentZoomCollection = sortedUnitLevels[i + 1];\n checkSameCountLevels = sortedUnitLevels.filter(function (tempLevel) {\n if (tier === \"bottomTier\") {\n return tempLevel.bottomTier.count === currentZoomCollection.bottomTier.count;\n }\n else {\n return tempLevel.topTier.count === currentZoomCollection.topTier.count;\n }\n });\n if (checkSameCountLevels.length > 1) {\n level = this.checkCollectionsWidth(checkSameCountLevels);\n }\n else {\n level = checkSameCountLevels[0].level;\n }\n break;\n }\n }\n return level;\n };\n /**\n * Getting closest zooimg level.\n *\n * @param {string} unit .\n * @param {string} closetUnit .\n * @param {boolean} isCont .\n * @returns {string} .\n * @private\n */\n Timeline.prototype.getClosestUnit = function (unit, closetUnit, isCont) {\n var bottomTierUnits = ['Year', 'Month', 'Week', 'Day', 'Hour', 'Minutes'];\n var index = bottomTierUnits.indexOf(unit);\n if (index === 0) {\n isCont = true;\n }\n if (this.isZoomIn || isCont) {\n unit = bottomTierUnits[index + 1];\n }\n else {\n unit = bottomTierUnits[index - 1];\n }\n var sameUnitLevels = this.parent.zoomingLevels.filter(function (tempLevel) {\n return tempLevel.bottomTier.unit === unit;\n });\n if (sameUnitLevels.length === 0) {\n if (unit === 'Year') {\n isCont = true;\n }\n closetUnit = unit;\n return this.getClosestUnit(unit, closetUnit, isCont);\n }\n else {\n return unit;\n }\n };\n Timeline.prototype.checkCollectionsWidth = function (checkSameLevels) {\n var zoomLevels = checkSameLevels;\n var width = this.customTimelineSettings.timelineUnitSize;\n var level;\n var secondValue;\n var firstValue;\n var sortedZoomLevels = zoomLevels.sort(function (a, b) {\n return (a.timelineUnitSize < b.timelineUnitSize) ? 1 : -1;\n });\n for (var i = 0; i < sortedZoomLevels.length; i++) {\n firstValue = sortedZoomLevels[i];\n if (i === sortedZoomLevels.length - 1) {\n level = sortedZoomLevels[i].level;\n break;\n }\n else {\n secondValue = sortedZoomLevels[i + 1];\n }\n if (width >= firstValue.timelineUnitSize) {\n level = sortedZoomLevels[i].level;\n break;\n }\n else if (width < firstValue.timelineUnitSize && width > secondValue.timelineUnitSize) {\n level = sortedZoomLevels[i + 1].level;\n break;\n }\n }\n return level;\n };\n /**\n * To create timeline header template.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.updateTimelineHeaderHeight = function () {\n if (this.parent.timelineModule.isSingleTier) {\n addClass([this.parent.ganttChartModule.chartTimelineContainer], cls.timelineSingleHeaderOuterDiv);\n if (this.parent.treeGrid.element) {\n addClass(this.parent.treeGrid.element.querySelectorAll('.e-headercell'), cls.timelineSingleHeaderOuterDiv);\n addClass(this.parent.treeGrid.element.querySelectorAll('.e-columnheader'), cls.timelineSingleHeaderOuterDiv);\n }\n }\n else {\n removeClass([this.parent.ganttChartModule.chartTimelineContainer], cls.timelineSingleHeaderOuterDiv);\n if (this.parent.treeGrid.element) {\n removeClass(this.parent.treeGrid.element.querySelectorAll('.e-headercell'), cls.timelineSingleHeaderOuterDiv);\n removeClass(this.parent.treeGrid.element.querySelectorAll('.e-columnheader'), cls.timelineSingleHeaderOuterDiv);\n }\n }\n if (this.previousIsSingleTier !== this.isSingleTier) {\n var toolbarHeight = 0;\n if (!isNullOrUndefined(this.parent.toolbarModule) && !isNullOrUndefined(this.parent.toolbarModule.element)) {\n toolbarHeight = this.parent.toolbarModule.element.offsetHeight;\n }\n this.parent.ganttChartModule.scrollObject.\n setHeight(this.parent.ganttHeight - this.parent.ganttChartModule.chartTimelineContainer.offsetHeight - toolbarHeight);\n this.parent.treeGrid.height = this.parent.ganttHeight - toolbarHeight -\n this.parent.ganttChartModule.chartTimelineContainer.offsetHeight;\n }\n };\n /**\n * To create timeline header template.\n *\n * @returns {void}\n * @private\n */\n Timeline.prototype.createTimelineSeries = function () {\n var tr;\n var td;\n var div;\n var table;\n var thead;\n var loopCount = this.isSingleTier ? 1 : 2;\n var tier = this.topTier === 'None' ? 'bottomTier' : 'topTier';\n this.updateTimelineHeaderHeight();\n this.topTierCollection = [];\n this.bottomTierCollection = [];\n for (var count = 0; count < loopCount; count++) {\n table = createElement('table', { className: cls.timelineHeaderTableContainer, styles: 'display: block;' });\n thead = createElement('thead', { className: cls.timelineHeaderTableBody, styles: 'display:block; border-collapse:collapse' });\n tr = createElement('tr', { innerHTML: this.createTimelineTemplate(tier) });\n td = createElement('th');\n div = createElement('div', { styles: 'width: 20px' });\n td.appendChild(div);\n tr.appendChild(td);\n thead.appendChild(tr);\n table.appendChild(thead);\n this.parent.ganttChartModule.chartTimelineContainer.appendChild(table);\n tier = 'bottomTier';\n tr = null;\n }\n if (this.parent.height === \"Auto\" || this.parent.timelineModule.isSingleTier) {\n var timelineContainer = this.parent.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'];\n this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';\n if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-gridcontent')[0])) {\n this.parent.treeGrid.element.getElementsByClassName('e-gridcontent')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';\n }\n }\n };\n /**\n * To validate timeline tier count.\n *\n * @param {string} mode .\n * @param {number} count .\n * @param {string} tier .\n * @returns {number} .\n * @private\n */\n Timeline.prototype.validateCount = function (mode, count, tier) {\n var tierCount = !isNullOrUndefined(count) && parseInt(count.toString(), 10) > 0 ? parseInt(count.toString(), 10) : 1;\n var timeDifference = Math.abs(this.timelineRoundOffEndDate.getTime() - this.timelineStartDate.getTime());\n var difference;\n switch (mode) {\n case 'Year':\n difference = Math.round((timeDifference / (1000 * 3600 * 24)) / (12 * 28));\n tierCount = tierCount <= difference ? tierCount : difference > 0 ? difference : 1;\n if (this.topTier !== 'None' && tier === 'bottomTier') {\n tierCount = this.validateBottomTierCount(mode, tierCount);\n }\n break;\n case 'Month':\n difference = Math.round((timeDifference / (1000 * 3600 * 24)) / 28);\n tierCount = tierCount <= difference ? tierCount : difference > 0 ? (difference + 1) : 1;\n if (this.topTier !== 'None' && tier === 'bottomTier') {\n tierCount = this.validateBottomTierCount(mode, tierCount);\n }\n break;\n case 'Week':\n difference = Math.round((timeDifference / (1000 * 3600 * 24)) / 7);\n tierCount = tierCount <= difference ? tierCount : difference > 0 ? difference : 1;\n if (this.topTier !== 'None' && tier === 'bottomTier') {\n tierCount = this.validateBottomTierCount(mode, tierCount);\n }\n break;\n case 'Day':\n difference = Math.round(timeDifference / (1000 * 3600 * 24));\n tierCount = tierCount <= difference ? tierCount : difference > 0 ? difference : 1;\n if (this.topTier !== 'None' && tier === 'bottomTier') {\n tierCount = this.validateBottomTierCount(mode, tierCount);\n }\n break;\n case 'Hour':\n difference = Math.round(timeDifference / (1000 * 3600));\n tierCount = tierCount <= difference ? tierCount : difference > 0 ? difference : 1;\n if (this.topTier !== 'None' && tier === 'bottomTier') {\n tierCount = this.validateBottomTierCount(mode, tierCount);\n }\n break;\n case 'Minutes':\n difference = Math.round(timeDifference / (1000 * 60));\n tierCount = tierCount <= difference ? tierCount : difference > 0 ? difference : 1;\n if (this.topTier !== 'None' && tier === 'bottomTier') {\n tierCount = this.validateBottomTierCount(mode, tierCount);\n }\n break;\n }\n if (count !== tierCount && this.isZooming && this.parent.toolbarModule && (tier === 'bottomTier' || this.isSingleTier)) {\n if (this.isZoomIn) {\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomin'], false);\n }\n else {\n this.parent.toolbarModule.enableItems([this.parent.controlId + '_zoomout'], false);\n }\n }\n return tierCount;\n };\n /**\n * To validate bottom tier count.\n *\n * @param {string} mode .\n * @param {number} tierCount .\n * @returns {number} .\n * @private\n */\n Timeline.prototype.validateBottomTierCount = function (mode, tierCount) {\n var count;\n switch (mode) {\n case 'Year':\n count = tierCount <= this.customTimelineSettings.topTier.count ?\n tierCount : this.customTimelineSettings.topTier.count;\n break;\n case 'Month':\n count = this.topTier === 'Year' ? tierCount <= (this.customTimelineSettings.topTier.count * 12) ?\n tierCount : (this.customTimelineSettings.topTier.count * 12) :\n tierCount <= this.customTimelineSettings.topTier.count ?\n tierCount : this.customTimelineSettings.topTier.count;\n break;\n case 'Week':\n count = this.topTier === 'Year' ? tierCount <= (this.customTimelineSettings.topTier.count * (12 * 4)) ?\n tierCount : (this.customTimelineSettings.topTier.count * (12 * 4)) :\n this.topTier === 'Month' ? tierCount <= (this.customTimelineSettings.topTier.count * 4) ?\n tierCount : (this.customTimelineSettings.topTier.count * 4) :\n tierCount <= this.customTimelineSettings.topTier.count ?\n tierCount : this.customTimelineSettings.topTier.count;\n break;\n case 'Day':\n count = this.topTier === 'Year' ? tierCount <= (this.customTimelineSettings.topTier.count * (12 * 28)) ?\n tierCount : (this.customTimelineSettings.topTier.count * (12 * 28)) :\n this.topTier === 'Month' ? tierCount <= (this.customTimelineSettings.topTier.count * 28) ?\n tierCount : (this.customTimelineSettings.topTier.count * 28) :\n this.topTier === 'Week' ? tierCount <= (this.customTimelineSettings.topTier.count * 7) ?\n tierCount : (this.customTimelineSettings.topTier.count * 7) :\n tierCount <= this.customTimelineSettings.topTier.count ? tierCount : this.customTimelineSettings.topTier.count;\n break;\n case 'Hour':\n count = this.topTier === 'Year' ? tierCount <= (this.customTimelineSettings.topTier.count * (12 * 28 * 24)) ?\n tierCount : (this.customTimelineSettings.topTier.count * (12 * 28 * 24)) :\n this.topTier === 'Month' ? tierCount <= (this.customTimelineSettings.topTier.count * (28 * 24)) ?\n tierCount : (this.customTimelineSettings.topTier.count * (28 * 24)) :\n this.topTier === 'Week' ? tierCount <= (this.customTimelineSettings.topTier.count * 7 * 24) ?\n tierCount : (this.customTimelineSettings.topTier.count * 7 * 24) :\n this.topTier === 'Day' ? tierCount <= (this.customTimelineSettings.topTier.count * 24) ?\n tierCount : (this.customTimelineSettings.topTier.count * 24) :\n tierCount <= this.customTimelineSettings.topTier.count ?\n tierCount : this.customTimelineSettings.topTier.count;\n break;\n case 'Minutes':\n count = this.topTier === 'Year' ? tierCount <= (this.customTimelineSettings.topTier.count * (12 * 28 * 24 * 60)) ?\n tierCount : (this.customTimelineSettings.topTier.count * (12 * 28 * 24 * 60)) :\n this.topTier === 'Month' ? tierCount <= (this.customTimelineSettings.topTier.count * (28 * 24 * 60)) ?\n tierCount : (this.customTimelineSettings.topTier.count * (28 * 24 * 60)) :\n this.topTier === 'Week' ? tierCount <= (this.customTimelineSettings.topTier.count * 7 * 24 * 60) ?\n tierCount : (this.customTimelineSettings.topTier.count * 7 * 24 * 60) :\n this.topTier === 'Day' ? tierCount <= (this.customTimelineSettings.topTier.count * 24 * 60) ?\n tierCount : (this.customTimelineSettings.topTier.count * 24 * 60) :\n this.topTier === 'Hour' ? tierCount <= (this.customTimelineSettings.topTier.count * 60) ?\n tierCount : (this.customTimelineSettings.topTier.count * 60) :\n tierCount <= this.customTimelineSettings.topTier.count ?\n tierCount : this.customTimelineSettings.topTier.count;\n break;\n }\n return count;\n };\n /**\n * To validate timeline tier format.\n *\n * @param {string} mode .\n * @param {string} format .\n * @returns {string} .\n * @private\n */\n Timeline.prototype.validateFormat = function (mode, format) {\n var tierFormat;\n switch (mode) {\n case 'Week':\n tierFormat = !format ? 'MMM dd, yyyy' : format;\n break;\n case 'Day':\n case 'None':\n tierFormat = !format ? '' : format;\n break;\n case 'Hour':\n tierFormat = !format ? 'H' : format;\n break;\n case 'Month':\n tierFormat = !format ? 'MMM yyyy' : format;\n break;\n case 'Year':\n tierFormat = !format ? 'yyyy' : format;\n break;\n case 'Minutes':\n tierFormat = !format ? 'm' : format;\n break;\n }\n return tierFormat;\n };\n /**\n * To perform extend operation.\n *\n * @param {object} cloneObj .\n * @param {string[]} propertyCollection .\n * @param {object} innerProperty .\n * @returns {object} .\n * @private\n */\n Timeline.prototype.extendFunction = function (cloneObj, propertyCollection, innerProperty) {\n var _this = this;\n var tempObj = {};\n for (var index = 0; index < propertyCollection.length; index++) {\n tempObj[propertyCollection[index]] = cloneObj[propertyCollection[index]];\n }\n if (innerProperty) {\n Object.keys(innerProperty).forEach(function (key) {\n tempObj[key] = _this.extendFunction(cloneObj[key], innerProperty[key], null);\n });\n }\n return tempObj;\n };\n /**\n * To format date.\n *\n * @param {string} dayFormat .\n * @param {Date} data .\n * @returns {string} .\n * @private\n */\n Timeline.prototype.formatDateHeader = function (dayFormat, data) {\n var date = new Date(data.getTime());\n var dateString;\n if (dayFormat === '') {\n dateString = this.parent.globalize.formatDate(date, { format: 'E' });\n if (this.parent.locale === 'zh') {\n dateString = dateString.slice(1);\n }\n else {\n dateString = dateString.slice(0, 1);\n }\n }\n else {\n dateString = this.parent.globalize.formatDate(date, { format: dayFormat });\n }\n return dateString;\n };\n /**\n * Custom Formatting.\n *\n * @param {Date} date .\n * @param {string} format .\n * @param {string} tier .\n * @param {string} mode .\n * @param {string | ITimelineFormatter} formatter .\n * @returns {string} .\n * @private\n */\n Timeline.prototype.customFormat = function (date, format, tier, mode, formatter) {\n formatter = (typeof formatter === 'string' ? getValue(formatter, window) : formatter);\n return formatter(date, format, tier, mode);\n };\n /**\n * To create timeline template .\n *\n * @param {string} tier .\n * @returns {string} .\n * @private\n */\n Timeline.prototype.createTimelineTemplate = function (tier) {\n var isFirstCell = false;\n var parent = this.parent;\n var parentTh = '';\n var parentTr = '';\n var mode = tier === 'topTier' ?\n parent.timelineModule.customTimelineSettings.topTier.unit : parent.timelineModule.customTimelineSettings.bottomTier.unit;\n var count = tier === 'topTier' ? parent.timelineModule.customTimelineSettings.topTier.count :\n parent.timelineModule.customTimelineSettings.bottomTier.count;\n var increment;\n var newTime;\n var startDate = new Date(this.parent.timelineModule.timelineStartDate.toString());\n var endDate = new Date(this.timelineRoundOffEndDate.toString());\n var scheduleDateCollection = [];\n do {\n // PDf export collection\n var timelineCell = {};\n timelineCell.startDate = new Date(startDate.getTime());\n if (mode === 'Month' && tier === 'bottomTier' && (count != 1) && scheduleDateCollection.length === 0) {\n isFirstCell = true;\n }\n parentTr = this.getHeaterTemplateString(new Date(startDate.toString()), mode, tier, false, count, timelineCell, isFirstCell);\n scheduleDateCollection.push(new Date(startDate.toString()));\n if (isFirstCell) {\n newTime = this.calculateQuarterEndDate(startDate, count).getTime();\n }\n else {\n increment = this.getIncrement(startDate, count, mode);\n newTime = startDate.getTime() + increment;\n }\n isFirstCell = false;\n startDate.setTime(newTime);\n if (startDate.getHours() === 5 && count === 2 && tier === 'bottomTier' &&\n this.parent.timelineSettings.bottomTier.unit === 'Hour') {\n startDate.setTime(startDate.getTime() - (1000 * 60 * 60));\n }\n if (startDate >= endDate) {\n /* eslint-disable-next-line */\n parentTr = this.getHeaterTemplateString(scheduleDateCollection[scheduleDateCollection.length - 1], mode, tier, true, count, timelineCell);\n }\n parentTh = parentTh + parentTr;\n var tierCollection = tier === 'topTier' ? this.topTierCollection : this.bottomTierCollection;\n timelineCell.endDate = new Date(startDate.getTime());\n tierCollection.push(timelineCell);\n } while ((startDate < endDate));\n return parentTh;\n };\n Timeline.prototype.updateTimelineAfterZooming = function (endDate, resized) {\n var timeDiff;\n var perDayWidth;\n var totWidth;\n var contentElement = document.getElementsByClassName('e-chart-scroll-container e-content')[0];\n if (!isNullOrUndefined(contentElement)) {\n var contentWidth = contentElement['offsetWidth'];\n var contentHeight = contentElement['offsetHeight'];\n var scrollHeight = document.getElementsByClassName('e-chart-rows-container')[0]['offsetHeight'];\n timeDiff = Math.abs(this.timelineStartDate.getTime() - endDate.getTime());\n timeDiff = timeDiff / (1000 * 3600 * 24);\n if (this.bottomTier === 'None') {\n perDayWidth = this.getPerDayWidth(this.customTimelineSettings.timelineUnitSize, this.customTimelineSettings.topTier.count, this.topTier);\n }\n else {\n perDayWidth = this.getPerDayWidth(this.customTimelineSettings.timelineUnitSize, this.customTimelineSettings.bottomTier.count, this.bottomTier);\n }\n if (contentHeight < scrollHeight) {\n totWidth = (perDayWidth * timeDiff) + 17;\n }\n else {\n totWidth = (perDayWidth * timeDiff);\n }\n if (contentWidth >= totWidth) {\n var widthDiff = contentWidth - totWidth;\n widthDiff = Math.round(widthDiff / perDayWidth);\n endDate.setDate(endDate.getDate() + widthDiff);\n this.parent.timelineModule.timelineEndDate = endDate;\n if (resized) {\n this.parent.updateProjectDates(this.timelineStartDate, this.timelineEndDate, this.parent.isTimelineRoundOff);\n }\n }\n }\n };\n Timeline.prototype.getTimelineRoundOffEndDate = function (date) {\n var tierMode = this.topTier === 'None' ? this.bottomTier : this.topTier;\n var endDate = new Date(date.toString());\n if (this.parent.isTimelineRoundOff) {\n if (tierMode === 'Hour') {\n endDate.setMinutes(60);\n }\n else if (tierMode === 'Minutes') {\n endDate.setSeconds(60);\n }\n else {\n endDate.setHours(24, 0, 0, 0);\n }\n }\n if (isNullOrUndefined(this.parent.projectEndDate)) {\n this.updateTimelineAfterZooming(endDate, false);\n }\n return endDate;\n };\n /**\n *\n * @param {Date} startDate .\n * @param {number} count .\n * @param {string} mode .\n * @returns {number} .\n * @private\n */\n Timeline.prototype.getIncrement = function (startDate, count, mode) {\n var firstDay = new Date(startDate.getTime());\n var lastDay = new Date(startDate.getTime());\n var increment;\n switch (mode) {\n case 'Year':\n firstDay = startDate;\n lastDay = new Date(startDate.getFullYear() + (count - 1), 11, 31);\n increment = (lastDay.getTime() - firstDay.getTime()) + (1000 * 60 * 60 * 24);\n break;\n case 'Month':\n firstDay = startDate;\n lastDay = new Date(startDate.getFullYear(), startDate.getMonth() + count, 1);\n increment = lastDay.getTime() - firstDay.getTime();\n break;\n case 'Week':\n {\n var dayIndex = this.parent.timelineModule.customTimelineSettings.weekStartDay;\n var dayIntervel = startDate.getDay() < dayIndex ? (dayIndex - startDate.getDay()) :\n (6 - startDate.getDay()) + dayIndex;\n count = dayIntervel > 0 ? count - 1 : 0;\n lastDay.setHours(24, 0, 0, 0);\n dayIntervel = startDate.getDay() < dayIndex ? dayIntervel > 0 ?\n dayIntervel - 1 : dayIntervel : dayIntervel;\n lastDay.setDate(lastDay.getDate() + (dayIntervel + (7 * count)));\n increment = lastDay.getTime() - firstDay.getTime();\n break;\n }\n case 'Day':\n lastDay.setHours(24, 0, 0, 0);\n increment = (lastDay.getTime() - firstDay.getTime()) + (1000 * 60 * 60 * 24 * (count - 1));\n break;\n case 'Hour':\n lastDay.setMinutes(60);\n lastDay.setSeconds(0);\n increment = (lastDay.getTime() - firstDay.getTime()) + (1000 * 60 * 60 * (count - 1));\n increment = this.checkDate(firstDay, lastDay, increment, count);\n break;\n case 'Minutes':\n lastDay.setSeconds(60);\n increment = (lastDay.getTime() - firstDay.getTime()) + (1000 * 60 * (count - 1));\n break;\n }\n return increment;\n };\n Timeline.prototype.checkDate = function (firstDay, lastDay, increment, count) {\n var date = new Date(firstDay.getTime());\n date.setTime(date.getTime() + increment);\n if (count !== 1 && ((date.getTime() - lastDay.getTime()) / (1000 * 60 * 60)) != count && (firstDay.getTimezoneOffset() !== date.getTimezoneOffset())) {\n var diffCount = count - (date.getTime() - lastDay.getTime()) / (1000 * 60 * 60);\n if (!this.parent.isInDst(date)) {\n increment += (1000 * 60 * 60 * diffCount);\n }\n else if (this.parent.isInDst(date) && count !== 2) {\n increment -= (1000 * 60 * 60 * diffCount);\n }\n }\n return increment;\n };\n /**\n * Method to find header cell was weekend or not\n *\n * @param {string} mode .\n * @param {string} tier .\n * @param {Date} day .\n * @returns {boolean} .\n */\n Timeline.prototype.isWeekendHeaderCell = function (mode, tier, day) {\n return (mode === 'Day' || mode === 'Hour' || mode === 'Minutes') && (this.customTimelineSettings[tier].count === 1 ||\n mode === 'Hour' || mode === 'Minutes') &&\n this.parent.nonWorkingDayIndex.indexOf(day.getDay()) !== -1;\n };\n Timeline.prototype.calculateQuarterEndDate = function (date, count) {\n var month = date.getMonth();\n if (count === 3) {\n if (month >= 0 && month <= 2) {\n return new Date(date.getFullYear(), 3, 1);\n }\n else if (month >= 3 && month <= 5) {\n return new Date(date.getFullYear(), 6, 1);\n }\n else if (month >= 6 && month <= 8) {\n return new Date(date.getFullYear(), 9, 1);\n }\n else {\n return new Date(date.getFullYear() + 1, 0, 1);\n }\n }\n else {\n if (month >= 0 && month <= 5) {\n return new Date(date.getFullYear(), 6, 1);\n }\n else {\n return new Date(date.getFullYear() + 1, 0, 1);\n }\n }\n };\n /**\n * To construct template string.\n *\n * @param {Date} scheduleWeeks .\n * @param {string} mode .\n * @param {string} tier .\n * @param {boolean} isLast .\n * @param {number} count .\n * @param {TimelineFormat} timelineCell .\n * @returns {string} .\n * @private\n */\n /* eslint-disable-next-line */\n Timeline.prototype.getHeaterTemplateString = function (scheduleWeeks, mode, tier, isLast, count, timelineCell, isFirstCell) {\n var parentTr = '';\n var td = '';\n var format = tier === 'topTier' ?\n this.parent.timelineModule.customTimelineSettings.topTier.format :\n this.parent.timelineModule.customTimelineSettings.bottomTier.format;\n var formatter = tier === 'topTier' ?\n this.parent.timelineModule.customTimelineSettings.topTier.formatter :\n this.parent.timelineModule.customTimelineSettings.bottomTier.formatter;\n var thWidth;\n var date = isNullOrUndefined(formatter) ?\n this.parent.globalize.formatDate(scheduleWeeks, { format: this.parent.getDateFormat() }) :\n this.customFormat(scheduleWeeks, format, tier, mode, formatter);\n thWidth = (this.getIncrement(scheduleWeeks, count, mode) / (1000 * 60 * 60 * 24)) * this.parent.perDayWidth;\n var cellWidth = thWidth;\n thWidth = isLast || isFirstCell ? isLast ? this.calculateWidthBetweenTwoDate(mode, scheduleWeeks, this.timelineRoundOffEndDate) : this.calculateWidthBetweenTwoDate(mode, scheduleWeeks, this.calculateQuarterEndDate(scheduleWeeks, count))\n : thWidth;\n var isWeekendCell = this.isWeekendHeaderCell(mode, tier, scheduleWeeks);\n var textClassName = tier === 'topTier' ? ' e-gantt-top-cell-text' : '';\n var value = (isNullOrUndefined(formatter) ? this.formatDateHeader(format, scheduleWeeks) :\n this.customFormat(scheduleWeeks, format, tier, mode, formatter));\n td += this.parent.timelineModule.isSingleTier ?\n '';\n parentTr += td;\n parentTr += '';\n if ((this.isSingleTier || tier === 'topTier') && !isLast) {\n this.totalTimelineWidth = this.totalTimelineWidth + thWidth;\n }\n else if ((this.isSingleTier || tier === 'topTier') && isLast) {\n this.totalTimelineWidth = (this.totalTimelineWidth - cellWidth) + thWidth;\n }\n // PDf export collection\n timelineCell.value = value;\n timelineCell.isWeekend = isWeekendCell;\n timelineCell.width = thWidth;\n return parentTr;\n };\n /**\n * To calculate last 'th' width.\n *\n * @param {string} mode .\n * @param {Date} scheduleWeeks .\n * @param {Date} endDate .\n * @returns {number} .\n * @private\n */\n Timeline.prototype.calculateWidthBetweenTwoDate = function (mode, scheduleWeeks, endDate) {\n var timeDifference = (endDate.getTime() - scheduleWeeks.getTime());\n var balanceDay = (timeDifference / (1000 * 60 * 60 * 24));\n return balanceDay * this.parent.perDayWidth;\n };\n /**\n * To calculate timeline width.\n *\n * @returns {void} .\n * @private\n */\n Timeline.prototype.timelineWidthCalculation = function () {\n var timelineUnitSize = this.customTimelineSettings.timelineUnitSize;\n var bottomTierCount = this.customTimelineSettings.bottomTier.count;\n var topTierCount = this.customTimelineSettings.topTier.count;\n this.bottomTierCellWidth = timelineUnitSize;\n if (this.bottomTier === 'None') {\n this.parent.perDayWidth = this.getPerDayWidth(timelineUnitSize, topTierCount, this.topTier);\n }\n else {\n this.parent.perDayWidth = this.getPerDayWidth(timelineUnitSize, bottomTierCount, this.bottomTier);\n }\n this.topTierCellWidth = this.bottomTier !== 'None' ? this.topTier === 'Week' ?\n this.parent.perDayWidth * 7 : this.topTier === 'Hour' ?\n this.parent.perDayWidth / 24 : this.topTier === 'Minutes' ?\n this.parent.perDayWidth / (24 * 60) : this.parent.perDayWidth : timelineUnitSize;\n this.topTierCellWidth = this.isSingleTier ? this.topTierCellWidth : this.topTierCellWidth * topTierCount;\n };\n /**\n * To validate per day width.\n *\n * @param {number} timelineUnitSize .\n * @param {number} bottomTierCount .\n * @param {string} mode .\n * @returns {number} .\n * @private\n */\n Timeline.prototype.getPerDayWidth = function (timelineUnitSize, bottomTierCount, mode) {\n var perDayWidth;\n switch (mode) {\n case 'Year':\n perDayWidth = (timelineUnitSize / bottomTierCount) / (12 * 28);\n break;\n case 'Month':\n perDayWidth = (timelineUnitSize / bottomTierCount) / 28;\n break;\n case 'Week':\n perDayWidth = (timelineUnitSize / bottomTierCount) / 7;\n break;\n case 'Day':\n perDayWidth = timelineUnitSize / bottomTierCount;\n break;\n case 'Hour':\n perDayWidth = (24 / bottomTierCount) * timelineUnitSize;\n break;\n case 'Minutes':\n perDayWidth = ((60 * 24) / bottomTierCount) * timelineUnitSize;\n break;\n }\n return perDayWidth;\n };\n /**\n * To validate project start date and end date.\n *\n * @returns {void} .\n * @private\n */\n Timeline.prototype.roundOffDays = function () {\n var startDate = this.parent.cloneProjectStartDate;\n var endDate = this.parent.cloneProjectEndDate;\n var tierMode = this.topTier === 'None' ? this.bottomTier : this.topTier;\n if (this.parent.isTimelineRoundOff) {\n if (tierMode === 'Year') {\n startDate = new Date(startDate.getFullYear(), 0, 1);\n endDate = new Date(endDate.getFullYear(), 11, 31);\n }\n else if (tierMode === 'Month') {\n startDate = new Date(startDate.getFullYear(), startDate.getMonth(), 1);\n endDate = new Date(endDate.getFullYear(), endDate.getMonth() + 1, 0);\n }\n else if (tierMode === 'Week') {\n var dayIndex = this.parent.timelineModule.customTimelineSettings.weekStartDay;\n var roundOffStartDate = startDate.getDay() < dayIndex ?\n (startDate.getDate()) - (7 - dayIndex + startDate.getDay()) :\n (startDate.getDate()) - startDate.getDay() + dayIndex;\n startDate.setDate(roundOffStartDate);\n var first = endDate.getDate() - endDate.getDay();\n var last = first + 6 + dayIndex;\n endDate.setDate(last);\n }\n if (tierMode === 'Hour') {\n startDate.setMinutes(0);\n }\n else if (tierMode === 'Minutes') {\n startDate.setSeconds(0);\n }\n else {\n startDate.setHours(0, 0, 0, 0);\n }\n }\n this.timelineStartDate = startDate;\n this.timelineEndDate = endDate;\n this.timelineRoundOffEndDate = this.getTimelineRoundOffEndDate(this.timelineEndDate);\n };\n /**\n * To validate project start date and end date.\n *\n * @param {string} mode .\n * @param {string} span .\n * @param {Date} startDate .\n * @param {Date} endDate .\n * @returns {void} .\n * @private\n */\n Timeline.prototype.updateScheduleDatesByToolBar = function (mode, span, startDate, endDate) {\n if (mode === 'Year') {\n if (span === 'prevTimeSpan') {\n if (startDate.getMonth() === 0) {\n startDate = new Date(startDate.getFullYear() - 1, 0, 1);\n }\n else {\n startDate = new Date(startDate.getFullYear(), 0, 1);\n }\n }\n else {\n if (endDate.getMonth() === 11) {\n endDate = new Date(endDate.getFullYear() + 1, 0, 1);\n }\n else {\n endDate = new Date(endDate.getFullYear(), 12, 1);\n }\n }\n }\n if (mode === 'Month') {\n if (span === 'prevTimeSpan') {\n if (startDate.getDate() === 1) {\n startDate = new Date(startDate.getFullYear(), startDate.getMonth() - 1, 1);\n }\n else {\n startDate = new Date(startDate.getFullYear(), startDate.getMonth(), 1);\n }\n }\n else {\n endDate = new Date(endDate.getFullYear(), endDate.getMonth() + 1, 1);\n }\n }\n if (mode === 'Week') {\n var dayIndex = this.parent.timelineModule.customTimelineSettings.weekStartDay;\n var dayIntervel = void 0;\n if (span === 'prevTimeSpan') {\n dayIntervel = startDate.getDay() < dayIndex ? 7 - (dayIndex - startDate.getDay()) :\n startDate.getDay() - dayIndex;\n startDate.setHours(0, 0, 0, 0);\n if (dayIntervel === 0) {\n startDate.setDate(startDate.getDate() - 7);\n }\n else {\n startDate.setDate(startDate.getDate() - dayIntervel);\n }\n }\n else {\n dayIntervel = endDate.getDay() < dayIndex ? (dayIndex - endDate.getDay()) :\n (7 - endDate.getDay()) + dayIndex;\n endDate.setHours(0, 0, 0, 0);\n if (dayIntervel === 0) {\n endDate.setDate(endDate.getDate() + 6);\n }\n else {\n endDate.setDate(endDate.getDate() + dayIntervel);\n }\n }\n }\n if (mode === 'Day') {\n if (span === 'prevTimeSpan') {\n if (startDate.getHours() === 0) {\n startDate.setTime(startDate.getTime() - (1000 * 60 * 60 * 24));\n }\n else {\n startDate.setHours(0);\n }\n }\n else {\n if (endDate.getHours() === 0) {\n endDate.setTime(endDate.getTime() + (1000 * 60 * 60 * 24));\n }\n else {\n endDate.setHours(24);\n }\n }\n }\n if (mode === 'Hour') {\n if (span === 'prevTimeSpan') {\n if (startDate.getMinutes() === 0) {\n startDate.setTime(startDate.getTime() - (1000 * 60 * 60));\n }\n else {\n startDate.setMinutes(0);\n }\n }\n else {\n if (endDate.getMinutes() === 0) {\n endDate.setTime(endDate.getTime() + (1000 * 60 * 60));\n }\n else {\n endDate.setMinutes(60);\n }\n }\n }\n if (mode === 'Minutes') {\n if (span === 'prevTimeSpan') {\n if (startDate.getSeconds() === 0) {\n startDate.setTime(startDate.getTime() - (1000 * 60));\n }\n else {\n startDate.setSeconds(0);\n }\n }\n else {\n if (endDate.getSeconds() === 0) {\n endDate.setTime(endDate.getTime() + (1000 * 60));\n }\n else {\n endDate.setSeconds(60);\n }\n }\n }\n this.parent.cloneProjectStartDate = startDate;\n this.parent.cloneProjectEndDate = endDate;\n };\n /**\n * To validate project start date and end date.\n *\n * @param {IGanttData[]} tempArray .\n * @param {string} action .\n * @returns {void} .\n * @private\n */\n Timeline.prototype.updateTimeLineOnEditing = function (tempArray, action) {\n if (tempArray[0].length >= 1) {\n for (var i = 0; i < tempArray.length; i++) {\n /* eslint-disable-next-line */\n var temp = tempArray[i];\n var filteredStartDateRecord = temp.filter(function (pdc) { return !isNullOrUndefined(pdc.ganttProperties.startDate); });\n var filteredEndDateRecord = temp.filter(function (pdc) { return !isNullOrUndefined(pdc.ganttProperties.endDate); });\n var minStartDate = filteredStartDateRecord.length > 0 ?\n new Date(DataUtil.aggregates.min(filteredStartDateRecord, 'ganttProperties.startDate')) : null;\n var maxEndDate = filteredEndDateRecord.length > 0 ?\n new Date(DataUtil.aggregates.max(filteredEndDateRecord, 'ganttProperties.endDate')) : null;\n var validStartDate = new Date(this.parent.dataOperation.checkStartDate(this.timelineStartDate).getTime());\n var validEndDate = new Date(this.parent.dataOperation.checkEndDate(this.timelineEndDate).getTime());\n var maxStartLeft = isNullOrUndefined(minStartDate) ?\n null : this.parent.dataOperation.getTaskLeft(minStartDate, false);\n var maxEndLeft = isNullOrUndefined(maxEndDate) ?\n null : this.parent.dataOperation.getTaskLeft(maxEndDate, false);\n var validStartLeft = this.parent.dataOperation.getTaskLeft(validStartDate, false);\n var validEndLeft = this.parent.dataOperation.getTaskLeft(validEndDate, false);\n var isChanged = void 0;\n var taskbarModule = this.parent.editModule.taskbarEditModule;\n if (!isNullOrUndefined(maxStartLeft) && ((minStartDate < this.timelineStartDate) ||\n (!isNullOrUndefined(taskbarModule)) && (!isNullOrUndefined(taskbarModule.taskBarEditAction)\n && taskbarModule.taskBarEditAction !== 'ProgressResizing' &&\n taskbarModule.taskBarEditAction !== 'RightResizing')) && (maxStartLeft < this.bottomTierCellWidth || maxStartLeft <= validStartLeft)) {\n isChanged = 'prevTimeSpan';\n minStartDate = minStartDate > this.timelineStartDate ? this.timelineStartDate : minStartDate;\n }\n else {\n minStartDate = this.timelineStartDate;\n }\n if (!isNullOrUndefined(maxEndLeft) && (maxEndLeft >= (this.totalTimelineWidth - this.bottomTierCellWidth) ||\n maxEndLeft >= validEndLeft)) {\n isChanged = isChanged === 'prevTimeSpan' ? 'both' : 'nextTimeSpan';\n maxEndDate = maxEndDate < this.timelineEndDate ? this.timelineEndDate : maxEndDate;\n }\n else {\n maxEndDate = this.timelineEndDate;\n }\n if (isChanged) {\n this.performTimeSpanAction(isChanged, action, minStartDate, maxEndDate);\n }\n else if (!isNullOrUndefined(temp[0].ganttProperties.segments)) {\n this.parent.dataOperation.updateWidthLeft(temp[0]);\n }\n break;\n }\n }\n };\n /**\n * To validate project start date and end date on editing action\n *\n * @param {string} type .\n * @param {string} isFrom .\n * @param {Date} startDate .\n * @param {Date} endDate .\n * @param {string} mode .\n * @returns {void} .\n * @private\n */\n Timeline.prototype.performTimeSpanAction = function (type, isFrom, startDate, endDate, mode) {\n mode = !isNullOrUndefined(mode) ? mode : this.parent.timelineModule.topTier === 'None' ?\n this.parent.timelineModule.bottomTier : this.parent.timelineModule.topTier;\n var projectStartDate = new Date(this.parent.cloneProjectStartDate.getTime());\n var projectEndDate = new Date(this.parent.cloneProjectEndDate.getTime());\n if (isFrom !== 'publicMethod' && type === 'both') {\n this.updateScheduleDatesByToolBar(mode, 'prevTimeSpan', startDate, endDate);\n this.updateScheduleDatesByToolBar(mode, 'nextTimeSpan', new Date(this.parent.cloneProjectStartDate.getTime()), endDate);\n }\n else {\n this.updateScheduleDatesByToolBar(mode, type, startDate, endDate);\n }\n var args = this.timeSpanActionEvent('actionBegin', type, isFrom);\n if (!args.cancel) {\n this.parent.updateProjectDates(args.projectStartDate, args.ProjectEndDate, args.isTimelineRoundOff, isFrom);\n if (type === 'prevTimeSpan' && isFrom === 'publicMethod') {\n this.parent.ganttChartModule.updateScrollLeft(0);\n this.parent.timelineModule.isZoomToFit = false;\n }\n else if (type === 'nextTimeSpan' && isFrom === 'publicMethod') {\n this.parent.ganttChartModule.updateScrollLeft(this.parent.timelineModule.totalTimelineWidth);\n this.parent.timelineModule.isZoomToFit = false;\n }\n else if (type === 'nextTimeSpan' && isFrom === 'TaskbarEditing') {\n var currentScrollLeft = document.getElementsByClassName('e-chart-scroll-container e-content')[0].scrollLeft;\n this.parent.element.querySelector('.e-timeline-header-container').scrollLeft = currentScrollLeft;\n this.parent.timelineModule.isZoomToFit = false;\n }\n this.parent.timelineModule.timeSpanActionEvent('actionComplete', type, isFrom);\n }\n else {\n this.parent.cloneProjectStartDate = projectStartDate;\n this.parent.cloneProjectEndDate = projectEndDate;\n }\n };\n /**\n * To validate project start date and end date.\n *\n * @param {string} eventType .\n * @param {string} requestType .\n * @param {string} isFrom .\n * @returns {void}\n * @private\n */\n Timeline.prototype.timeSpanActionEvent = function (eventType, requestType, isFrom) {\n var args = {};\n args.projectStartDate = new Date(this.parent.cloneProjectStartDate.getTime());\n args.ProjectEndDate = new Date(this.parent.cloneProjectEndDate.getTime());\n args.requestType = isFrom === 'publicMethod' ? requestType : isFrom === 'beforeAdd' ?\n 'TimelineRefreshOnAdd' : isFrom === 'TaskbarEditing' ? 'TimelineRefreshOnEdit' : requestType;\n if (eventType === 'actionBegin') {\n args.isTimelineRoundOff = this.parent.isTimelineRoundOff;\n args.cancel = false;\n }\n args.action = 'TimescaleUpdate';\n this.parent.trigger(eventType, args);\n return args;\n };\n return Timeline;\n}());\nexport { Timeline };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, Property } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n /**\n * Update the State changes reflected for TreeGrid columndirective in react platform.\n *\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[parseInt(i.toString(), 10)]] = column[keys[parseInt(i.toString(), 10)]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent['isReact'] && keys[parseInt(i.toString(), 10)] === 'template') {\n var refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'].renderModule[\"\" + refreshReactColumnTemplateByUid](this.uid);\n }\n }\n };\n return Column;\n}());\nexport { Column };\n/**\n * Defines TreeGrid column\n */\nvar TreeGridColumn = /** @class */ (function (_super) {\n __extends(TreeGridColumn, _super);\n function TreeGridColumn() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], TreeGridColumn.prototype, \"columns\", void 0);\n return TreeGridColumn;\n}(Column));\nexport { TreeGridColumn };\n/**\n * Defines stacked tree grid column\n */\nvar StackedColumn = /** @class */ (function (_super) {\n __extends(StackedColumn, _super);\n function StackedColumn() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return StackedColumn;\n}(TreeGridColumn));\nexport { StackedColumn };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the Loading Indicator of the Tree Grid.\n */\nvar LoadingIndicator = /** @class */ (function (_super) {\n __extends(LoadingIndicator, _super);\n function LoadingIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Spinner')\n ], LoadingIndicator.prototype, \"indicatorType\", void 0);\n return LoadingIndicator;\n}(ChildProperty));\nexport { LoadingIndicator };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Represents the Tree Grid predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the textwrap behavior of the TreeGrid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n","/**\n *\n * `Logger` class\n */\nimport { isNullOrUndefined, L10n, isUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil, DataManager } from '@syncfusion/ej2-data';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation/grid';\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/';\nvar WARNING = '[EJ2Grid.Warning]';\nvar ERROR = '[EJ2Grid.Error]';\nvar INFO = '[EJ2Grid.Info]';\nvar Logger = /** @class */ (function () {\n function Logger(parent) {\n this.parent = parent;\n this.parent.on('initial-end', this.patchadaptor, this);\n }\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[parseInt(i.toString(), 10)]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n // eslint-disable-next-line no-console\n console[item.logType](item.generateMessage(args, this.parent, cOp.options));\n }\n }\n };\n Logger.prototype.patchadaptor = function () {\n var adaptor = this.parent.getDataModule().dataManager.adaptor;\n var original = adaptor.beforeSend;\n if (original) {\n adaptor.beforeSend = function (dm, request, settings) {\n original.call(adaptor, dm, request, settings);\n };\n }\n };\n Logger.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('initial-end', this.patchadaptor);\n };\n return Logger;\n}());\nexport { Logger };\nexport var detailLists = {\n // eslint-disable-next-line camelcase\n module_missing: {\n type: 'module_missing',\n logType: 'warn',\n check: function (args, parent) {\n var injected = parent.getInjectedModules().map(function (m) { return m.prototype.getModuleName(); });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var modules = parent.requiredModules().map(function (m) { return m.member; })\n .filter(function (name) { return injected.indexOf(name) === -1; });\n return { success: modules.filter(function (m) { return m !== 'resize'; }).length > 0, options: modules };\n },\n generateMessage: function (args, parent, modules) {\n modules = modules.filter(function (m) { return m !== 'resize'; })\n .reduce(function (prev, cur) { return prev + (\"* \" + cur + \"\\n\"); }, '');\n return WARNING + ': MODULES MISSING\\n' + 'The following modules are not injected:.\\n' +\n (\"\" + modules) +\n (\"Refer to \" + BASE_DOC_URL + \"/module.html for documentation on importing feature modules.\");\n }\n },\n // eslint-disable-next-line camelcase\n promise_enabled: {\n type: 'promise_enabled',\n logType: 'error',\n check: function () {\n return { success: typeof Promise === 'undefined' };\n },\n generateMessage: function () {\n return ERROR + ': PROMISE UNDEFINED\\n' +\n 'Promise object is not present in the global environment,' +\n 'please use polyfil to support Promise object in your environment.\\n' +\n (\"Refer to \" + DOC_URL + \"/base/browser.html?#required-polyfills for more information.\");\n }\n },\n // eslint-disable-next-line camelcase\n primary_column_missing: {\n type: 'primary_column_missing',\n logType: 'warn',\n check: function (args, parent) {\n return { success: parent.getColumns().filter(function (column) { return column.isPrimaryKey; }).length === 0 };\n },\n generateMessage: function () {\n return WARNING + ': PRIMARY KEY MISSING\\n' + 'Editing is enabled but primary key column is not specified.\\n' +\n (\"Refer to \" + BASE_DOC_URL + \"/api-column.html?#isprimarykey for documentation on providing primary key columns.\");\n }\n },\n // eslint-disable-next-line camelcase\n selection_key_missing: {\n type: 'selection_key_missing',\n logType: 'warn',\n check: function (args, parent) {\n return { success: parent.selectionSettings.persistSelection &&\n parent.getColumns().filter(function (column) { return column.isPrimaryKey; }).length === 0 };\n },\n generateMessage: function () {\n return WARNING + ': PRIMARY KEY MISSING\\n' +\n 'selectionSettings.persistSelection property is enabled. It requires one primary key column to persist selection.\\n' +\n (\"Refer to \" + BASE_DOC_URL + \"/api-column.html?#isprimarykey for documentation on providing primary key columns.\");\n }\n },\n actionfailure: {\n type: 'actionfailure',\n logType: 'error',\n check: function () {\n return { success: true };\n },\n generateMessage: function (args, parent) {\n var message = '';\n var formatError = formatErrorHandler(args, parent);\n var ajaxError = ajaxErrorHandler(args, parent);\n if (ajaxError !== '') {\n message = ajaxError;\n }\n else if (formatError !== '') {\n message = formatError;\n }\n else {\n message = args.error;\n }\n return WARNING + ': ' + message;\n }\n },\n // eslint-disable-next-line camelcase\n locale_missing: {\n type: 'locale_missing',\n logType: 'warn',\n check: function (args, parent) {\n var lObj = DataUtil.getObject(\"locale.\" + parent.locale + \".grid\", L10n);\n return { success: parent.locale !== 'en-US' && isNullOrUndefined(lObj) };\n },\n generateMessage: function (args, parent) {\n return WARNING + ': LOCALE CONFIG MISSING\\n' + (\"Locale configuration for '\" + parent.locale + \"' is not provided.\\n\") +\n (\"Refer to \" + BASE_DOC_URL + \"/globalization-and-localization.html?#localization \\n for documentation on setting locale configuration.\");\n }\n },\n limitation: {\n type: 'limitation',\n logType: 'warn',\n check: function (args, parent) {\n var name = args;\n var opt;\n switch (name) {\n case 'freeze':\n opt = {\n success: parent.allowGrouping || !isUndefined(parent.detailTemplate) || !isUndefined(parent.childGrid)\n || !isUndefined(parent.rowTemplate) || parent.enableVirtualization,\n options: { name: 'freeze' }\n };\n break;\n case 'virtualization':\n opt = {\n success: !isUndefined(parent.detailTemplate) || !isUndefined(parent.childGrid) || parent.frozenRows !== 0\n || parent.frozenColumns !== 0,\n options: { name: 'virtualization' }\n };\n break;\n default:\n opt = { success: false };\n break;\n }\n return opt;\n },\n generateMessage: function (args, parent, options) {\n var name = options.name;\n var opt;\n switch (name) {\n case 'freeze':\n opt = 'Frozen rows and columns do not support the following features:\\n' +\n '* Virtualization\\n' +\n '* Row Template\\n' +\n '* Details Template\\n' +\n '* Hierarchy Grid\\n' +\n '* Grouping';\n break;\n case 'virtualization':\n opt = 'Virtualization does not support the following features.\\n' +\n '* Freeze rows and columns.\\n' +\n '* Details Template.\\n' +\n '* Hierarchy Grid.\\n';\n break;\n default:\n opt = '';\n break;\n }\n return WARNING + (\": \" + name.toUpperCase() + \" LIMITATIONS\\n\") + opt;\n }\n },\n // eslint-disable-next-line camelcase\n check_datasource_columns: {\n type: 'check_datasource_columns',\n logType: 'warn',\n check: function (args, parent) {\n return { success: !(parent.columns.length ||\n (parent.dataSource instanceof DataManager) || parent.dataSource.length) };\n },\n generateMessage: function () {\n return WARNING + ': GRID CONFIG MISSING\\n' + 'dataSource and columns are not provided in the grid. ' +\n 'At least one of either must be provided for grid configuration.\\n' +\n (\"Refer to \" + BASE_DOC_URL + \"/columns.html for documentation on configuring the grid data and columns.\");\n }\n },\n // eslint-disable-next-line camelcase\n virtual_height: {\n type: 'virtual_height',\n logType: 'error',\n check: function (args, parent) {\n return { success: isNullOrUndefined(parent.height) || parent.height === 'auto' };\n },\n generateMessage: function () {\n return ERROR + ': GRID HEIGHT MISSING \\n' + 'height property is required to use virtualization.\\n' +\n (\"Refer to \" + BASE_DOC_URL + \"/virtual.html for documentation on configuring the virtual grid.\");\n }\n },\n // eslint-disable-next-line camelcase\n grid_remote_edit: {\n type: 'grid_remote_edit',\n logType: 'error',\n check: function (args) {\n return { success: Array.isArray(args) || Array.isArray(args.result) };\n },\n generateMessage: function () {\n return ERROR + ': RETRUN VALUE MISSING \\n' +\n 'Remote service returns invalid data. \\n' +\n (\"Refer to \" + BASE_DOC_URL + \"/edit.html for documentation on configuring editing with remote data.\");\n }\n },\n // eslint-disable-next-line camelcase\n grid_sort_comparer: {\n type: 'grid_sort_comparer',\n logType: 'warn',\n check: function (args, parent) {\n return { success: parent.getDataModule().isRemote() };\n },\n generateMessage: function () {\n return WARNING + ': SORT COMPARER NOT WORKING \\n' + 'Sort comparer will not work with remote data.' +\n (\"Refer to \" + BASE_DOC_URL + \"/sorting/#custom-sort-comparer for documentation on using the sort comparer.\");\n }\n },\n // eslint-disable-next-line camelcase\n resize_min_max: {\n type: 'resize_min_max',\n logType: 'info',\n check: function (args) {\n return { success: (args.column.minWidth && args.column.minWidth >= args.width) ||\n (args.column.maxWidth && args.column.maxWidth <= args.width) };\n },\n generateMessage: function () {\n return INFO + ': RESIZING COLUMN REACHED MIN OR MAX \\n' + 'The column resizing width is at its min or max.';\n }\n },\n // eslint-disable-next-line camelcase\n action_disabled_column: {\n type: 'action_disabled_column',\n logType: 'info',\n check: function (args) {\n var success = true;\n var fn;\n switch (args.moduleName) {\n case 'reorder':\n if (isNullOrUndefined(args.destColumn)) {\n fn = \"reordering action is disabled for the \" + args.column.headerText + \" column\";\n }\n else {\n fn = \"reordering action is disabled for the \" + (args.column.allowReordering ?\n args.destColumn.headerText : args.column.headerText) + \" column\";\n }\n break;\n case 'group':\n fn = \"grouping action is disabled for the \" + args.columnName + \" column.\";\n break;\n case 'filter':\n fn = \"filtering action is disabled for the \" + args.columnName + \" column.\";\n break;\n case 'sort':\n fn = \"sorting action is disabled for the \" + args.columnName + \" column.\";\n break;\n }\n return { success: success, options: { fn: fn } };\n },\n generateMessage: function (args, parent, options) {\n return INFO + (\": ACTION DISABLED \\n \" + options.fn);\n }\n },\n // eslint-disable-next-line camelcase\n exporting_begin: {\n type: 'exporting_begin',\n logType: 'info',\n check: function (args) {\n return { success: true, options: { args: args } };\n },\n generateMessage: function (args, parent, options) {\n return INFO + (\": EXPORTNIG INPROGRESS \\n Grid \" + options.args + \"ing is in progress\");\n }\n },\n // eslint-disable-next-line camelcase\n exporting_complete: {\n type: 'exporting_complete',\n logType: 'info',\n check: function (args) {\n return { success: true, options: { args: args } };\n },\n generateMessage: function (args, parent, options) {\n return INFO + (\": EXPORTNIG COMPLETED \\n Grid \" + options.args + \"ing is complete\");\n }\n },\n // eslint-disable-next-line camelcase\n foreign_key_failure: {\n type: 'foreign_key_failure',\n logType: 'error',\n check: function () {\n return { success: true };\n },\n generateMessage: function () {\n return ERROR + ': FOREIGNKEY CONFIG \\n Grid foreign key column needs a valid data source/service.' +\n (\"Refer to \" + BASE_DOC_URL + \"/columns/#foreign-key-column for documentation on configuring foreign key columns.\");\n }\n },\n // eslint-disable-next-line camelcase\n initial_action: {\n type: 'initial_action',\n logType: 'error',\n check: function (args) {\n var success = true;\n var fn;\n switch (args.moduleName) {\n case 'group':\n fn = \"The \" + args.columnName + \" column is not available in the grid's column model.\" +\n 'Please provide a valid field name to group the column';\n break;\n case 'filter':\n fn = \"The \" + args.columnName + \" column is not available in the grid's column model.\" +\n 'Please provide a valid field name to filter the column.';\n break;\n case 'sort':\n fn = \"The \" + args.columnName + \" column is not available in the grid's column model.\" +\n 'Please provide a valid field name to sort the column.';\n break;\n }\n return { success: success, options: { fn: fn } };\n },\n generateMessage: function (args, parent, options) {\n return ERROR + (\": INITIAL ACTION FAILURE \\n \" + options.fn);\n }\n },\n // eslint-disable-next-line camelcase\n frozen_rows_columns: {\n type: 'frozen_rows_columns',\n logType: 'error',\n check: function (args, parent) {\n return { success: parent.getColumns().length <= parent.frozenColumns || parent.frozenRows >= parent.currentViewData.length };\n },\n generateMessage: function (args, parent) {\n return ERROR + (\": OUT OF RANGE ERROR-\\n \" + (parent.getColumns().length <= parent.frozenColumns ? 'FROZEN COLUMNS,' : '')) +\n ((parent.frozenRows >= parent.currentViewData.length ? 'FROZEN ROWS' : '') + \" invalid\");\n }\n },\n // eslint-disable-next-line camelcase\n column_type_missing: {\n type: 'column_type_missing',\n logType: 'error',\n check: function (args) {\n return { success: isNullOrUndefined(args.column.type), options: args.column.headerText };\n },\n generateMessage: function (args, parent, options) {\n return ERROR + (\": COLUMN TYPE MISSING-\\n \" + options + \" column type was invalid or not defined.\") +\n (\"Please go through below help link: \" + DOC_URL + \"/grid/columns/#column-type\");\n }\n },\n // eslint-disable-next-line camelcase\n datasource_syntax_mismatch: {\n type: 'datasource_syntax_mismatch',\n logType: 'warn',\n check: function (args) {\n return { success: args.dataState.dataSource && !(args.dataState.dataSource instanceof DataManager ||\n 'result' in args.dataState.dataSource || args.dataState.dataSource instanceof Array) &&\n !(isNullOrUndefined(args.dataState.dataStateChange)) };\n },\n generateMessage: function () {\n return WARNING + ': DATASOURCE SYNTAX WARNING\\n' +\n 'DataSource should be in the form of {result: Object[], count: number}' +\n 'when dataStateChangeEvent used';\n }\n }\n};\nvar formatErrorHandler = function (args) {\n var error = args.error;\n if (error.indexOf && error.indexOf('Format options') !== 0) {\n return '';\n }\n return 'INVALID FORMAT\\n' +\n 'For more information, refer to the following documentation links:\\n' +\n (\"Number format: \" + DOC_URL + \"/base/intl.html?#supported-format-string.\\n\") +\n (\"Date format: \" + DOC_URL + \"/base/intl.html?#manipulating-datetime.\\n\") +\n (\"Message: \" + error);\n};\nvar ajaxErrorHandler = function (args) {\n var error = DataUtil.getObject('error.error', args);\n if (isNullOrUndefined(error)) {\n return '';\n }\n var jsonResult = '';\n try {\n jsonResult = JSON.parse(error.responseText);\n }\n catch (_a) {\n jsonResult = '';\n }\n return 'XMLHTTPREQUEST FAILED\\n' +\n (\"Url: \" + error.responseURL + \"\\n\") +\n (\"Status: \" + error.status + \" - \" + error.statusText + \"\\n\") +\n (\"\" + (jsonResult !== '' ? 'Message: ' + jsonResult : ''));\n};\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Logger as GridLogger, Grid, detailLists } from '@syncfusion/ej2-grids';\n/**\n * Logger module for TreeGrid\n *\n * @hidden\n */\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar WARNING = '[EJ2TreeGrid.Warning]';\nvar ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar INFO = '[EJ2TreeGrid.Info]';\nvar IsRowDDEnabled = false;\nvar Logger = /** @class */ (function (_super) {\n __extends(Logger, _super);\n function Logger(parent) {\n var _this = this;\n Grid.Inject(GridLogger);\n _this = _super.call(this, parent) || this;\n return _this;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[parseInt(i.toString(), 10)]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n var message = item.generateMessage(args, this.parent, cOp.options);\n message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');\n if (IsRowDDEnabled && type[parseInt(i.toString(), 10)] === 'primary_column_missing') {\n message = message.replace('Editing', 'Row DragAndDrop');\n IsRowDDEnabled = false;\n }\n var index = message.indexOf('https');\n var gridurl = message.substring(index);\n if (type[parseInt(i.toString(), 10)] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[parseInt(i.toString(), 10)] === 'primary_column_missing' || type[parseInt(i.toString(), 10)] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[parseInt(i.toString(), 10)] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[parseInt(i.toString(), 10)] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[parseInt(i.toString(), 10)] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[parseInt(i.toString(), 10)] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[parseInt(i.toString(), 10)] === 'datasource_syntax_mismatch') {\n if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n else {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n };\n Logger.prototype.treeLog = function (types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter(function (column) { return column.isPrimaryKey; }).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (var i = 0; i < type.length; i++) {\n var item = treeGridDetails[type[parseInt(i.toString(), 10)]];\n var cOp = item.check(args, treeGrid);\n if (cOp.success) {\n var message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n };\n return Logger;\n}(GridLogger));\nexport { Logger };\nexport var treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check: function (args, parent) {\n var opt = { success: false };\n if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)\n && isNullOrUndefined(parent.parentIdMapping)) ||\n (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||\n (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {\n opt = { success: true };\n }\n return opt;\n },\n generateMessage: function () {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n (BASE_DOC_URL + \"/api/treegrid#childmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#idmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#$parentidmapping\");\n }\n }\n};\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var headerContent = 'e-headercontent';\n/** @hidden */\nexport var movableContent = 'e-movablecontent';\n/** @hidden */\nexport var movableHeader = 'e-movableheader';\n/** @hidden */\nexport var frozenContent = 'e-frozencontent';\n/** @hidden */\nexport var frozenHeader = 'e-frozenheader';\n/** @hidden */\nexport var content = 'e-content';\n/** @hidden */\nexport var table = 'e-table';\n/** @hidden */\nexport var leftRight = 'Left-Right';\n/** @hidden */\nexport var frozenRight = 'frozen-right';\n/** @hidden */\nexport var frozenLeft = 'frozen-left';\n/** @hidden */\nexport var dataColIndex = 'data-colindex';\n/** @hidden */\nexport var ariaColIndex = 'aria-colindex';\n/** @hidden */\nexport var dataRowIndex = 'data-rowindex';\n/** @hidden */\nexport var ariaRowIndex = 'aria-rowindex';\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Clipboard as GridClipboard } from '@syncfusion/ej2-grids';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n *\n * @hidden\n */\nvar TreeClipboard = /** @class */ (function (_super) {\n __extends(TreeClipboard, _super);\n function TreeClipboard(parent, serviceLocator) {\n var _this = _super.call(this, parent.grid, serviceLocator) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\n _this.serviceLocator = serviceLocator;\n return _this;\n }\n TreeClipboard.prototype.setCopyData = function (withHeader) {\n var copyContent = 'copyContent';\n var getCopyData = 'getCopyData';\n var isSelect = 'isSelect';\n var uniqueID = 'uniqueID';\n var currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[\"\" + copyContent] = '';\n var rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort(function (a, b) {\n return a - b;\n });\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.treeCopyContent += '\\n';\n }\n if (!rows[selectedIndexes[parseInt(i.toString(), 10)]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[parseInt(i.toString(), 10)]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[parseInt(i.toString(), 10)][\"\" + uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[parseInt(i.toString(), 10)], rows, withHeader, i);\n }\n this[\"\" + getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += this[\"\" + copyContent];\n this.copiedUniqueIdCollection.push(uniqueid);\n this[\"\" + copyContent] = '';\n if (this.treeGridParent.copyHierarchyMode === 'Child' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.childContentData(currentRecords, selectedIndexes[parseInt(i.toString(), 10)], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[parseInt(i.toString(), 10)] =\n this.treeGridParent.getVisibleColumns()[parseInt(i.toString(), 10)].headerText;\n }\n this[\"\" + getCopyData](headerTextArray, false, '\\t', withHeader);\n this.treeCopyContent = this[\"\" + copyContent] + '\\n' + this.treeCopyContent;\n }\n var args = {\n data: this.treeCopyContent,\n cancel: false\n };\n this.treeGridParent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this[\"\" + copyContent] = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this[\"\" + isSelect] = true;\n this.copiedUniqueIdCollection = [];\n this.treeCopyContent = '';\n }\n else {\n _super.prototype.setCopyData.call(this, withHeader);\n }\n }\n };\n TreeClipboard.prototype.parentContentData = function (currentRecords, selectedIndex, rows, withHeader, index) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var level = 'level';\n if (!isNullOrUndefined(currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + parentItem])) {\n var treeLevel = currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + parentItem][\"\" + level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + parentItem]) &&\n currentRecords[parseInt(j.toString(), 10)][\"\" + uniqueID] === currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + parentItem][\"\" + uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[parseInt(selectedIndex.toString(), 10)].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[parseInt(j.toString(), 10)][\"\" + uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[\"\" + getCopyData](cells, false, '\\t', withHeader);\n if (index > 0) {\n this.treeCopyContent = this.treeCopyContent + this[\"\" + copyContent] + '\\n';\n }\n else {\n this.treeCopyContent = this[\"\" + copyContent] + '\\n' + this.treeCopyContent;\n }\n this.copiedUniqueIdCollection.push(uniqueid);\n this[\"\" + copyContent] = '';\n break;\n }\n }\n }\n }\n }\n };\n TreeClipboard.prototype.copy = function (withHeader) {\n _super.prototype.copy.call(this, withHeader);\n };\n TreeClipboard.prototype.paste = function (data, rowIndex, colIndex) {\n _super.prototype.paste.call(this, data, rowIndex, colIndex);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns clipboard module name\n */\n TreeClipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n TreeClipboard.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n TreeClipboard.prototype.childContentData = function (currentRecords, selectedIndex, rows, withHeader) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var childRecords = 'childRecords';\n var hasChildRecords = 'hasChildRecords';\n var uniqueID = 'uniqueID';\n if (currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + hasChildRecords]) {\n var childData = currentRecords[parseInt(selectedIndex.toString(), 10)][\"\" + childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[parseInt(i.toString(), 10)][\"\" + uniqueID]) && currentRecords[parseInt(j.toString(), 10)][\"\" + uniqueID] === childData[parseInt(i.toString(), 10)][\"\" + uniqueID]) {\n if ((!isNullOrUndefined(rows[parseInt(j.toString(), 10)])) && !rows[parseInt(j.toString(), 10)].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[parseInt(j.toString(), 10)].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[parseInt(j.toString(), 10)][\"\" + uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[\"\" + getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += ('\\n' + this[\"\" + copyContent]);\n this[\"\" + copyContent] = '';\n this.copiedUniqueIdCollection.push(uniqueid);\n this.childContentData(currentRecords, j, rows, withHeader);\n }\n }\n break;\n }\n }\n }\n }\n };\n return TreeClipboard;\n}(GridClipboard));\nexport { TreeClipboard };\n","import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[parseInt(i.toString(), 10)].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[parseInt(i.toString(), 10)]);\n if (hasChild) {\n datas.push(records[parseInt(i.toString(), 10)]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords.filter(function (item) { return !item.isSummaryRow; });\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[parseInt(i.toString(), 10)]);\n if (childRecords[parseInt(i.toString(), 10)].hasChildRecords ||\n (!isNullOrUndefined(childRecords[parseInt(i.toString(), 10)].childRecords) &&\n childRecords[parseInt(i.toString(), 10)].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[parseInt(i.toString(), 10)]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[parseInt(i.toString(), 10)]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[parseInt(j.toString(), 10)]] = array[parseInt(i.toString(), 10)][keys[parseInt(j.toString(), 10)]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[\"\" + idFilter][\"\" + value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[\"\" + id][\"\" + value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.searchingRecords = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var stackedHeader = 'stackedHeader';\n var columnModel = 'columnModel';\n var columns = this.parent[\"\" + stackedHeader] ? this.parent[\"\" + columnModel] : (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[parseInt(col.toString(), 10)].showCheckbox) {\n mappingUid = columns[parseInt(col.toString(), 10)].uid;\n }\n }\n var headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (var j = 0; j < headerCelllength; j++) {\n var headercell = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[parseInt(j.toString(), 10)];\n if (headercell.getAttribute('e-mappinguid') === mappingUid) {\n columnIndex = j;\n }\n }\n return columnIndex;\n };\n Selection.prototype.headerCheckbox = function () {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n var value = false;\n var rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n if (!isNullOrUndefined(headerElement)) {\n headerElement.insertBefore(checkWrap, headerElement.firstChild);\n }\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n else if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length > 0) {\n var checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n var checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n };\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox', 'aria-label': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n if (this.parent.allowTextWrap) {\n checkWrap.querySelector('.e-frame').style.width = '18px';\n }\n if (data.checkboxState === 'indeterminate') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-stop');\n }\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\n };\n Selection.prototype.columnCheckbox = function (container) {\n var checkWrap = this.renderColumnCheckbox(container);\n var containerELe = container.cell.querySelector('.e-treecolumn-container');\n if (!isNullOrUndefined(containerELe)) {\n if (!container.cell.querySelector('.e-hierarchycheckbox')) {\n containerELe.insertBefore(checkWrap, containerELe.querySelectorAll('.e-treecell')[0]);\n }\n }\n else {\n var spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n var data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n var divEle = this.parent.createElement('div', { className: 'e-treecheckbox-container' });\n divEle.appendChild(checkWrap);\n divEle.appendChild(spanEle);\n container.cell.appendChild(divEle);\n }\n };\n Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var record = this.parent.getCurrentViewRecords()[rowIndexes[parseInt(i.toString(), 10)]];\n var flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n var checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n var keys = Object.keys(record);\n for (var j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(flatRecord, keys[parseInt(j.toString(), 10)])) {\n flatRecord[keys[parseInt(j.toString(), 10)]] = record[keys[parseInt(j.toString(), 10)]];\n }\n }\n this.traverSelection(record, checkboxState, false);\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n };\n Selection.prototype.traverSelection = function (record, checkboxState, ischildItem) {\n var length = 0;\n this.updateSelectedItems(record, checkboxState);\n if (!ischildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n if (record.childRecords && this.parent.autoCheckHierarchy) {\n var childRecords = record.childRecords;\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords.length;\n for (var count = 0; count < length; count++) {\n if (!childRecords[parseInt(count.toString(), 10)].isSummaryRow) {\n if (childRecords[parseInt(count.toString(), 10)].hasChildRecords) {\n this.traverSelection(childRecords[parseInt(count.toString(), 10)], checkboxState, true);\n }\n else {\n this.updateSelectedItems(childRecords[parseInt(count.toString(), 10)], checkboxState);\n }\n }\n }\n }\n };\n Selection.prototype.getFilteredChildRecords = function (childRecords) {\n var _this = this;\n var filteredChildRecords = childRecords.filter(function (e) {\n return _this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n };\n Selection.prototype.updateParentSelection = function (parentRecord) {\n var length = 0;\n var childRecords = [];\n var record = getParentData(this.parent, parentRecord.uniqueID);\n if (record && record.childRecords) {\n childRecords = record.childRecords;\n }\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords && childRecords.length;\n var indeter = 0;\n var checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (var i = 0; i < childRecords.length; i++) {\n var currentRecord = getParentData(this.parent, childRecords[parseInt(i.toString(), 10)].uniqueID);\n var checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && (!record.hasFilteredChildRecords || isNullOrUndefined(record.hasFilteredChildRecords)) && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check') {\n record.checkboxState = 'check';\n }\n else if ((checkChildRecords === 0 && indeter === 0) || (checkChildRecords === 0 && record.hasFilteredChildRecords && !isNullOrUndefined(this.parent['dataResults']['actionArgs']) &&\n (this.parent['dataResults']['actionArgs'].requestType === 'searching' || this.parent['dataResults']['actionArgs'].requestType === 'filtering') && record.checkboxState === 'check')) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n //This property used to maintain the check state of the currentview data after clear filtering\n var multiFilterCheckState = false;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n if (this.parent.grid.searchSettings.key.length) {\n this.searchingRecords = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n multiFilterCheckState = true;\n }\n else {\n multiFilterCheckState = false;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length && !this.parent.grid.searchSettings.key.length) {\n this.filteredList = [];\n }\n if (this.searchingRecords.length && !isNullOrUndefined(checkAll)) {\n this.filteredList = this.searchingRecords;\n }\n }\n var data;\n if (!(isNullOrUndefined(this.parent.filterModule)) &&\n this.parent.filterModule.filteredResult.length === 0 && this.parent.getCurrentViewRecords().length === 0 &&\n this.parent.filterSettings.columns.length > 0) {\n data = this.filteredList;\n }\n else {\n data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList : this.parent.flatData;\n }\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[parseInt(i.toString(), 10)].checkboxState === 'check') {\n continue;\n }\n if (multiFilterCheckState) {\n continue;\n }\n data[parseInt(i.toString(), 10)].checkboxState = 'check';\n this.updateSelectedItems(data[parseInt(i.toString(), 10)], data[parseInt(i.toString(), 10)].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[parseInt(i.toString(), 10)]);\n if (index > -1) {\n data[parseInt(i.toString(), 10)].checkboxState = 'uncheck';\n this.updateSelectedItems(data[parseInt(i.toString(), 10)], data[parseInt(i.toString(), 10)].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[parseInt(i.toString(), 10)]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.grid.currentViewData.filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.grid.currentViewData.indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var tr = this.parent.getRows()[parseInt(recordIndex.toString(), 10)];\n var checkbox;\n if (recordIndex > -1) {\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[parseInt(recordIndex.toString(), 10)];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n var chkstate = checkState === 'check' ? 'checked' : checkState === 'uncheck' ? 'unchecked' : 'mixed';\n tr.querySelector('.e-treecheckselect').setAttribute('aria-checked', checkState === 'check' ? 'true' : checkState === 'uncheck' ? 'false' : 'mixed');\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[parseInt(i.toString(), 10)].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[parseInt(i.toString(), 10)], childData[parseInt(i.toString(), 10)].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[parseInt(i.toString(), 10)]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[parseInt(i.toString(), 10)], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[parseInt(i.toString(), 10)].parentItem)) {\n this.updateParentSelection(updatedData[parseInt(i.toString(), 10)].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords && record.childRecords.length > 0) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[parseInt(i.toString(), 10)].hasChildRecords) {\n _this.updateParentSelection(child[parseInt(i.toString(), 10)]);\n }\n else if (!(child[parseInt(i.toString(), 10)].hasChildRecords) &&\n !isNullOrUndefined(child[parseInt(i.toString(), 10)])) {\n _this.updateSelectedItems(child[parseInt(i.toString(), 10)], child[parseInt(i.toString(), 10)].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n ContextMenuItems[ContextMenuItems[\"RowIndent\"] = 16] = \"RowIndent\";\n ContextMenuItems[ContextMenuItems[\"RowOutdent\"] = 17] = \"RowOutdent\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","import * as events from '../base/constant';\nimport { Grid, getObject, Print as GridPrint } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Print module\n *\n * @hidden\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Print(parent) {\n this.parent = parent;\n Grid.Inject(GridPrint);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Print module name\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Print.prototype.addEventListener = function () {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n };\n Print.prototype.removeEventListener = function () {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n };\n Print.prototype.printTreeGrid = function (printGrid) {\n var grid = getObject('printgrid', printGrid);\n var gridElement = getObject('element', printGrid);\n grid.addEventListener(events.queryCellInfo, this.parent.grid.queryCellInfo);\n grid.addEventListener(events.rowDataBound, this.parent.grid.rowDataBound);\n grid.addEventListener(events.beforeDataBound, this.parent.grid.beforeDataBound);\n addClass([gridElement], 'e-treegrid');\n };\n Print.prototype.print = function () {\n this.parent.grid.print();\n };\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the selection behavior of the TreeGrid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend, CellRenderer } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed && !isNullOrUndefined(args.row)) {\n args.row.style.display = 'none';\n var rowsObj = this.parent.grid.getRowsObject();\n if (!this.parent.grid.isFrozenGrid() && !isNullOrUndefined(args.row.getAttribute('data-uid'))) {\n rowsObj.filter(function (e) { return e.uid === args.row.getAttribute('data-uid'); })[0].visible = false;\n }\n }\n }\n if (isRemoteData(this.parent) && !isOffline(this.parent)) {\n var proxy_1 = this.parent;\n var parentrec = this.parent.getCurrentViewRecords().filter(function (rec) {\n return getValue(proxy_1.idMapping, rec) === getValue(proxy_1.parentIdMapping, data);\n });\n if (parentrec.length > 0 && !parentrec[0].isSummaryRow && !isNullOrUndefined(args.row)) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (!isNullOrUndefined(args.row)) {\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n }\n var dragStartData = 'dragStartData';\n var draggedRecord = 'draggedRecord';\n if (this.parent.rowDragAndDropModule && this.parent.grid.rowDragAndDropModule && (this.parent.grid.rowDragAndDropModule[\"\" + dragStartData] ||\n this.parent.rowDragAndDropModule[\"\" + draggedRecord]) && this.parent.getContentTable().scrollHeight <= this.parent.getContent().clientHeight) {\n var lastRowBorder = 'lastRowBorder';\n var lastVisualData = this.parent.getVisibleRecords()[this.parent.getVisibleRecords().length - 1];\n if (lastVisualData.uniqueID === args.data.uniqueID && !isNullOrUndefined(args.row) && !args.row.cells[0].classList.contains('e-lastrowcell')) {\n this.parent[\"\" + lastRowBorder](args.row, true);\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[\"\" + getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n if (this.parent['isFromGantt'] && !this.parent.loadChildOnDemand) {\n iconRequired = data.hasChildRecords;\n }\n else {\n iconRequired = !(data.childRecords.length === 0);\n }\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n args.cell.setAttribute('aria-expanded', data.expanded ? 'true' : 'false');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '4px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n summaryData = isNullOrUndefined(summaryData) ? null : summaryData;\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n if (args.column.template) {\n args.cell.innerHTML = null;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('data-colindex', colindex + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n args.column.template = treeColumn.template;\n args.column[\"\" + templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[\"\" + templateFn](args.data, this.parent, 'columnTemplate', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[\"\" + portals])) {\n this.parent.grid[\"\" + portals] = this.parent[\"\" + portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[\"\" + portals]);\n this.parent[\"\" + renderReactTemplates]();\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[\"\" + templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[\"\" + str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[\"\" + templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[parseInt(i.toString(), 10)]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Render.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.parent.grid.getRowsObject();\n var indent = _this.parent.grid.getIndentCount();\n var cellIndex = _this.parent.grid.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[parseInt(j.toString(), 10)].isDataRow && !isNullOrUndefined(rowsObj[parseInt(j.toString(), 10)].index)) {\n var cell = rowsObj[parseInt(j.toString(), 10)][\"\" + cells][parseInt(cellIndex.toString(), 10)];\n var cellRenderer = new CellRenderer(_this.parent.grid, _this.parent.grid.serviceLocator);\n var td = _this.parent.getCellFromIndex(rowsObj[parseInt(j.toString(), 10)].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[parseInt(j.toString(), 10)].data, { index: rowsObj[parseInt(j.toString(), 10)][\"\" + rowIdx] });\n var treecell = _this.parent.getRows()[parseInt(j.toString(), 10)]\n .cells[parseInt(cellIndex.toString(), 10)];\n _this.cellRender({ data: rowsObj[parseInt(j.toString(), 10)].data, cell: treecell, column: cell.column });\n }\n }\n });\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[\"\" + portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[\"\" + portals]);\n this.parent[\"\" + renderReactTemplates]();\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (Object.keys(data).length === 0 && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var tempData = data[parseInt(i.toString(), 10)];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[parseInt(i.toString(), 10)];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[parseInt(index.toString(), 10)][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[\"\" + isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var actionArgs = 'actionArgs';\n if (isRemoteData(this.parent) && this.parent.enableVirtualization && args[\"\" + actionArgs].requestType === 'virtualscroll') {\n this.parent.hideSpinner();\n }\n var records = args.result;\n if (isRemoteData(this.parent) && this.parent.enableVirtualization && (args[\"\" + actionArgs].requestType === 'virtualscroll' || args[\"\" + actionArgs].action === 'clearFilter' || args[\"\" + actionArgs].searchString === '')) {\n this.parent.query.expands = [];\n }\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (!this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (!this.parent.loadChildOnDemand) {\n var _loop_1 = function (rec) {\n if (isCountRequired(this_1.parent) && records[parseInt(rec.toString(), 10)].hasChildRecords &&\n this_1.parent.initialRender) {\n records[parseInt(rec.toString(), 10)].expanded = false;\n }\n if (isRemoteData(this_1.parent) && this_1.parent.enableVirtualization) {\n var childRecords_1 = [];\n var parent_1 = this_1.parent;\n records.filter(function (e) {\n if (e[\"\" + parent_1.parentIdMapping] === records[parseInt(rec.toString(), 10)][\"\" + parent_1.idMapping]) {\n childRecords_1.push(e);\n }\n });\n if (childRecords_1.length) {\n records[parseInt(rec.toString(), 10)].expanded = true;\n }\n else if (records[parseInt(rec.toString(), 10)].hasChildRecords) {\n records[parseInt(rec.toString(), 10)].expanded = false;\n }\n }\n if (isNullOrUndefined(records[parseInt(rec.toString(), 10)].index)) {\n records[parseInt(rec.toString(), 10)].taskData = extend({}, records[parseInt(rec.toString(), 10)]);\n records[parseInt(rec.toString(), 10)].uniqueID = getUid(this_1.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[parseInt(rec.toString(), 10)].uniqueID, records[parseInt(rec.toString(), 10)], this_1.parent);\n records[parseInt(rec.toString(), 10)].level = 0;\n if (isRemoteData(this_1.parent) && this_1.parent.enableVirtualization && records[parseInt(rec.toString(), 10)][\"\" + this_1.parent.parentIdMapping] && records[parseInt(rec.toString(), 10)].level === 0) {\n records[parseInt(rec.toString(), 10)].level = records[parseInt(rec.toString(), 10)].level + 1;\n }\n records[parseInt(rec.toString(), 10)].index = Math.ceil(Math.random() * 1000);\n if ((records[parseInt(rec.toString(), 10)][this_1.parent.hasChildMapping] ||\n this_1.parentItems.indexOf(records[parseInt(rec.toString(), 10)][this_1.parent.idMapping]) !== -1)) {\n records[parseInt(rec.toString(), 10)].hasChildRecords = true;\n }\n records[parseInt(rec.toString(), 10)].checkboxState = 'uncheck';\n }\n };\n var this_1 = this;\n for (var rec = 0; rec < records.length; rec++) {\n _loop_1(rec);\n }\n }\n else {\n var dataResults = 'dataResults';\n var expandRecord = 'expandRecord';\n if (!isNullOrUndefined(records) && !((this.parent.loadChildOnDemand) && isCountRequired(this.parent) && !isNullOrUndefined(this.parent[\"\" + dataResults][\"\" + expandRecord])) &&\n !(isRemoteData(this.parent) && this.parent.loadChildOnDemand && args[\"\" + actionArgs].isExpandCollapse && this.parent.enableVirtualization)) {\n this.convertToFlatData(records);\n }\n }\n }\n if (isRemoteData(this.parent) && this.parent.loadChildOnDemand && args[\"\" + actionArgs].isExpandCollapse && this.parent.enableVirtualization) {\n args.result = records;\n }\n else if (isRemoteData(this.parent) && this.parent.enableVirtualization && !this.parent.loadChildOnDemand) {\n args.result = records;\n }\n else {\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\n }\n if (isRemoteData(this.parent) && this.parent.enableVirtualization && this.parent.loadChildOnDemand\n && this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var query = 'query';\n var summaryQuery = args[\"\" + query].queries.filter(function (q) { return q.fn === 'onAggregates'; });\n args.result = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n var name = 'name';\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[parseInt(i.toString(), 10)].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[parseInt(i.toString(), 10)].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ?\n this.parent.grid.getCurrentViewRecords()[rowDetails.rows[parseInt(i.toString(), 10)].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[parseInt(i.toString(), 10)].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[parseInt(i.toString(), 10)].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ action: rowDetails[\"\" + name], record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n if (this.parent.enableVirtualization && rowDetails.action === 'remoteExpand') {\n qry.take(this.parent.pageSettings.pageSize);\n var expandDetail = [];\n expandDetail.push('ExpandingAction', parseInt(rowDetails.record[this.parent.idMapping], 10).toString());\n qry.expand(expandDetail);\n }\n else if (this.parent.enableVirtualization && rowDetails.action === 'collapse') {\n qry.take(this.parent.grid.pageSettings.pageSize);\n var expandDetail = [];\n expandDetail.push('CollapsingAction', parseInt(rowDetails.record[this.parent.idMapping], 10).toString());\n qry.expand(expandDetail);\n }\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n if (rowDetails.action === 'remoteExpand' && this.parent.grid.filterModule && this.parent.grid.filterModule['value']) {\n var filterqry = this.parent.grid.getDataModule().generateQuery().queries.filter(function (e) { return e.fn !== 'onPage' && typeof e.e.predicates !== 'undefined'; });\n qry.queries.push(filterqry[0]);\n }\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var remoteExpandedData = 'remoteExpandedData';\n var remoteCollapsedData = 'remoteCollapsedData';\n var level = 'level';\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\n if (_this.parent.enableVirtualization && (rowDetails.action === 'collapse' || rowDetails.action === 'remoteExpand')) {\n datas = [];\n for (var i = 0; i < inx; i++) {\n datas.push(_this.parent.grid.currentViewData[parseInt(i.toString(), 10)]);\n }\n }\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n var resultChildData = [];\n if (rowDetails.action === 'remoteExpand' && _this.parent.grid.filterModule && _this.parent.grid.filterModule['value']) {\n for (var i = 0; i < datas.length; i++) {\n if (Object.prototype.hasOwnProperty.call(datas[parseInt(i.toString(), 10)], _this.parent.parentIdMapping) && datas[parseInt(i.toString(), 10)]['' + _this.parent.parentIdMapping] !== null && datas[parseInt(i.toString(), 10)].level === 0) {\n datas.splice(i, 1);\n i--;\n }\n }\n for (var i = 0; i < result.length; i++) {\n if (rowDetails.record['' + _this.parent.idMapping] !== result[parseInt(i.toString(), 10)]['' + _this.parent.idMapping] &&\n rowDetails.record['' + _this.parent.idMapping] === result[parseInt(i.toString(), 10)]['' + _this.parent.parentIdMapping]) {\n if (Object.prototype.hasOwnProperty.call(result, i)) {\n resultChildData.push(result[parseInt(i.toString(), 10)]);\n }\n }\n }\n result = resultChildData;\n }\n if (_this.parent.enableVirtualization && rowDetails.action === 'remoteExpand') {\n rowDetails.record.childRecords = [];\n for (var i = 0; i < result.length; i++) {\n if (rowDetails.record['' + _this.parent.idMapping] !== result[parseInt(i.toString(), 10)]['' + _this.parent.idMapping] &&\n rowDetails.record['' + _this.parent.idMapping] === result[parseInt(i.toString(), 10)]['' + _this.parent.parentIdMapping] && Object.prototype.hasOwnProperty.call(result, i)) {\n rowDetails.record.childRecords.push(result[parseInt(i.toString(), 10)]);\n }\n }\n }\n else {\n rowDetails.record.childRecords = result;\n }\n for (var r = 0; r < result.length; r++) {\n if (_this.parent.enableVirtualization && result[parseInt(r.toString(), 10)][\"\" + _this.parent.idMapping] === rowDetails.record[\"\" + _this.parent.idMapping] && rowDetails.action === 'remoteExpand') {\n _this.parent[\"\" + remoteExpandedData].push(rowDetails.record);\n }\n else if (_this.parent.enableVirtualization && result[parseInt(r.toString(), 10)][\"\" + _this.parent.idMapping] === rowDetails.record[\"\" + _this.parent.idMapping] && rowDetails.action === 'collapse') {\n for (var i = 0; i < _this.parent[\"\" + remoteExpandedData].length; i++) {\n if (rowDetails.record[\"\" + _this.parent.idMapping] === _this.parent[\"\" + remoteExpandedData][parseInt(i.toString(), 10)][\"\" + _this.parent.idMapping]) {\n _this.parent[\"\" + remoteExpandedData].splice(i, 1);\n }\n }\n }\n result[parseInt(r.toString(), 10)].taskData = extend({}, result[parseInt(r.toString(), 10)]);\n if (result[parseInt(r.toString(), 10)][\"\" + _this.parent.parentIdMapping] && _this.parent.enableVirtualization && _this.parent[\"\" + remoteExpandedData].length) {\n for (var i = 0; i < _this.parent[\"\" + remoteExpandedData].length; i++) {\n if (result[parseInt(r.toString(), 10)][\"\" + _this.parent.parentIdMapping] === _this.parent[\"\" + remoteExpandedData][parseInt(i.toString(), 10)][\"\" + _this.parent.idMapping]) {\n result[parseInt(r.toString(), 10)].level = _this.parent[\"\" + remoteExpandedData][parseInt(i.toString(), 10)][\"\" + level] + 1;\n var parentData = _this.parent[\"\" + remoteExpandedData][parseInt(i.toString(), 10)];\n delete parentData.childRecords;\n result[parseInt(r.toString(), 10)].parentItem = parentData;\n result[parseInt(r.toString(), 10)].parentUniqueID = rowDetails.record.uniqueID;\n }\n }\n }\n else if (_this.parent.enableVirtualization) {\n if ((result[parseInt(r.toString(), 10)][\"\" + _this.parent.hasChildMapping] ||\n _this.parentItems.indexOf(result[parseInt(r.toString(), 10)][\"\" + _this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[parseInt(r.toString(), 10)])) {\n if (isNullOrUndefined(result[parseInt(r.toString(), 10)][\"\" + _this.parent.parentIdMapping])) {\n result[parseInt(r.toString(), 10)].level = 0;\n if (rowDetails.action === 'remoteExpand') {\n result[parseInt(r.toString(), 10)].childRecords = [];\n result[parseInt(r.toString(), 10)].childRecords = rowDetails.record.childRecords;\n }\n }\n else {\n result[parseInt(r.toString(), 10)].level = rowDetails.record.level;\n }\n }\n else {\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[parseInt(r.toString(), 10)].parentItem = parentData;\n result[parseInt(r.toString(), 10)].parentUniqueID = rowDetails.record.uniqueID;\n }\n }\n else {\n result[parseInt(r.toString(), 10)].level = rowDetails.record.level + 1;\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[parseInt(r.toString(), 10)].parentItem = parentData;\n result[parseInt(r.toString(), 10)].parentUniqueID = rowDetails.record.uniqueID;\n }\n result[parseInt(r.toString(), 10)].index = Math.ceil(Math.random() * 1000);\n result[parseInt(r.toString(), 10)].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[parseInt(r.toString(), 10)].checkboxState = 'uncheck';\n if (_this.parent.enableVirtualization && isNullOrUndefined(result[parseInt(r.toString(), 10)].level)) {\n for (var p = 0; p < _this.parent.grid.currentViewData.length; p++) {\n if (_this.parent.grid.currentViewData[parseInt(p.toString(), 10)][\"\" + _this.parent.idMapping] === result[parseInt(r.toString(), 10)][\"\" + _this.parent.parentIdMapping]) {\n result[parseInt(r.toString(), 10)].level = _this.parent.grid.currentViewData[parseInt(p.toString(), 10)]['level'] + 1;\n }\n }\n }\n setValue('uniqueIDCollection.' + result[parseInt(r.toString(), 10)].uniqueID, result[parseInt(r.toString(), 10)], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[parseInt(r.toString(), 10)][\"\" + _this.parent.hasChildMapping] ||\n _this.parentItems.indexOf(result[parseInt(r.toString(), 10)][\"\" + _this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[parseInt(r.toString(), 10)])) {\n result[parseInt(r.toString(), 10)].hasChildRecords = true;\n if (_this.parent.enableVirtualization && _this.parent.loadChildOnDemand) {\n for (var i = 0; i < _this.parent[\"\" + remoteCollapsedData].length; i++) {\n if (result[parseInt(r.toString(), 10)][\"\" + _this.parent.idMapping] === _this.parent[\"\" + remoteCollapsedData][parseInt(i.toString(), 10)][\"\" + _this.parent.idMapping]) {\n result[parseInt(r.toString(), 10)].expanded = _this.parent[\"\" + remoteCollapsedData][parseInt(i.toString(), 10)]['expanded'];\n }\n }\n if (rowDetails.action === 'collapse' && result[parseInt(r.toString(), 10)][\"\" + _this.parent.idMapping] !== rowDetails.record[\"\" + _this.parent.idMapping] && result[parseInt(r.toString(), 10)].expanded !== false) {\n result[parseInt(r.toString(), 10)].expanded = true;\n }\n else if (rowDetails.action === 'collapse' && result[parseInt(r.toString(), 10)][\"\" + _this.parent.idMapping] === rowDetails.record[\"\" + _this.parent.idMapping]) {\n result[parseInt(r.toString(), 10)].expanded = false;\n _this.parent[\"\" + remoteCollapsedData].push(rowDetails.record);\n }\n else if (rowDetails.action === 'remoteExpand') {\n for (var i = 0; i < _this.parent.grid.currentViewData.length; i++) {\n if (_this.parent.grid.currentViewData[parseInt(i.toString(), 10)][\"\" + _this.parent.idMapping] === result[parseInt(r.toString(), 10)][\"\" + _this.parent.idMapping]) {\n result.splice(r, 1, _this.parent.grid.currentViewData[parseInt(i.toString(), 10)]);\n }\n }\n if (result[parseInt(r.toString(), 10)][_this.parent.idMapping] === rowDetails.record[\"\" + _this.parent.idMapping]) {\n for (var i = 0; i < _this.parent[\"\" + remoteCollapsedData].length; i++) {\n if (rowDetails.record[\"\" + _this.parent.idMapping] === _this.parent[\"\" + remoteCollapsedData][parseInt(i.toString(), 10)][\"\" + _this.parent.idMapping]) {\n _this.parent[\"\" + remoteCollapsedData].splice(i, 1);\n }\n }\n }\n if (result[parseInt(r.toString(), 10)].expanded !== false) {\n result[parseInt(r.toString(), 10)].expanded = true;\n }\n }\n }\n else if (_this.parent.enableVirtualization && result[parseInt(r.toString(), 10)][\"\" + _this.parent.idMapping] === rowDetails.record[\"\" + _this.parent.idMapping] && rowDetails.action !== 'collapse') {\n result[parseInt(r.toString(), 10)].expanded = true;\n }\n else if (!(_this.parent.enableVirtualization && _this.parent.loadChildOnDemand)) {\n result[parseInt(r.toString(), 10)].expanded = false;\n }\n }\n datas.splice(inx + r + 1, 0, result[parseInt(r.toString(), 10)]);\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[\"\" + result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[\"\" + result_1], true);\n }\n }\n if (_this.parent.enableVirtualization) {\n _this.parent.grid.pageSettings.totalRecordsCount = e.count;\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n if (isRemoteData(this.parent) && this.parent.enableVirtualization) {\n var index = this.parent.query.queries.indexOf(this.parent.query.queries.filter(function (q) { return q.fn === 'onSortBy'; })[0]);\n if (index !== -1) {\n this.parent.query.queries.splice(index, 1);\n }\n if (this.parent.grid.sortSettings.columns.length === 0) {\n this.parent.query.sortBy(null, null);\n }\n }\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n var keys = Object.keys(data);\n for (var i = 0, len = keys.length; i < len; i++) {\n var currentData = extend({}, data[parseInt(i.toString(), 10)]);\n currentData.taskData = data[parseInt(i.toString(), 10)];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if ((!isNullOrUndefined(currentData[this.parent.childMapping]) && !isCountRequired(this.parent)) ||\n ((currentData[this.parent.hasChildMapping]) && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n var remoteCollapsedData = 'remoteCollapsedData';\n if (this.parent.enableVirtualization && this.parent.loadChildOnDemand && isRemoteData(this.parent)\n && !this.parent.initialRender) {\n if (!currentData.hasChildRecords && isNullOrUndefined(currentData[\"\" + this.parent.parentIdMapping])) {\n currentData.hasChildRecords = true;\n for (var c = 0; c < this.parent[\"\" + remoteCollapsedData].length; c++) {\n if (this.parent[\"\" + remoteCollapsedData][parseInt(c.toString(), 10)][\"\" + this.parent.idMapping] === currentData[\"\" + this.parent.idMapping]) {\n currentData.expanded = false;\n }\n }\n }\n else if (currentData.level === 0 && isNullOrUndefined(parentRecords) && !currentData.hasChildRecords) {\n currentData.level = currentData.level + 1;\n }\n if (currentData[\"\" + this.parent.hasChildMapping] && !isNullOrUndefined(currentData[\"\" + this.parent.expandStateMapping])) {\n currentData.expanded = currentData[\"\" + this.parent.expandStateMapping];\n currentData.hasChildRecords = true;\n }\n this.parent.flatData.push(currentData);\n }\n else if (isNullOrUndefined(currentData[\"\" + this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n this.parent['infiniteScrollData'].push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[\"\" + primaryKeyColumnName])) {\n actionAddArgs.data[\"\" + primaryKeyColumnName] = args.result[actionAddArgs.index][\"\" + primaryKeyColumnName];\n dataValue.taskData[\"\" + primaryKeyColumnName] = args.result[actionAddArgs.index][\"\" + primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[\"\" + getColumnByField](this.parent.grid.\n sortSettings.columns[parseInt(srt.toString(), 10)].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[parseInt(srt.toString(), 10)].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[parseInt(srt.toString(), 10)].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n if (this.parent.allowRowDragAndDrop && !isNullOrUndefined(this.parent.rowDragAndDropModule['draggedRecord']) &&\n this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] !== 'middleSegment') {\n var dragdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['draggedRecord']);\n modifiedData.splice(dragdIndex, 1);\n var dropdIndex = modifiedData.indexOf(this.parent.rowDragAndDropModule['droppedRecord']);\n if (this.parent.rowDragAndDropModule['droppedRecord'].hasChildRecords && this.parent.rowDragAndDropModule['dropPosition'] === 'topSegment') {\n modifiedData.splice(dropdIndex, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n else if (this.parent.rowDragAndDropModule['dropPosition'] === 'bottomSegment') {\n modifiedData.splice(dropdIndex + 1, 0, this.parent.rowDragAndDropModule['draggedRecord']);\n }\n }\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[\"\" + isPdfExport] && (isNullOrUndefined(args[\"\" + isCollapsedStatePersist])\n || args[\"\" + isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[parseInt(i.toString(), 10)], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[parseInt(i.toString(), 10)]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the TreeGrid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n __decorate([\n Property('All')\n ], PageSettings.prototype, \"pageSizeMode\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, getEnumValue, compile } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { CellType } from '@syncfusion/ej2-grids';\n/**\n * Configures the TreeGrid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.intl = new Internationalization();\n _this.templateFn = {};\n return _this;\n }\n /**\n * Custom format function\n *\n * @hidden\n * @param {string} cultureName - culture name to format\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = this.getFormatFunction(this.format);\n }\n };\n /**\n * @param {NumberFormatOptions | DateFormatOptions} format - formatting options for number and date values\n * @hidden\n * @returns {Function} - return formatter function\n */\n AggregateColumn.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n /**\n * @hidden\n * @returns {Function} - Returns formatter function\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - updates aggregate properties without change detection\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], AggregateRow.prototype, \"showChildSummary\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Configures the edit behavior of the TreeGrid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Cell')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of TreeGrid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[\"\" + addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[parseInt(k.toString(), 10)][\"\" + key]) === 'object') {\n modifiedData[parseInt(k.toString(), 10)] = modifiedData[parseInt(k.toString(), 10)][\"\" + key];\n }\n var keys = modifiedData[parseInt(k.toString(), 10)].taskData ?\n Object.keys(modifiedData[parseInt(k.toString(), 10)].taskData) :\n Object.keys(modifiedData[parseInt(k.toString(), 10)]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[parseInt(i.toString(), 10)][\"\" + key] === modifiedData[parseInt(k.toString(), 10)][\"\" + key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[parseInt(i.toString(), 10)];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[\"\" + control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[\"\" + control.idMapping] === currentData_1[\"\" + control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[\"\" + control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[parseInt(p.toString(), 10)][\"\" + control.idMapping] === currentData_1[\"\" + control.idMapping]) {\n if (!control.enableImmutableMode && parentData.childRecords.length === parentData['Children'].length) {\n parentData['childRecords'].splice(p, 1);\n }\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n return \"break\";\n }\n }\n else {\n if (action === 'edit') {\n for (j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(treeData[parseInt(i.toString(), 10)], keys[parseInt(j.toString(), 10)]) && ((control.editSettings.mode !== 'Cell'\n || (!isNullOrUndefined(batchChanges) && batchChanges[\"\" + changedRecords].length === 0))\n || keys[parseInt(j.toString(), 10)] === columnName)) {\n var editedData = getParentData(control, modifiedData[parseInt(k.toString(), 10)].uniqueID);\n treeData[parseInt(i.toString(), 10)][keys[parseInt(j.toString(), 10)]] =\n modifiedData[parseInt(k.toString(), 10)][keys[parseInt(j.toString(), 10)]];\n if (editedData && editedData.taskData) {\n editedData.taskData[keys[parseInt(j.toString(), 10)]] = editedData[keys[parseInt(j.toString(), 10)]]\n = treeData[parseInt(i.toString(), 10)][keys[parseInt(j.toString(), 10)]];\n }\n }\n }\n }\n else if (action === 'add' || action === 'batchsave') {\n var index = void 0;\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData.taskData[\"\" + control.parentIdMapping] = treeData[parseInt(i.toString(), 10)][\"\" + control.idMapping];\n treeData.splice(i + 1, 0, originalData.taskData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(treeData[parseInt(i.toString(), 10)], control.childMapping)) {\n treeData[parseInt(i.toString(), 10)][\"\" + control.childMapping] = [];\n }\n treeData[parseInt(i.toString(), 10)][\"\" + control.childMapping].push(originalData.taskData);\n updateParentRow(key, treeData[parseInt(i.toString(), 10)], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n treeData.splice(i + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i + 1], action, control, isSelfReference, originalData);\n }\n }\n else if (!addRowIndex) {\n index = 0;\n treeData.splice(index, 0, originalData.taskData);\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n treeData.splice(i, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[parseInt(i.toString(), 10)], action, control, isSelfReference, originalData);\n }\n }\n }\n return \"break\";\n }\n }\n else if (!isNullOrUndefined(treeData[parseInt(i.toString(), 10)][\"\" + control.childMapping])) {\n if (removeChildRecords(treeData[parseInt(i.toString(), 10)][\"\" + control.childMapping], modifiedData[parseInt(k.toString(), 10)], action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, treeData[parseInt(i.toString(), 10)], action, control, isSelfReference);\n }\n }\n };\n while (i-- && i >= 0) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n }\n }\n}\n/**\n * Performs Add action to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {Object[]} treeData - Tree Grid data source\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord) {\n var value;\n var isSkip = false;\n var currentViewRecords = control.grid.getCurrentViewRecords();\n value = extend({}, details.value);\n value = getPlainData(value);\n switch (control.editSettings.newRowPosition) {\n case 'Top':\n treeData.unshift(value);\n isSkip = true;\n break;\n case 'Bottom':\n treeData.push(value);\n isSkip = true;\n break;\n case 'Above':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n value = extend({}, currentViewRecords[addRowIndex + 1]);\n value = getPlainData(value);\n }\n break;\n case 'Below':\n case 'Child':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var currentdata = currentViewRecords[parseInt(addRowIndex.toString(), 10)];\n if (!isNullOrUndefined(currentdata) && currentdata[\"\" + primaryKeys] === details.value[\"\" + primaryKeys] || selectedIndex !== -1) {\n value = extend({}, currentdata);\n }\n else {\n value = extend({}, details.value);\n }\n value = getPlainData(value);\n var internalProperty = 'internalProperties';\n control.editModule[\"\" + internalProperty].taskData = value;\n }\n if (selectedIndex === -1) {\n treeData.unshift(value);\n isSkip = true;\n }\n }\n return { value: value, isSkip: isSkip };\n}\n/**\n * @param {ITreeData[]} childRecords - Child Records collection\n * @param {Object} modifiedData - Modified data in crud action\n * @param {string} action - crud action type\n * @param {string} key - Primary key field name\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether Self Referential data binding\n * @param {ITreeData} originalData - Non updated data from data source, of edited data\n * @param {string} columnName - column field name\n * @returns {boolean} Returns whether child records exists\n */\nexport function removeChildRecords(childRecords, modifiedData, action, key, control, isSelfReference, originalData, columnName) {\n var isChildAll = false;\n var j = childRecords.length;\n while (j-- && j >= 0) {\n if (childRecords[parseInt(j.toString(), 10)][\"\" + key] === modifiedData[\"\" + key] ||\n (isSelfReference && childRecords[parseInt(j.toString(), 10)][control.parentIdMapping] === modifiedData[control.idMapping])) {\n if (action === 'edit') {\n var keys = Object.keys(modifiedData);\n var editedData = getParentData(control, modifiedData.uniqueID);\n for (var i = 0; i < keys.length; i++) {\n if (Object.prototype.hasOwnProperty.call(childRecords[parseInt(j.toString(), 10)], keys[parseInt(i.toString(), 10)]) &&\n (control.editSettings.mode !== 'Cell' || keys[parseInt(i.toString(), 10)] === columnName)) {\n editedData[keys[parseInt(i.toString(), 10)]] =\n editedData.taskData[keys[parseInt(i.toString(), 10)]] =\n childRecords[parseInt(j.toString(), 10)][keys[parseInt(i.toString(), 10)]] =\n modifiedData[keys[parseInt(i.toString(), 10)]];\n if (control.grid.editSettings.mode === 'Normal' && control.editSettings.mode === 'Cell') {\n var editModule = 'editModule';\n control.grid.editModule[\"\" + editModule].editRowIndex = modifiedData.index;\n control.grid.editModule[\"\" + editModule].updateCurrentViewData(modifiedData);\n }\n }\n }\n break;\n }\n else if (action === 'add' || action === 'batchsave') {\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData[\"\" + control.parentIdMapping] = childRecords[parseInt(j.toString(), 10)][control.idMapping];\n childRecords.splice(j + 1, 0, originalData);\n updateParentRow(key, childRecords[parseInt(j.toString(), 10)], action, control, isSelfReference, originalData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(childRecords[parseInt(j.toString(), 10)], control.childMapping)) {\n childRecords[parseInt(j.toString(), 10)][control.childMapping] = [];\n }\n childRecords[parseInt(j.toString(), 10)][control.childMapping].push(originalData.taskData);\n updateParentRow(key, childRecords[parseInt(j.toString(), 10)], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n childRecords.splice(j, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[parseInt(j.toString(), 10)], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n childRecords.splice(j + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[parseInt(j.toString(), 10)], action, control, isSelfReference, originalData);\n }\n }\n }\n else {\n childRecords.splice(j, 1);\n if (!childRecords.length) {\n isChildAll = true;\n }\n }\n }\n else if (!isNullOrUndefined(childRecords[parseInt(j.toString(), 10)][control.childMapping])) {\n if (removeChildRecords(childRecords[parseInt(j.toString(), 10)][control.childMapping], modifiedData, action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, childRecords[parseInt(j.toString(), 10)], action, control, isSelfReference);\n }\n }\n }\n return isChildAll;\n}\n/**\n * @param {string} key - Primary key field name\n * @param {ITreeData} record - Parent Record which has to be updated\n * @param {string} action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether self referential data binding\n * @param {ITreeData} child - Specifies child record\n * @returns {void}\n */\nexport function updateParentRow(key, record, action, control, isSelfReference, child) {\n if ((control.editSettings.newRowPosition === 'Above' || control.editSettings.newRowPosition === 'Below')\n && ((action === 'add' || action === 'batchsave')) && !isNullOrUndefined(child.parentItem)) {\n var parentData = getParentData(control, child.parentItem.uniqueID);\n parentData.childRecords.push(child);\n }\n else {\n var currentRecords = control.grid.getCurrentViewRecords();\n var index_1;\n currentRecords.map(function (e, i) { if (e[\"\" + key] === record[\"\" + key]) {\n index_1 = i;\n return;\n } });\n if (control.enableVirtualization && isNullOrUndefined(index_1)) {\n var updatedParent = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n record = updatedParent;\n }\n if (!isNullOrUndefined(index_1)) {\n record = currentRecords[parseInt(index_1.toString(), 10)];\n }\n if (control.enableVirtualization && isNullOrUndefined(record) && !isNullOrUndefined(child)) {\n record = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n }\n if (!isSelfReference && !isNullOrUndefined(record.childRecords) && record.childRecords.length) {\n record.hasChildRecords = true;\n }\n else {\n record.hasChildRecords = false;\n }\n if (action === 'add' || action === 'batchsave') {\n record.expanded = true;\n record.hasChildRecords = true;\n if (control.sortSettings.columns.length && isNullOrUndefined(child)) {\n child = currentRecords.filter(function (e) {\n if (e.parentUniqueID === record.uniqueID) {\n return e;\n }\n else {\n return null;\n }\n });\n }\n var childRecords = child ? child instanceof Array ? child[0] : child : currentRecords[index_1 + 1];\n if (control.editSettings.newRowPosition !== 'Below') {\n if (!Object.prototype.hasOwnProperty.call(record, 'childRecords')) {\n record.childRecords = [];\n }\n else {\n if (!isNullOrUndefined(child) && record[\"\" + key] !== child[\"\" + key]) {\n record.childRecords.push(child);\n }\n }\n if (record.childRecords.indexOf(childRecords) === -1 && record[\"\" + key] !== child[\"\" + key]) {\n record.childRecords.unshift(childRecords);\n }\n if (isSelfReference) {\n if (!Object.prototype.hasOwnProperty.call(record, control.childMapping)) {\n record[control.childMapping] = [];\n }\n if (record[\"\" + control.childMapping].indexOf(childRecords) === -1 && record[\"\" + key] !== child[\"\" + key]) {\n record[control.childMapping].unshift(childRecords);\n }\n }\n }\n }\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var data = control.grid.dataSource instanceof DataManager ?\n control.grid.dataSource.dataSource.json : control.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n if (data[parseInt(i.toString(), 10)][\"\" + primaryKeys] === record[\"\" + primaryKeys]) {\n data[parseInt(i.toString(), 10)] = record;\n break;\n }\n }\n control.grid.setRowData(key, record);\n var row = control.getRowByIndex(index_1);\n if (control.editSettings.mode === 'Batch') {\n if (action === 'add') {\n row = control.getRows()[control.grid.getCurrentViewRecords().indexOf(record)];\n }\n else {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[\"\" + key])];\n }\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index_1);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n var index_2 = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index_2 = index_2 + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[parseInt(index_2.toString(), 10)] ? row.cells[parseInt(index_2.toString(), 10)]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n if (control.enableImmutableMode && control['action'] === 'indenting' || control['action'] === 'outdenting') {\n control.renderModule.RowModifier({\n data: record, row: row\n });\n }\n }\n }\n}\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the infinite scroll behavior of Tree Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend, merge, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { LoadingIndicator } from '../models/loading-indicator';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\nimport * as literals from '../base/constant';\n/**\n * Represents the TreeGrid component.\n * ```html\n *
\n * \n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.indentOutdentAction = 'indentOutdentAction';\n _this.modifiedRecords = [];\n _this.stackedHeader = false;\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[parseInt(i.toString(), 10)]] !== current[keys[parseInt(i.toString(), 10)]] &&\n excludeKeys.indexOf(keys[parseInt(i.toString(), 10)]) === -1) {\n var isDate = old[keys[parseInt(i.toString(), 10)]] instanceof Date &&\n current[keys[parseInt(i.toString(), 10)]] instanceof Date;\n if (!isDate || (old[keys[parseInt(i.toString(), 10)]].getTime() !==\n current[keys[parseInt(i.toString(), 10)]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[\"\" + logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n if (!isNullOrUndefined(column)) {\n row = column.closest('tr');\n if (!isNullOrUndefined(row) && !(isNullOrUndefined(row.getElementsByClassName('e-treegridexpand')[0]))) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n if (!isNullOrUndefined(column)) {\n row = column.closest('tr');\n if (!isNullOrUndefined(row) && !(isNullOrUndefined(row.getElementsByClassName('e-treegridcollapse')[0]))) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n target = e.target;\n parentTarget = target.parentElement;\n var cellIndex = parentTarget.cellIndex;\n if (this.grid.getColumnByIndex(cellIndex).editType === 'dropdownedit' && isNullOrUndefined(this.grid.getColumnByIndex(cellIndex).edit['obj'])) {\n parentTarget = target;\n }\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex_1 = e.target.cellIndex;\n var row_1 = summaryElement.children[parseInt(cellIndex_1.toString(), 10)];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n target = e.target;\n parentTarget = target.parentElement;\n var cellIndex = parentTarget.cellIndex;\n if (this.grid.getColumnByIndex(cellIndex).editType === 'dropdownedit' && isNullOrUndefined(this.grid.getColumnByIndex(cellIndex).edit['obj'])) {\n parentTarget = target;\n }\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[parseInt(cIndex.toString(), 10)];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.infiniteScrollData = [];\n this.remoteCollapsedData = [];\n this.remoteExpandedData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.grid[\"\" + splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n var freezePresent = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'freeze';\n });\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || freezePresent.length) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n var IsRowDDInjected = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'rowDragAndDrop';\n });\n if (this.allowRowDragAndDrop || IsRowDDInjected.length) {\n if ((!isNullOrUndefined(this.toolbar) && (this.toolbar['includes']('Indent') ||\n this.toolbar['includes']('Outdent')))) {\n this.isIndentEnabled = true;\n }\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n if (this.isVue) {\n this.grid.isVue = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid.vueInstance = this.vueInstance;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[parseInt(i.toString(), 10)].member === 'virtualscroll') {\n modules[parseInt(i.toString(), 10)].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n var root = 'root';\n this.grid[\"\" + root] = this[\"\" + root] ? this[\"\" + root] : this;\n this.grid.appendTo(gridContainer);\n if (this.isIndentEnabled) {\n this.refreshToolbarItems();\n }\n this.wireEvents();\n this.renderComplete();\n var destroyTemplate = 'destroyTemplate';\n var destroyTemplateFn = this.grid[\"\" + destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[\"\" + destroyTemplate] = function (args, index) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[\"\" + portals]))) {\n _this.clearTemplate(args, index);\n }\n };\n };\n TreeGrid.prototype.refreshToolbarItems = function () {\n var toolbarElement = this.toolbarModule.getToolbar();\n var indentID = this.element.id + '_gridcontrol_indent';\n var outdentID = this.element.id + '_gridcontrol_outdent';\n var indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n var outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this, this.grid.serviceLocator);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.enableVirtualMaskRow = this.enableVirtualMaskRow;\n this.grid.loadingIndicator = this.loadingIndicator;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[\"\" + templateInstance] = this[\"\" + templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[\"\" + isJsComponent] = true;\n var enableHtmlSanitizer = 'enableHtmlSanitizer';\n this.grid[\"\" + enableHtmlSanitizer] = this.enableHtmlSanitizer;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.IsExpandCollapseClicked = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))\n && (!isNullOrUndefined(args.data) && args.data['hasChildRecords']) && !this.selectionSettings.checkboxOnly) {\n args.cancel = true;\n return;\n }\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowDeselecting = function (args) {\n _this.IsExpandCollapseClicked(args);\n _this.trigger(events.rowDeselecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[parseInt(i.toString(), 10)].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[\"\" + updateRowSelection](_this.getRows()[parseInt(i.toString(), 10)], _this.getCurrentViewRecords()[parseInt(i.toString(), 10)].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[\"\" + rowIndex]].classList.contains('e-summaryrow')) {\n args[\"\" + rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[\"\" + loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[parseInt(j.toString(), 10)]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[parseInt(j.toString(), 10)]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[parseInt(i.toString(), 10)])) {\n if (totalRows[parseInt(i.toString(), 10)].nextElementSibling) {\n _this.lastRowBorder(totalRows[parseInt(i.toString(), 10)], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[\"\" + action] === 'expand' || _this.dataResults[\"\" + action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[\"\" + refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[\"\" + updateRowSelection](_this.getRows()[parseInt(index.toString(), 10)], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[\"\" + dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var actualTarget = 'actualTarget';\n var target = _this.grid.selectionModule[\"\" + actualTarget];\n if (!isNullOrUndefined(target) && (target.classList.contains('e-treegridexpand') || target.classList.contains('e-treegridcollapse'))) {\n args.cancel = true;\n }\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n if (args.action.requestType !== 'infiniteScroll') {\n _this.infiniteScrollData = [];\n }\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[\"\" + prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n var _this = this;\n if (this.rowTemplate) {\n if (this.isReact && this.getContentTable().rows.length === 0) {\n setTimeout(function () {\n _this.treeColumnRowTemplate();\n if (_this.enableCollapseAll) {\n var currentData = _this.getCurrentViewRecords();\n var rows = _this.getContentTable().rows;\n for (var i = 0; i < rows.length; i++) {\n var args = { data: currentData[parseInt(i.toString(), 10)],\n row: rows[parseInt(i.toString(), 10)] };\n _this.renderModule.RowModifier(args);\n }\n }\n }, 0);\n }\n else {\n this.treeColumnRowTemplate();\n }\n }\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[\"\" + dataSource].json = extendArray(this.dataSource[\"\" + dataSource].json);\n this.grid.dataSource[\"\" + ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[\"\" + ready])) {\n this.grid.dataSource[\"\" + ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[\"\" + dataSource].offline = true;\n dm[\"\" + isDataAvailable] = true;\n dm[\"\" + dataSource].json = e.result;\n dm[\"\" + adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n if (isRemoteData(_this) && _this.enableVirtualization) {\n if (args.requestType === 'virtualscroll') {\n _this.query.expand('VirtualScrollingAction');\n _this.showSpinner();\n }\n else if (args.requestType === 'searching' && args.searchString === '') {\n _this.query.expand('ClearSearchingAction');\n }\n else if (args.action === 'clearFilter') {\n _this.query.expand('ClearFilteringAction');\n }\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 && _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (args.action === 'filter') {\n if (_this.filterModule['currentFilterObject'] !== '' && _this.enableVirtualization && !_this.initialRender && !(isRemoteData(_this) && _this.enableVirtualization)) {\n _this.expandAll();\n }\n }\n if (args.requestType === 'searching') {\n if (_this.searchSettings.key !== '' && _this.enableVirtualization && !_this.initialRender && !(isRemoteData(_this) && _this.enableVirtualization)) {\n _this.expandAll();\n }\n }\n if (args.action === 'clearFilter' && _this.enableCollapseAll) {\n _this.collapseAll();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var selectedItem_1 = [_this.selectedRecords];\n var actionArgs = {\n data: selectedItem_1,\n dropIndex: _this.dropIndex,\n dropPosition: _this.dropPosition,\n modifiedRecords: _this.modifiedRecords,\n requestType: _this.action,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n var currentPageItem = _this.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === selectedItem_1[0].uniqueID;\n });\n if (!currentPageItem.length) {\n _this.refreshToolbarItems();\n }\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = _this.modifiedRecords = [];\n }\n else {\n if (_this.grid.isFrozenGrid() && _this.enableVirtualization && args['tableName'] === 'movable') {\n var movableContent = _this.grid.element.querySelector('.' + literals.movableContent);\n var frozenContent = _this.grid.element.querySelector('.' + literals.frozenContent);\n movableContent.style.height = frozenContent.style.height = 'auto';\n }\n _this.trigger(events.actionComplete, args);\n }\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[\"\" + ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[parseInt(i.toString(), 10)]) === -1) {\n this.columns.push(keys[parseInt(i.toString(), 10)]);\n }\n }\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[\"\" + guid] = this.editSettings[\"\" + guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[parseInt(i.toString(), 10)]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n case 'Indent':\n case ContextMenuItems.RowIndent:\n items.push({ text: this.l10n.getConstant('RowIndent'),\n target: '.e-content', iconCss: 'e-indent e-icons', id: this.element.id + '_gridcontrol_cmenu_Indent' });\n break;\n case 'Outdent':\n case ContextMenuItems.RowOutdent:\n items.push({ text: this.l10n.getConstant('RowOutdent'),\n target: '.e-content', iconCss: 'e-outdent e-icons', id: this.element.id + '_gridcontrol_cmenu_Outdent' });\n break;\n default:\n items.push(this.contextMenuItems[parseInt(i.toString(), 10)]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n TreeGrid.prototype.getGridToolbar = function () {\n if (this.toolbar) {\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[parseInt(i.toString(), 10)]) {\n case 'Search':\n case ToolbarItem.Search:\n items.push('Search');\n break;\n case 'Print':\n case ToolbarItem.Print:\n items.push('Print');\n break;\n case 'ExpandAll':\n case ToolbarItem.ExpandAll:\n tooltipText = this.l10n.getConstant('ExpandAll');\n items.push({ text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-expand', id: this.element.id + '_gridcontrol_expandall' });\n break;\n case 'CollapseAll':\n case ToolbarItem.CollapseAll:\n tooltipText = this.l10n.getConstant('CollapseAll');\n items.push({ text: tooltipText,\n tooltipText: tooltipText, prefixIcon: 'e-collapse', id: this.element.id + '_gridcontrol_collapseall'\n });\n break;\n case 'Indent':\n case ToolbarItem.RowIndent:\n tooltipText = this.l10n.getConstant('RowIndent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-indent', id: this.element.id + '_gridcontrol_indent'\n });\n break;\n case 'Outdent':\n case ToolbarItem.RowOutdent:\n tooltipText = this.l10n.getConstant('RowOutdent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[parseInt(i.toString(), 10)]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n TreeGrid.prototype.getGridColumns = function (columns, isEmptyColumnModel, index) {\n if (isEmptyColumnModel === void 0) { isEmptyColumnModel = true; }\n if (index === void 0) { index = 0; }\n var column = columns;\n var stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n var treeGridColumn;\n var gridColumn;\n if (this.columnModel.length === 0) {\n index = index === 0 ? -1 : index;\n }\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[parseInt(i.toString(), 10)].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[parseInt(i.toString(), 10)] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[parseInt(i.toString(), 10)];\n }\n else {\n for (var _i = 0, _a = Object.keys(column[parseInt(i.toString(), 10)]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[\"\" + prop] = column[parseInt(i.toString(), 10)][\"\" + prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[parseInt(i.toString(), 10)][\"\" + prop])) {\n gridColumn[\"\" + prop] = this.getGridColumns(column[parseInt(i.toString(), 10)][\"\" + prop], false, this.columnModel.length - 1);\n treeGridColumn[\"\" + prop] = column[parseInt(i.toString(), 10)][\"\" + prop];\n }\n else if (this.initialRender && !isNullOrUndefined(treeColumn) && this.enablePersistence && prop === 'edit') {\n gridColumn[\"\" + prop] = treeGridColumn[\"\" + prop] = treeColumn[\"\" + prop];\n }\n else if (!(treeColumn) || prop !== 'sortComparer') {\n gridColumn[\"\" + prop] = treeGridColumn[\"\" + prop] = column[parseInt(i.toString(), 10)][\"\" + prop];\n }\n }\n }\n if (!treeGridColumn[\"\" + stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n if (!isNullOrUndefined(this.columnModel[this.treeColumnIndex]) && this.enableRtl) {\n if (gridColumn.field === this.columnModel[this.treeColumnIndex].field) {\n if (isNullOrUndefined(this.treeColumnTextAlign)) {\n this.treeColumnTextAlign = this.columnModel[this.treeColumnIndex].textAlign;\n this.treeColumnField = this.columnModel[this.treeColumnIndex].field;\n }\n gridColumn.textAlign = 'Right';\n }\n }\n }\n return gridColumnCollection;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeGridModel} newProp - properties details which has to be modified\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.onPropertyChanged = function (newProp) {\n var properties = Object.keys(newProp);\n var requireRefresh = false;\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'columns':\n this.grid.columns = this.getGridColumns(this.columns);\n break;\n case 'treeColumnIndex':\n this.grid.refreshColumns();\n break;\n case 'allowPaging':\n this.grid.allowPaging = this.allowPaging;\n break;\n case 'pageSettings':\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n requireRefresh = true;\n break;\n case 'enableVirtualization':\n this.grid.enableVirtualization = this.enableVirtualization;\n break;\n case 'enableColumnVirtualization':\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n break;\n case 'toolbar':\n this.grid.toolbar = this.getGridToolbar();\n break;\n case 'allowSelection':\n this.grid.allowSelection = this.allowSelection;\n break;\n case 'selectionSettings':\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n break;\n case 'allowSorting':\n this.grid.allowSorting = this.allowSorting;\n break;\n case 'allowMultiSorting':\n this.grid.allowMultiSorting = this.allowMultiSorting;\n break;\n case 'sortSettings':\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n break;\n case 'searchSettings':\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n break;\n case 'allowFiltering':\n this.grid.allowFiltering = this.allowFiltering;\n break;\n case 'filterSettings':\n if (!this.initialRender) {\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n }\n break;\n case 'showColumnMenu':\n this.grid.showColumnMenu = this.showColumnMenu;\n break;\n case 'allowRowDragAndDrop':\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n break;\n case 'aggregates':\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.aggregates = getActualProperties(this.aggregates);\n break;\n case 'enableInfiniteScrolling':\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n break;\n case 'dataSource':\n this.isLocalData = (!(this.dataSource instanceof DataManager) || (!isNullOrUndefined(this.dataSource.ready))\n || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.convertTreeData(this.dataSource);\n if (this.isLocalData) {\n if (isCountRequired(this)) {\n var count = getValue('count', this.dataSource);\n this.grid.dataSource = { result: this.flatData, count: count };\n }\n else {\n var data = this.dataSource;\n this.grid.dataSource = !(data instanceof DataManager) ?\n this.flatData : new DataManager(data.dataSource, data.defaultQuery, data.adaptor);\n }\n if (this.enableVirtualization) {\n this.grid.contentModule.isDataSourceChanged = true;\n }\n }\n else {\n this.bindedDataSource();\n if (this.enableVirtualization) {\n this.grid.contentModule.removeEventListener();\n this.grid.contentModule.eventListener('on');\n this.grid.contentModule.renderTable();\n }\n }\n break;\n case 'query':\n this.grid.query = this.query;\n break;\n case 'enableCollapseAll':\n if (newProp[\"\" + prop]) {\n this.collapseAll();\n }\n else {\n this.expandAll();\n }\n break;\n case 'expandStateMapping':\n this.grid.refresh();\n break;\n case 'gridLines':\n this.grid.gridLines = this.gridLines;\n break;\n case 'rowTemplate':\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n break;\n case 'frozenRows':\n this.grid.frozenRows = this.frozenRows;\n break;\n case 'frozenColumns':\n this.grid.frozenColumns = this.frozenColumns;\n break;\n case 'rowHeight':\n this.grid.rowHeight = this.rowHeight;\n break;\n case 'height':\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n this.grid.height = this.height;\n break;\n case 'width':\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.grid.width = this.width;\n break;\n case 'locale':\n this.grid.locale = this.locale;\n this.TreeGridLocale();\n this.grid.toolbar = this.getGridToolbar();\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableAdaptiveUI':\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n if (!isNullOrUndefined(this.treeColumnField)) {\n this.updateTreeColumnTextAlign();\n }\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'editSettings':\n if (this.grid.isEdit && this.grid.editSettings.mode === 'Normal' && newProp[\"\" + prop].mode &&\n (newProp[\"\" + prop].mode === 'Cell' || newProp[\"\" + prop].mode === 'Row')) {\n this.grid.closeEdit();\n }\n this.grid.editSettings = this.getGridEditSettings();\n break;\n }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n };\n TreeGrid.prototype.updateTreeColumnTextAlign = function () {\n var gridColumn = this.grid.getColumnByField(this.treeColumnField);\n gridColumn.textAlign = this.enableRtl ? 'Right' : this.treeColumnTextAlign;\n this.grid.refreshColumns();\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\n var treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n var hasTreeGridChild = treeGridElement.querySelector('.' + 'e-gridheader') &&\n treeGridElement.querySelector('.' + 'e-gridcontent') ? true : false;\n if (hasTreeGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n if (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n var modules = ['dataModule', 'sortModule', 'renderModule', 'filterModule', 'printModule', 'clipboardModule',\n 'excelExportModule', 'pdfExportModule', 'toolbarModule', 'summaryModule', 'reorderModule', 'resizeModule',\n 'pagerModule', 'keyboardModule', 'columnMenuModule', 'contextMenuModule', 'editModule', 'virtualScrollModule',\n 'selectionModule', 'detailRow', 'rowDragAndDropModule', 'freezeModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[parseInt(i.toString(), 10)]]) {\n this[modules[parseInt(i.toString(), 10)]] = null;\n }\n }\n this.element.innerHTML = '';\n this.grid = null;\n };\n /**\n * Update the TreeGrid model\n *\n * @method dataBind\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.dataBind = function () {\n if (isNullOrUndefined(this.grid)) {\n return;\n }\n if (!isNullOrUndefined(this.rowDropSettings.targetID) &&\n isNullOrUndefined(document.getElementById(this.grid.rowDropSettings.targetID))) {\n document.getElementById(this.rowDropSettings.targetID).id = this.grid.rowDropSettings.targetID;\n this.rowDropSettings.targetID = this.grid.rowDropSettings.targetID;\n }\n _super.prototype.dataBind.call(this);\n this.grid.dataBind();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns persist properties details\n * @hidden\n */\n TreeGrid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'pageSizeMode', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[parseInt(i.toString(), 10)]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[parseInt(i.toString(), 10)]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[parseInt(k.toString(), 10)];\n delete currentObject[\"\" + objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n TreeGrid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[parseInt(i.toString(), 10)]);\n this.ignoreInArrays(ignoreOnColumn, columns[parseInt(i.toString(), 10)].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[parseInt(i.toString(), 10)]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n if (isNullOrUndefined(column.template)) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[parseInt(i.toString(), 10)]];\n column.filter = {};\n }\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n var target = e.target;\n if ((target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && (!this.isEditCollapse && !this.grid.isEdit)) {\n this.expandCollapseRequest(target);\n }\n this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n TreeGrid.prototype.getPager = function () {\n return this.grid.getPager(); //get element from pager\n };\n /**\n * Adds a new record to the TreeGrid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\n * @returns {void}\n */\n TreeGrid.prototype.addRecord = function (data, index, position) {\n if (this.editModule) {\n var isAddedRowByMethod = 'isAddedRowByMethod';\n this.editModule[\"\" + isAddedRowByMethod] = true;\n this.editModule.addRecord(data, index, position);\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n * @returns {void}\n */\n TreeGrid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.grid.editModule) {\n this.grid.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n TreeGrid.prototype.updateRow = function (index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n var griddata = this.grid.getCurrentViewRecords()[parseInt(index.toString(), 10)];\n extend(griddata, data);\n this.grid.editModule.updateRow(index, griddata);\n }\n else {\n this.grid.editModule.updateRow(index, data);\n }\n }\n };\n /**\n * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldName - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\n * @returns {void}\n */\n TreeGrid.prototype.startEdit = function (row) {\n if (this.grid.editModule) {\n this.grid.editModule.startEdit(row);\n }\n };\n /**\n * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell edit.\n * @returns {void}\n */\n TreeGrid.prototype.editCell = function (rowIndex, field) {\n if (this.editModule) {\n this.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n * @returns {void}\n */\n TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRow = function (tr) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRow(tr);\n }\n };\n /**\n * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n * @returns {void}\n */\n TreeGrid.prototype.setCellValue = function (key, field, value) {\n this.grid.setCellValue(key, field, value);\n var rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n var record = this.getCurrentViewRecords()[parseInt(rowIndex.toString(), 10)];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n * @returns {void}\n */\n TreeGrid.prototype.setRowData = function (key, rowData) {\n var currentRecords = this.getCurrentViewRecords();\n var primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n var level = 0;\n var record = {};\n currentRecords.some(function (value) {\n if (value[\"\" + primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n this.grid.setRowData(key, rowData);\n var visibleRecords = this.getVisibleRecords();\n if (visibleRecords.length > 0 && key === (visibleRecords[visibleRecords.length - 1])[\"\" + primaryKey]) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(this.getRows()[currentRecords.indexOf(record)], sHeight <= clientHeight);\n }\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n TreeGrid.prototype.goToPage = function (pageNo) {\n if (this.grid.pagerModule) {\n this.grid.pagerModule.goToPage(pageNo);\n }\n };\n /**\n * Defines the text of external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n TreeGrid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.grid.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Gets a cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns cell element in grid content\n */\n TreeGrid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a Column by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.columnModel, function (item) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByUid = function (uid) {\n var Columns = this.initialRender ? this.grid.columns : this.columns;\n var columnModel = 'columnModel';\n if (this.grid.columns.length !== this.columnModel.length) {\n Columns = this.grid[\"\" + columnModel];\n }\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} - Returns column field name as collection\n */\n TreeGrid.prototype.getColumnFieldNames = function () {\n return this.grid.getColumnFieldNames();\n };\n /**\n * Gets the footer div of the TreeGrid.\n *\n * @returns {Element} - Returns footer content div element\n */\n TreeGrid.prototype.getFooterContent = function () {\n return this.grid.getFooterContent();\n };\n /**\n * Gets the footer table element of the TreeGrid.\n *\n * @returns {Element} - Returns footer content table element\n */\n TreeGrid.prototype.getFooterContentTable = function () {\n return this.grid.getFooterContentTable();\n };\n /**\n * Shows a column by its column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.showColumns = function (keys, showBy) {\n this.grid.showColumns(keys, showBy);\n this.updateColumnModel();\n };\n /**\n * Hides a column by column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.hideColumns = function (keys, hideBy) {\n this.grid.hideColumns(keys, hideBy);\n this.updateColumnModel();\n };\n /**\n * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByField = function (field) {\n return this.grid.getColumnHeaderByField(field);\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByUid = function (uid) {\n return this.grid.getColumnHeaderByUid(uid);\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByField = function (field) {\n return this.grid.getColumnIndexByField(field);\n };\n TreeGrid.prototype.getVirtualColIndexByUid = function (uid) {\n var columnModel = 'columnModel';\n var index = iterateArrayOrObject(this.grid[\"\" + columnModel], function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByUid = function (uid) {\n return this.grid.getColumnIndexByUid(uid);\n };\n /**\n * Gets the columns from the TreeGrid.\n *\n * @param {boolean} isRefresh - Defined whether to update DOM\n * @returns {Column[]} - Returns treegrid columns collection\n */\n TreeGrid.prototype.getColumns = function (isRefresh) {\n this.updateColumnModel(this.grid.getColumns(isRefresh));\n return this.columnModel;\n };\n TreeGrid.prototype.updateColumnModel = function (column) {\n var temp;\n var field;\n var gridColumns = isNullOrUndefined(column) ? this.grid.getColumns() : column;\n if (this.treeColumnIndex !== -1 && this.columnModel[this.treeColumnIndex] &&\n !isNullOrUndefined(this.columnModel[this.treeColumnIndex].template)) {\n temp = this.columnModel[this.treeColumnIndex].template;\n field = this.columnModel[this.treeColumnIndex].field;\n }\n var gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var _i = 0, _a = Object.keys(gridColumns[parseInt(i.toString(), 10)]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[\"\" + prop] = gridColumns[parseInt(i.toString(), 10)][\"\" + prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[parseInt(i.toString(), 10)].field && this.columnModel[parseInt(i.toString(), 10)].type !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[parseInt(i.toString(), 10)].template = temp;\n }\n }\n }\n var deepMerge = 'deepMerge';\n this[\"\" + deepMerge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n this.stackedHeader = true;\n }\n if (this.stackedHeader && this.allowResizing) {\n this.updateColumnsWidth(this.columns);\n }\n if (!this.stackedHeader) {\n merge(this.columns, this.columnModel);\n }\n this[\"\" + deepMerge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n TreeGrid.prototype.updateColumnsWidth = function (columns) {\n var _this = this;\n columns.forEach(function (column) {\n if (column.columns) {\n _this.updateColumnsWidth(column.columns);\n }\n else if (column.field) {\n var currentColumn = _this.grid.getColumnByField(column.field);\n column.width = currentColumn.width;\n }\n });\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n TreeGrid.prototype.getContent = function () {\n return this.grid.getContent();\n };\n TreeGrid.prototype.mergePersistTreeGridData = function () {\n var persist1 = 'mergePersistGridData';\n this.grid[\"\" + persist1].apply(this);\n };\n TreeGrid.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.grid[\"\" + persist2].apply(this, [storedColumn, columns]);\n };\n TreeGrid.prototype.updateTreeGridModel = function () {\n this.setProperties({ filterSettings: getObject('properties', this.grid.filterSettings) }, true);\n this.setProperties({ pageSettings: getObject('properties', this.grid.pageSettings) }, true);\n this.setProperties({ searchSettings: getObject('properties', this.grid.searchSettings) }, true);\n this.setProperties({ sortSettings: getObject('properties', this.grid.sortSettings) }, true);\n };\n /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n TreeGrid.prototype.getDataRows = function () {\n var dRows = [];\n var rows = this.grid.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (!rows[parseInt(i.toString(), 10)].classList.contains('e-summaryrow')) {\n dRows.push(rows[parseInt(i.toString(), 10)]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n var isSummaryRow = 'isSummaryRow';\n return this.grid.currentViewData.filter(function (e) { return isNullOrUndefined(e[\"\" + isSummaryRow]); });\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n if (!(this.dataSource instanceof DataManager)) {\n this.grid.dataSource = this.flatData;\n }\n else {\n this.grid.setProperties({\n dataSource: new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor)\n }, true);\n }\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\n * @isGenericType true\n */\n TreeGrid.prototype.getVisibleRecords = function () {\n var visibleRecords = [];\n var currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (var i = 0; i < currentViewRecords.length; i++) {\n visibleRecords.push(currentViewRecords[parseInt(i.toString(), 10)]);\n if (!currentViewRecords[parseInt(i.toString(), 10)].expanded) {\n i += findChildrenRecords(currentViewRecords[parseInt(i.toString(), 10)]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\n * @returns {void}\n */\n TreeGrid.prototype.refreshColumns = function (refreshUI) {\n if (isNullOrUndefined(refreshUI) || refreshUI) {\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshHeader = function () {\n this.grid.refreshHeader();\n };\n /**\n * Expands or collapse child records\n *\n * @param {HTMLElement} target - Expand collapse icon cell as target element\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.expandCollapseRequest = function (target) {\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n if ((this.getBatchChanges()[this.changedRecords].length || this.getBatchChanges()[this.deletedRecords].length ||\n this.getBatchChanges()[this.addedRecords].length) && this.editSettings.showConfirmDialog) {\n var dialogObj = this.grid.editModule[\"\" + obj];\n this.grid.editModule[\"\" + showDialog]('CancelEdit', dialogObj);\n this.targetElement = target;\n return;\n }\n }\n if (this.rowTemplate) {\n var rowInfo = target.closest('.e-treerowcell').parentElement;\n var record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo, record);\n }\n else {\n this.expandRow(rowInfo, record);\n }\n }\n else {\n var rowInfo_1 = this.grid.getRowInfo(target);\n var record = rowInfo_1.rowData;\n if (this.grid.isFrozenGrid() && this.enableVirtualization && !Object.keys(record).length) {\n var freezeRows = 'freezeRows';\n record = this.grid.contentModule[\"\" + freezeRows].filter(function (e) { return e.uid === rowInfo_1.row.getAttribute('data-uid'); })[0].data;\n }\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo_1.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo_1.row, record);\n }\n else {\n this.expandRow(rowInfo_1.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @param {Object} key - Primary key value\n * @param {number} level - Specifies the hierarchical level of the record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record, key, level) {\n var _this = this;\n var parentRec = this.parentData;\n if (!this.enableVirtualization) {\n parentRec = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n if (this.isExpandAll && !isRemoteData(this)) {\n var args = { data: parentRec, row: row, cancel: false };\n var pagerValuePresent = false;\n if (this.grid.pagerModule && !isNullOrUndefined(this.grid.pagerModule.pagerObj.pagerdropdownModule)) {\n pagerValuePresent = this.grid.pagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value ? true : false;\n }\n if (!this.isExpandingEventTriggered) {\n this.trigger(events.expanding, args, function (expandingArgs) {\n _this.expandAllPrevent = expandingArgs.cancel;\n if (!expandingArgs.cancel) {\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n _this.expandRows(row, record, parentRec, key, level);\n }\n });\n }\n else if ((!this.allowPaging || (pagerValuePresent && this.grid.pagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === 'All')) &&\n !this.expandAllPrevent && this.isExpandingEventTriggered) {\n this.expandRows(row, record, parentRec, key, level);\n }\n this.isExpandingEventTriggered = true;\n }\n else if (!this.isExpandAll || (this.isExpandAll && isRemoteData(this))) {\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n _this.expandRows(row, record, parentRec, key, level);\n }\n });\n }\n };\n // Internal method to handle the rows expand\n TreeGrid.prototype.expandRows = function (row, record, parentRec, key, level) {\n this.expandCollapse('expand', row, record);\n var children = 'Children';\n if (!(isRemoteData(this) && !isOffline(this)) && (!isCountRequired(this) || !isNullOrUndefined(record[\"\" + children]))) {\n var expandArgs = { data: record, row: row };\n this.setHeightForFrozenContent();\n if (!isNullOrUndefined(this.expandStateMapping)) {\n this.updateExpandStateMapping(expandArgs.data, true);\n }\n if (this.isExpandAll && !this.isExpandedEventTriggered) {\n this.isExpandedEventTriggered = true;\n expandArgs = { data: parentRec, row: row };\n this.trigger(events.expanded, expandArgs);\n }\n else if (!this.isExpandAll) {\n this.trigger(events.expanded, expandArgs);\n }\n }\n };\n TreeGrid.prototype.expandCollapseAllChildren = function (record, action, key, level) {\n if ((!isNullOrUndefined(key) && record[this.getPrimaryKeyFieldNames()[0]] !== key) ||\n (!isNullOrUndefined(level) && level !== record.level)) {\n return;\n }\n var records = findChildrenRecords(record).filter(function (e) {\n return e.hasChildRecords;\n });\n records.unshift(record);\n for (var i = 0; i < records.length; i++) {\n this.expandCollapse(action, null, records[parseInt(i.toString(), 10)]);\n }\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\n }\n };\n TreeGrid.prototype.getCollapseExpandRecords = function (row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n else if (isNullOrUndefined(record)) {\n if (this.detailTemplate) {\n record = this.grid.getCurrentViewRecords()[row.getAttribute('data-rowindex')];\n }\n else {\n if (this.enableVirtualization && this.isCollapseAll) {\n if (this.isExpandAll && row.rowIndex === -1) {\n record = this.grid.getCurrentViewRecords()[parseInt(row.getAttribute('data-rowindex'), 10)];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n else {\n record = this.grid.getCurrentViewRecords()[parseInt(row.getAttribute('data-rowindex'), 10)];\n }\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n var parentRec = this.parentData;\n if (!this.enableVirtualization) {\n parentRec = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n record = this.getCollapseExpandRecords(row, record);\n if (this.isCollapseAll && !isRemoteData(this)) {\n var args = { data: parentRec, row: row, cancel: false };\n if (!this.isCollapsingEventTriggered) {\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n _this.collapseAllPrevent = collapsingArgs.cancel;\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.collapseRows(row, record, parentRec, key);\n }\n });\n }\n else if (!this.allowPaging && !this.collapseAllPrevent && this.isCollapsingEventTriggered) {\n this.collapseRows(row, record, parentRec, key);\n }\n this.isCollapsingEventTriggered = true;\n }\n else if (!this.isCollapseAll || (this.isCollapseAll && isRemoteData(this))) {\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n _this.collapseRows(row, record, parentRec, key);\n }\n });\n }\n };\n // Internal method for handling the rows collapse\n TreeGrid.prototype.collapseRows = function (row, record, parentRec, key) {\n this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(this)) {\n this.setHeightForFrozenContent();\n if (!isNullOrUndefined(this.expandStateMapping)) {\n this.updateExpandStateMapping(collapseArgs.data, false);\n }\n if (this.isCollapseAll && !this.isCollapsedEventTriggered) {\n this.isCollapsedEventTriggered = true;\n collapseArgs = { data: parentRec, row: row };\n this.trigger(events.collapsed, collapseArgs);\n }\n else if (!this.isCollapseAll) {\n this.trigger(events.collapsed, collapseArgs);\n }\n if (this.enableInfiniteScrolling) {\n var scrollHeight = this.grid.getContent().firstElementChild.scrollHeight;\n var scrollTop = this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < this.grid.getRowHeight() + +this.height) {\n this.grid.getContent().firstElementChild.scrollBy(0, this.grid.getRowHeight());\n }\n }\n }\n };\n TreeGrid.prototype.updateExpandStateMapping = function (record, state) {\n var totalRecords = record;\n if (totalRecords.length) {\n for (var i = 0; i < totalRecords.length; i++) {\n totalRecords[parseInt(i.toString(), 10)][this.expandStateMapping] = state;\n editAction({ value: totalRecords[parseInt(i.toString(), 10)], action: 'edit' }, this, this.isSelfReference, totalRecords[parseInt(i.toString(), 10)].index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n }\n else {\n record[\"\" + this.expandStateMapping] = state;\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandAction(rec, null, level, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var record = getObject('records', rec);\n this.expandAction(record, null, level);\n }\n };\n /**\n * Expands the records by given primary key value\n *\n * @param {Object} key - Expands the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.expandByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Expand');\n };\n TreeGrid.prototype.expandAction = function (record, key, level, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n var _loop_1 = function (i) {\n if (!isNullOrUndefined(record[parseInt(i.toString(), 10)].parentItem)) {\n var puniqueID_1 = record[parseInt(i.toString(), 10)].parentItem.uniqueID;\n var parentItem = this_1.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_1)) {\n parentItem = this_1.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n }\n if (parentItem[0].expanded === false) {\n record.push(parentItem[0]);\n parentItem[0].expanded = true;\n }\n else {\n if (!getExpandStatus(this_1, parentItem[0], this_1.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_1.expandRow(null, record[parseInt(i.toString(), 10)], key, level);\n }\n };\n var this_1 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_1(i);\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to be collapsed\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseAction(record, null, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var records = getObject('records', rec);\n this.collapseAction(records);\n }\n };\n /**\n * Collapses the records by given primary key value\n *\n * @param {Object} key - Collapses the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n };\n TreeGrid.prototype.expandCollapseActionByKey = function (key, action) {\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n var dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n var rec = dataSource.filter(function (e) {\n return e[\"\" + primaryKeyField].toString() === key.toString();\n });\n if (action === 'Expand') {\n this.expandAction(rec, key, null);\n }\n else {\n this.collapseAction(rec, key);\n }\n }\n };\n TreeGrid.prototype.collapseAction = function (record, key, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (var i = 0; i < record.length; i++) {\n this.collapseRow(null, record[parseInt(i.toString(), 10)], key);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[\"\" + endIndex] = -1;\n }\n };\n /**\n * Expands All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.isExpandedEventTriggered = false;\n this.isExpandingEventTriggered = false;\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.isCollapsedEventTriggered = false;\n this.isCollapsingEventTriggered = false;\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n if (!isNullOrUndefined(this.getCurrentViewRecords()[rows[parseInt(i.toString(), 10)].rowIndex])) {\n this.collapseRow(rows[parseInt(i.toString(), 10)]);\n }\n }\n else {\n if (!this.enableVirtualization) {\n this.expandRow(rows[parseInt(i.toString(), 10)]);\n }\n else if (rows[0].getAttribute('aria-expanded') !== 'true') {\n this.expandRow(rows[0]);\n }\n }\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[parseInt(i.toString(), 10)]);\n }\n else {\n this.expandRow(rows[parseInt(i.toString(), 10)]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var _this = this;\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.grid.currentViewData.filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if ((!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) || (action === 'collapse' || (this.isExpandAll && this.loadChildOnDemand) && !isRemoteData(this) && this.isSelfReference && isCountRequired(this))) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.grid.currentViewData.indexOf(record);\n row = gridRows[parseInt(rowIndex.toString(), 10)];\n }\n else {\n rowIndex = +row.getAttribute('data-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n row.querySelectorAll('.e-treerowcell')[0].setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n var lastrowIdx = this.getVisibleRecords()[this.getVisibleRecords().length - 1]['index'];\n var lastRow = this.getRowByIndex(lastrowIdx);\n if (this.grid.getContentTable().clientHeight <= this.grid.getContent().clientHeight && !isNullOrUndefined(lastRow) && !lastRow.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(lastRow, true);\n }\n }\n if (isCountRequired(this) && action === 'expand') {\n var currentData = this.getCurrentViewRecords();\n var visibleRecords = currentData.filter(function (e) {\n return getExpandStatus(_this, e, _this.parentData);\n });\n this.dataResults.result = visibleRecords;\n }\n if (!isNullOrUndefined(targetEle) && targetEle.closest('.e-treerowcell').classList.contains('e-cellselectionbackground')) {\n targetEle.closest('.e-treerowcell').classList.remove('e-cellselectionbackground');\n targetEle.closest('.e-treerowcell').removeAttribute('aria-selected');\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[parseInt(i.toString(), 10)])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[parseInt(i.toString(), 10)], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n if (expandingArgs.requestType === 'collapse' && isCountRequired(this)) {\n var flatDataRecords = this.flatData.slice();\n for (var i = 0; i < flatDataRecords.length; i++) {\n if (flatDataRecords[parseInt(i.toString(), 10)]['parentUniqueID'] === expandingArgs.data['uniqueID']) {\n flatDataRecords.splice(i, 1);\n i = i - 1;\n }\n }\n this.dataResults.result = flatDataRecords;\n return;\n }\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[\"\" + childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n if (isCountRequired(_this)) {\n _this.flatData = _this.dataResults.result;\n }\n if (_this.enableInfiniteScrolling && isCountRequired(_this)) {\n _this.flatData = _this.infiniteScrollData;\n }\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[parseInt(i.toString(), 10)].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[parseInt(i.toString(), 10)]) {\n childData[parseInt(i.toString(), 10)].level = record.level + 1;\n childData[parseInt(i.toString(), 10)].index = Math.ceil(Math.random() * 1000);\n childData[parseInt(i.toString(), 10)].parentItem = extend({}, record);\n childData[parseInt(i.toString(), 10)].taskData = extend({}, childData[parseInt(i.toString(), 10)]);\n delete childData[parseInt(i.toString(), 10)].parentItem.childRecords;\n delete childData[parseInt(i.toString(), 10)].taskData.parentItem;\n childData[parseInt(i.toString(), 10)].parentUniqueID = record.uniqueID;\n childData[parseInt(i.toString(), 10)].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[parseInt(i.toString(), 10)].uniqueID, childData[parseInt(i.toString(), 10)], _this);\n if (!isNullOrUndefined(childData[parseInt(i.toString(), 10)][_this.childMapping]) ||\n (childData[parseInt(i.toString(), 10)][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[parseInt(i.toString(), 10)].hasChildRecords = true;\n }\n if (isCountRequired(_this) && record[_this.childMapping] && record[_this.childMapping][parseInt(i.toString(), 10)]) {\n currentData.splice(index + 1 + i, 0, childData[parseInt(i.toString(), 10)]);\n }\n else {\n currentData.splice(index + 1 + i, record[_this.childMapping] &&\n record[_this.childMapping][parseInt(i.toString(), 10)] ? 1 : 0, childData[parseInt(i.toString(), 10)]);\n }\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[parseInt(index.toString(), 10)][\"\" + _this.childMapping] = childData;\n currentData[parseInt(index.toString(), 10)].childRecords = childData;\n currentData[parseInt(index.toString(), 10)].expanded = true;\n setValue('uniqueIDCollection.' + currentData[parseInt(index.toString(), 10)].uniqueID, currentData[parseInt(index.toString(), 10)], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[parseInt(j.toString(), 10)]);\n }\n }\n if (isCountRequired(_this) && _this.loadChildOnDemand && expandingArgs.requestType === 'expand') {\n _this.dataResults['expandRecord'] = {};\n _this.dataResults['expandRecord'] = expandingArgs.data;\n }\n _this.isExpandRefresh = true;\n var scrollHeightBeforeRefresh = _this.getContentTable().parentElement.scrollTop;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n if (_this.enableInfiniteScrolling) {\n _this.getContentTable().parentElement.scrollTop = scrollHeightBeforeRefresh;\n }\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n var fetchRemoteChildData = 'fetchRemoteChildData';\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return ((r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1))) || (r.querySelector('.e-gridrowindex' + record.index + 'level0' + '.e-summarycell')));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else if (action === 'collapse' && this.enableVirtualization) {\n this.dataModule[\"\" + fetchRemoteChildData]({ action: action, record: args.data, rows: null, parentRow: args.row });\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.grid.currentViewData.filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[parseInt(i.toString(), 10)][\"\" + primaryKeyField]);\n rows.push(this.getRows()[parseInt(rowIndex.toString(), 10)]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var gridRowsObject = this.grid.getRowsObject();\n var currentViewData = this.grid.currentViewData;\n var currentRecord = currentViewData.filter(function (e) {\n return e.uniqueID === record.uniqueID;\n });\n var currentIndex = currentViewData.indexOf(currentRecord[0]);\n if (!isNullOrUndefined(gridRowsObject[parseInt(currentIndex.toString(), 10)].visible) &&\n gridRowsObject[parseInt(currentIndex.toString(), 10)].visible !== false) {\n gridRowsObject[parseInt(currentIndex.toString(), 10)].visible = true;\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[parseInt(i.toString(), 10)])) {\n rows[parseInt(i.toString(), 10)].style.display = displayAction;\n }\n if (!isNullOrUndefined(rows[parseInt(i.toString(), 10)]) && !this.allowPaging && !(this.enableVirtualization\n || this.enableInfiniteScrolling || isRemoteData(this) || isCountRequired(this))) {\n gridRowsObject[rows[parseInt(i.toString(), 10)].rowIndex].visible = displayAction !== 'none' ? true : false;\n var parentRecord = currentViewData.filter(function (e) {\n return e.uniqueID === currentRecord[0].parentUniqueID;\n });\n if (!isNullOrUndefined(parentRecord[0]) && gridRows[currentViewData.indexOf(parentRecord[0])].getElementsByClassName('e-treegridcollapse').length) {\n gridRowsObject[parseInt(currentIndex.toString(), 10)].visible = false;\n }\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[parseInt(i.toString(), 10)].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[parseInt(i.toString(), 10)].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[parseInt(i.toString(), 10)] });\n if ((!isNullOrUndefined(childRecords[parseInt(i.toString(), 10)].childRecords) && childRecords[parseInt(i.toString(), 10)].childRecords.length > 0) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[parseInt(i.toString(), 10)].expanded) || childRecords[parseInt(i.toString(), 10)].expanded)) {\n this.expandCollapse(action, rows[parseInt(i.toString(), 10)], childRecords[parseInt(i.toString(), 10)], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[parseInt(i.toString(), 10)], childRecords[parseInt(i.toString(), 10)], true);\n }\n }\n }\n for (var i = 0; i < detailrows.length; i++) {\n if (!isNullOrUndefined(detailrows[parseInt(i.toString(), 10)]) && !this.allowPaging && !(this.enableVirtualization ||\n this.enableInfiniteScrolling || isRemoteData(this) || isCountRequired(this))) {\n gridRowsObject[detailrows[parseInt(i.toString(), 10)].rowIndex].visible = displayAction !== 'none' ? true : false;\n detailrows[parseInt(i.toString(), 10)].style.display = displayAction;\n }\n }\n if (!this.allowPaging && !(this.enableVirtualization || this.enableInfiniteScrolling || isRemoteData(this)\n || isCountRequired(this))) {\n this.grid.notify('refresh-Expand-and-Collapse', { rows: this.grid.getRowsObject() });\n }\n };\n TreeGrid.prototype.updateAltRow = function (rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n var visibleRowCount = 0;\n for (var i = 0; rows && i < rows.length; i++) {\n var gridRow = rows[parseInt(i.toString(), 10)];\n if (gridRow.style.display !== 'none') {\n if (gridRow.classList.contains('e-altrow')) {\n removeClass([gridRow], 'e-altrow');\n }\n if (visibleRowCount % 2 !== 0 && !gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n addClass([gridRow], 'e-altrow');\n }\n if (!gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n visibleRowCount++;\n }\n }\n }\n }\n };\n TreeGrid.prototype.treeColumnRowTemplate = function () {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[parseInt(i.toString(), 10)]\n .cells[this.treeColumnIndex];\n var row = rows[parseInt(i.toString(), 10)];\n var rowData = this.grid.getRowsObject()[parseInt(i.toString(), 10)].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n var rows = rowDetails.rows;\n var row;\n var childRecord;\n var movablerows = [];\n var rightrows = [];\n var freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n rows[parseInt(i.toString(), 10)].style.display = 'none';\n row = rows[parseInt(i.toString(), 10)];\n var collapsingTd = rows[parseInt(i.toString(), 10)].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[parseInt(i.toString(), 10)].style.display = 'none';\n rightrows[parseInt(i.toString(), 10)].style.display = 'none';\n if (!rows[parseInt(i.toString(), 10)].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[parseInt(i.toString(), 10)].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[parseInt(i.toString(), 10)];\n }\n else if (rightrows[parseInt(i.toString(), 10)].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[parseInt(i.toString(), 10)];\n }\n }\n }\n if (row.querySelector('.e-treecolumn-container .e-treegridexpand')) {\n var expandElement = row.querySelector('.e-treecolumn-container .e-treegridexpand');\n childRecord = this.rowTemplate ? this.grid.getCurrentViewRecords()[rows[parseInt(i.toString(), 10)].rowIndex] :\n this.grid.getRowObjectFromUID(rows[parseInt(i.toString(), 10)].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(expandElement) && childRecord.expanded) {\n removeClass([expandElement], 'e-treegridexpand');\n addClass([expandElement], 'e-treegridcollapse');\n }\n var cRow = [];\n var eRows = this.getRows();\n for (var i_1 = 0; i_1 < eRows.length; i_1++) {\n if (eRows[parseInt(i_1.toString(), 10)].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[parseInt(i_1.toString(), 10)]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, false);\n }\n }\n }\n };\n /**\n * Method to sanitize html element\n *\n * @param {any} value - Specifies the html value to sanitize\n * @returns {any} Returns the sanitized html value\n * @hidden\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n TreeGrid.prototype.sanitize = function (value) {\n if (this.enableHtmlSanitizer && typeof (value) === 'string') {\n return SanitizeHtmlHelper.sanitize(value);\n }\n return value;\n };\n /**\n * Updates the rows and cells\n *\n * @param {Object[]} records - Updates the given records\n * @param {HTMLTableRowElement[]} rows - Updates the given rows\n * @param {number} index - Updates the given cell index\n * @returns {void}\n */\n TreeGrid.prototype.updateRowAndCellElements = function (records, rows, index) {\n for (var i = 0; i < records.length; i++) {\n this.renderModule.cellRender({\n data: records[parseInt(i.toString(), 10)], cell: rows[parseInt(i.toString(), 10)].cells[parseInt(index.toString(), 10)],\n column: this.grid.getColumns()[this.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this['action'] === 'indenting' || this['action'] === 'outdenting') {\n this.renderModule.RowModifier({\n data: records[parseInt(i.toString(), 10)], row: rows[parseInt(i.toString(), 10)]\n });\n }\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.addListener = function () {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n };\n TreeGrid.prototype.updateResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off('updateResults', this.updateResultModel);\n this.grid.off('initial-end', this.afterGridRender);\n };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\n * @returns {void}\n */\n TreeGrid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.grid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearFiltering = function () {\n this.grid.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.grid.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\n * @returns {void}\n */\n TreeGrid.prototype.paste = function (data, rowIndex, colIndex) {\n this.clipboardModule.paste(data, rowIndex, colIndex);\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\n */\n TreeGrid.prototype.getSelectedRows = function () {\n return this.grid.getSelectedRows();\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns movable cell element from the indexes passed\n */\n TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets all the TreeGrid's movable table data rows.\n *\n * @returns {Element[]} - Returns element collection of movable rows\n */\n TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns movable row based on index passed\n */\n TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(index);\n };\n /**\n * Gets the Tree Grid's frozen right content rows from frozen Tree Grid.\n *\n * @returns {Element[]} returns the element\n */\n TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(index);\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n TreeGrid.prototype.getMovableColumnsCount = function () {\n return this.grid.getMovableColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n TreeGrid.prototype.getFrozenLeftColumnsCount = function () {\n return this.grid.getFrozenLeftColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n TreeGrid.prototype.getFrozenRightColumnsCount = function () {\n return this.grid.getFrozenRightColumnsCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenLeftColumns = function () {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenRightColumns = function () {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n TreeGrid.prototype.getVisibleMovableCount = function () {\n return this.grid.getVisibleMovableCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n TreeGrid.prototype.getVisibleFrozenRightCount = function () {\n return this.grid.getVisibleFrozenRightCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n TreeGrid.prototype.getVisibleFrozenLeftCount = function () {\n return this.grid.getVisibleFrozenLeftCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getMovableColumns = function () {\n this.updateColumnModel(this.grid.getMovableColumns());\n return this.columnModel;\n };\n /**\n * Gets the number of frozen column in tree grid\n *\n * @hidden\n * @returns {number} - Returns frozen column count\n */\n TreeGrid.prototype.getFrozenColumns = function () {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n };\n TreeGrid.prototype.getFrozenCount = function (cols, cnt) {\n for (var j = 0, len = cols.length; j < len; j++) {\n if (cols[parseInt(j.toString(), 10)].columns) {\n cnt = this.getFrozenCount(cols[parseInt(j.toString(), 10)].columns, cnt);\n }\n else {\n if (cols[parseInt(j.toString(), 10)].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n };\n /**\n * Indents the record to one level of hierarchy. Moves the selected row as the last child of its previous row.\n *\n * @param {Object} record – specifies the record to do indented\n * @returns {void}\n */\n TreeGrid.prototype.indent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'indent');\n }\n };\n /**\n * Outdent the record to one level of hierarchy. Moves the selected row as sibling to its parent row.\n *\n * @param {Object} record – specifies the record to do outdented\n * @returns {void}\n */\n TreeGrid.prototype.outdent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'outdent');\n }\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Complex({}, LoadingIndicator)\n ], TreeGrid.prototype, \"loadingIndicator\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableVirtualMaskRow\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Configures column collection in Gantt.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n merge(this, options);\n }\n return Column;\n}());\nexport { Column };\n","import { TreeGrid } from '@syncfusion/ej2-treegrid';\nimport { createElement, isNullOrUndefined, getValue, extend, EventHandler, deleteObject, remove } from '@syncfusion/ej2-base';\nimport { setValue } from '@syncfusion/ej2-base';\nimport { Deferred, Query } from '@syncfusion/ej2-data';\nimport { Column as GanttColumn } from '../models/column';\nimport { isCountRequired } from './utils';\n/**\n * TreeGrid related code goes here\n *\n * @param {object} args .\n * @returns {void} .\n */\nvar GanttTreeGrid = /** @class */ (function () {\n function GanttTreeGrid(parent) {\n var _this = this;\n this.previousScroll = { top: 0, left: 0 };\n this.queryCellInfo = function (args) {\n _this.parent.trigger('queryCellInfo', args);\n };\n this.headerCellInfo = function (args) {\n _this.parent.trigger('headerCellInfo', args);\n };\n this.rowDataBound = function (args) {\n _this.parent.trigger('rowDataBound', args);\n };\n this.columnMenuOpen = function (args) {\n _this.parent.notify('columnMenuOpen', args);\n _this.parent.trigger('columnMenuOpen', args);\n document.querySelector(\".e-colmenu\").addEventListener('mousemove', function (event) {\n var filPopOptions = document.querySelector(\".e-filter-popup\");\n var filOptions = document.querySelector(\".e-filter-item\");\n if (!isNullOrUndefined(filPopOptions)) {\n if (!filOptions.classList.contains('e-focused')) {\n remove(_this.parent.filterModule.filterMenuElement);\n }\n }\n });\n };\n this.columnMenuClick = function (args) {\n _this.parent.trigger('columnMenuClick', args);\n };\n // eslint-disable-next-line valid-jsdoc\n this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'ganttProperties'];\n for (var i = 0; i < keys.length; i++) {\n /* eslint-disable-next-line */\n var oldKey = old[keys[i]] instanceof Date ? new Date(old[keys[i]]).getTime() : old[keys[i]];\n /* eslint-disable-next-line */\n var currentKey = current[keys[i]] instanceof Date ? new Date(current[keys[i]]).getTime() : current[keys[i]];\n if (oldKey !== currentKey && excludeKeys.indexOf(keys[i]) === -1) {\n _this.parent.modifiedRecords.push(current);\n isEqual = false;\n break;\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n this.parent = parent;\n this.parent.treeGrid = new TreeGrid();\n this.parent.treeGrid.allowSelection = false;\n this.parent.treeGrid.allowKeyboard = this.parent.allowKeyboard;\n this.parent.treeGrid['${enableHtmlSanitizer}'] = this.parent.enableHtmlSanitizer;\n this.parent.treeGrid.enableImmutableMode = this.parent.enableImmutableMode;\n this.treeGridColumns = [];\n if (!this.parent.isLocaleChanged && this.parent.isLoad) {\n this.parent.previousGanttColumns = extend([], [], this.parent.columns, true);\n }\n this.validateGanttColumns();\n if (this.parent.isLocaleChanged) {\n this.parent.isLocaleChanged = false;\n }\n this.addEventListener();\n }\n GanttTreeGrid.prototype.addEventListener = function () {\n this.parent.on('renderPanels', this.createContainer, this);\n this.parent.on('chartScroll', this.updateScrollTop, this);\n this.parent.on('destroy', this.destroy, this);\n this.parent.treeGrid.on('renderReactTemplate', this.renderReactTemplate, this);\n };\n GanttTreeGrid.prototype.renderReactTemplate = function (args) {\n var portals = 'portals';\n this.parent[portals] = args;\n this.parent.renderTemplates();\n };\n GanttTreeGrid.prototype.createContainer = function () {\n //let height: number = this.parent.ganttHeight - this.parent.toolbarModule.element.offsetHeight - 46;\n this.treeGridElement = createElement('div', {\n id: 'treeGrid' + this.parent.element.id, className: 'e-gantt-tree-grid'\n // styles: 'height:' + height + 'px;'\n });\n var tempHeader = createElement('div', { className: 'e-gantt-temp-header' });\n this.parent.treeGridPane.appendChild(this.treeGridElement);\n this.treeGridElement.appendChild(tempHeader);\n this.parent.treeGridPane.classList.add('e-temp-content');\n };\n /**\n * Method to initiate TreeGrid\n *\n * @returns {void} .\n */\n GanttTreeGrid.prototype.renderTreeGrid = function () {\n this.composeProperties();\n this.bindEvents();\n var root = 'root';\n this.parent.treeGrid[root] = this.parent[root] ? this.parent[root] : this.parent;\n this.parent.treeGrid.appendTo(this.treeGridElement);\n if (this.parent.treeGrid.grid && this.parent.toolbarModule && this.parent.isReact) {\n this.parent.treeGrid.grid.portals = this.parent.portals;\n }\n this.wireEvents();\n };\n GanttTreeGrid.prototype.composeProperties = function () {\n this.parent.treeGrid.showColumnMenu = this.parent.showColumnMenu;\n this.parent.treeGrid.enableCollapseAll = this.parent.collapseAllParentTasks;\n this.parent.treeGrid.columnMenuItems = this.parent.columnMenuItems;\n this.parent.treeGrid.enableRtl = this.parent.enableRtl;\n this.parent.treeGrid.childMapping = isNullOrUndefined(this.parent.taskFields.child) ? '' : this.parent.taskFields.child;\n this.parent.treeGrid.treeColumnIndex = this.parent.treeColumnIndex;\n this.parent.treeGrid.columns = this.treeGridColumns;\n this.parent.treeGrid.loadingIndicator = this.parent.loadingIndicator;\n this.parent.treeGrid.enableVirtualMaskRow = this.parent.enableVirtualMaskRow;\n if (this.parent.dataSource instanceof Object && isCountRequired(this.parent)) {\n // In order to bind the observable data at load time, hasChildMapping is necessary to be mapped.\n this.parent.treeGrid.hasChildMapping = 'isParent';\n var count = getValue('count', this.parent.dataSource);\n this.parent.treeGrid.dataSource = { result: this.parent.flatData, count: count };\n }\n else {\n this.parent.treeGrid.hasChildMapping = null;\n this.parent.treeGrid.dataSource = this.parent.flatData;\n }\n this.parent.treeGrid.expandStateMapping = this.parent.taskFields.expandState;\n var isGantt = 'isGantt';\n this.parent.treeGrid[isGantt] = true;\n this.parent.treeGrid.rowHeight = this.parent.rowHeight;\n this.parent.treeGrid.gridLines = this.parent.gridLines;\n if (this.parent.searchSettings.fields.length !== 0 || this.parent.searchSettings.key !== '') {\n this.parent.treeGrid.searchSettings = this.parent.searchSettings;\n }\n var isJsComponent = 'isJsComponent';\n this.parent.treeGrid[isJsComponent] = true;\n var toolbarHeight = 0;\n if (!isNullOrUndefined(this.parent.toolbarModule) && !isNullOrUndefined(this.parent.toolbarModule.element)) {\n toolbarHeight = this.parent.toolbarModule.element.offsetHeight;\n }\n this.parent.treeGrid.height =\n this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['offsetHeight'] - 19;\n };\n GanttTreeGrid.prototype.getContentDiv = function () {\n return this.treeGridElement.querySelector('.e-content');\n };\n GanttTreeGrid.prototype.getHeaderDiv = function () {\n return this.treeGridElement.querySelector('.e-headercontent');\n };\n GanttTreeGrid.prototype.getScrollbarWidth = function () {\n var outer = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.overflow = 'scroll';\n outer.style.msOverflowStyle = 'scrollbar';\n var inner = document.createElement('div');\n outer.appendChild(inner);\n this.parent.element.appendChild(outer);\n var scrollbarWidth = (outer.offsetWidth - inner.offsetWidth);\n outer.parentNode.removeChild(outer);\n return scrollbarWidth;\n };\n /**\n * @returns {void} .\n * @private\n */\n GanttTreeGrid.prototype.ensureScrollBar = function () {\n var content = this.getContentDiv();\n var headerDiv = this.getHeaderDiv();\n var scrollWidth = this.getScrollbarWidth();\n var isMobile = /Android|Mac|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n if (scrollWidth !== 0) {\n content.style.cssText += 'width: calc(100% + ' + (scrollWidth + 1) + 'px);'; //actual scrollbar width 17 px but here scrollbar width set to 16px hence adding increment of 1\n }\n else {\n content.classList.add('e-gantt-scroll-padding');\n }\n if (scrollWidth === 0 && isMobile) {\n headerDiv.style.cssText += 'width: calc(100% + 17px);';\n }\n };\n GanttTreeGrid.prototype.bindEvents = function () {\n this.parent.treeGrid.dataBound = this.dataBound.bind(this);\n this.parent.treeGrid.collapsing = this.collapsing.bind(this);\n this.parent.treeGrid.collapsed = this.collapsed.bind(this);\n this.parent.treeGrid.expanding = this.expanding.bind(this);\n this.parent.treeGrid.expanded = this.expanded.bind(this);\n this.parent.treeGrid.actionBegin = this.actionBegin.bind(this);\n this.parent.treeGrid.actionComplete = this.treeActionComplete.bind(this);\n this.parent.treeGrid.created = this.created.bind(this);\n this.parent.treeGrid.actionFailure = this.actionFailure.bind(this);\n this.parent.treeGrid.queryCellInfo = this.queryCellInfo.bind(this);\n this.parent.treeGrid.headerCellInfo = this.headerCellInfo.bind(this);\n this.parent.treeGrid.rowDataBound = this.rowDataBound.bind(this);\n this.parent.treeGrid.columnMenuOpen = this.columnMenuOpen.bind(this);\n this.parent.treeGrid.columnMenuClick = this.columnMenuClick.bind(this);\n this.parent.treeGrid.beforeDataBound = this.beforeDataBound.bind(this);\n this.parent.treeGrid.dataStateChange = this.dataStateChange.bind(this);\n };\n GanttTreeGrid.prototype.beforeDataBound = function (args) {\n this.parent.updatedRecords = this.parent.virtualScrollModule && this.parent.enableVirtualization ?\n getValue('virtualScrollModule.visualData', this.parent.treeGrid) : getValue('result', args);\n if (this.parent.virtualScrollModule && this.parent.enableVirtualization) {\n this.parent.updateContentHeight(args);\n }\n setValue('contentModule.objectEqualityChecker', this.objectEqualityChecker, this.parent.treeGrid.grid);\n };\n GanttTreeGrid.prototype.dataBound = function (args) {\n this.ensureScrollBar();\n this.parent.treeDataBound(args);\n if (this.parent.isVirtualScroll) {\n if ((this.parent.enableVirtualMaskRow && this.parent.enableVirtualization) ||\n (this.parent.enableVirtualization && !this.parent.enableVirtualMaskRow && this.parent.loadingIndicator.indicatorType === \"Shimmer\") ||\n (this.parent.loadingIndicator.indicatorType === \"Shimmer\")) {\n this.parent.hideMaskRow();\n }\n this.parent.isVirtualScroll = false;\n }\n this.prevCurrentView = extend([], [], this.parent.currentViewData, true);\n };\n GanttTreeGrid.prototype.dataStateChange = function (args) {\n if (args.action && args.action.requestType === 'refresh') {\n this.parent.treeGrid.dataSource = {\n result: getValue('result', this.parent.treeGrid.dataSource),\n count: getValue('count', this.parent.treeGrid.dataSource)\n };\n }\n this.parent.trigger('dataStateChange', args);\n };\n GanttTreeGrid.prototype.collapsing = function (args) {\n // Collapsing event\n var callBackPromise = new Deferred();\n var collapsingArgs;\n var record = getValue('data', args);\n var recordLength = record.length;\n if (!this.parent.ganttChartModule.isExpandCollapseFromChart) {\n if (!isNullOrUndefined(recordLength)) {\n for (var i = 0; i < recordLength; i++) {\n collapsingArgs = this.createExpandCollapseArgs(args, record[i]);\n this.parent.ganttChartModule.collapseGanttRow(collapsingArgs);\n }\n setValue('cancel', getValue('cancel', collapsingArgs), args);\n }\n else {\n collapsingArgs = this.createExpandCollapseArgs(args, null);\n this.parent.ganttChartModule.collapseGanttRow(collapsingArgs);\n setValue('cancel', getValue('cancel', collapsingArgs), args);\n }\n }\n };\n GanttTreeGrid.prototype.expanding = function (args) {\n // Expanding event\n var callBackPromise = new Deferred();\n var expandingArgs;\n var record = getValue('data', args);\n var recordLength = record.length;\n if (!this.parent.ganttChartModule.isExpandCollapseFromChart) {\n if (!isNullOrUndefined(recordLength)) {\n for (var i = 0; i < recordLength; i++) {\n expandingArgs = this.createExpandCollapseArgs(args, record[i]);\n this.parent.ganttChartModule.expandGanttRow(expandingArgs);\n }\n setValue('cancel', getValue('cancel', expandingArgs), args);\n }\n else {\n expandingArgs = this.createExpandCollapseArgs(args, null);\n this.parent.ganttChartModule.expandGanttRow(expandingArgs);\n setValue('cancel', getValue('cancel', expandingArgs), args);\n }\n }\n };\n GanttTreeGrid.prototype.collapsed = function (args) {\n if (!this.parent.ganttChartModule.isExpandCollapseFromChart && !this.parent.isExpandCollapseLevelMethod) {\n var collapsedArgs = void 0;\n var record = getValue('data', args);\n var recordLength = record.length;\n if (!isNullOrUndefined(recordLength)) {\n for (var i = 0; i < recordLength; i++) {\n collapsedArgs = this.createExpandCollapseArgs(args, record[i]);\n this.parent.ganttChartModule.collapsedGanttRow(collapsedArgs);\n }\n }\n else {\n collapsedArgs = this.createExpandCollapseArgs(args, null);\n this.parent.ganttChartModule.collapsedGanttRow(collapsedArgs);\n }\n if (this.parent.viewType === 'ResourceView' && !this.parent.allowTaskbarOverlap && collapsedArgs['gridRow']) {\n collapsedArgs['gridRow'].style.height = collapsedArgs['chartRow'].style.height;\n this.parent.contentHeight = this.parent.enableRtl ? this.parent['element'].getElementsByClassName('e-content')[2].children[0]['offsetHeight'] :\n this.parent['element'].getElementsByClassName('e-content')[0].children[0]['offsetHeight'];\n document.getElementsByClassName('e-chart-rows-container')[0]['style'].height = this.parent.contentHeight + 'px';\n }\n }\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.hideMaskRow();\n }\n else {\n this.parent.hideSpinner();\n }\n this.parent.trigger('collapsed', args);\n };\n GanttTreeGrid.prototype.expanded = function (args) {\n if (!this.parent.ganttChartModule.isExpandCollapseFromChart && !this.parent.isExpandCollapseLevelMethod) {\n var expandedArgs = void 0;\n var record = getValue('data', args);\n var recordLength = record.length;\n if (!isNullOrUndefined(recordLength)) {\n for (var i = 0; i < recordLength; i++) {\n expandedArgs = this.createExpandCollapseArgs(args, record[i]);\n this.parent.ganttChartModule.expandedGanttRow(expandedArgs);\n }\n }\n else {\n expandedArgs = this.createExpandCollapseArgs(args, null);\n this.parent.ganttChartModule.expandedGanttRow(expandedArgs);\n }\n if (this.parent.viewType === 'ResourceView' && !this.parent.allowTaskbarOverlap && args['row']) {\n args['row'].style.height = this.parent.rowHeight + 'px';\n this.parent.contentHeight = this.parent.enableRtl ? this.parent['element'].getElementsByClassName('e-content')[2].children[0]['offsetHeight'] :\n this.parent['element'].getElementsByClassName('e-content')[0].children[0]['offsetHeight'];\n document.getElementsByClassName('e-chart-rows-container')[0]['style'].height = this.parent.contentHeight + 'px';\n }\n }\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.hideMaskRow();\n }\n else {\n this.parent.hideSpinner();\n }\n this.parent.trigger('expanded', args);\n };\n GanttTreeGrid.prototype.actionBegin = function (args) {\n this.parent.notify('actionBegin', args);\n var flag = getValue('doubleClickTarget', this.parent.treeGrid.editModule);\n if (flag !== null) {\n setValue('doubleClickTarget', null, this.parent.treeGrid.editModule);\n }\n this.parent.trigger('actionBegin', args);\n if (args.requestType != \"virtualscroll\" && args.type != \"edit\" && args.requestType != \"beginEdit\") {\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.showMaskRow();\n }\n else {\n this.parent.showSpinner();\n }\n }\n }; // eslint-disable-next-line\n GanttTreeGrid.prototype.created = function (args) {\n this.updateKeyConfigSettings();\n };\n GanttTreeGrid.prototype.actionFailure = function (args) {\n this.parent.trigger('actionFailure', args);\n };\n GanttTreeGrid.prototype.createExpandCollapseArgs = function (args, currentRecord) {\n var chartRow;\n var record = getValue('data', args);\n var recordLength = record.length;\n if (!isNullOrUndefined(recordLength)) {\n var gridRow = getValue('row', args);\n chartRow = this.parent.ganttChartModule.getChartRows()[this.parent.currentViewData.indexOf(currentRecord)];\n var eventArgs = { data: currentRecord, gridRow: gridRow, chartRow: chartRow, cancel: false };\n return eventArgs;\n }\n else {\n var record_1 = getValue('data', args);\n var gridRow = getValue('row', args);\n chartRow = this.parent.ganttChartModule.getChartRows()[this.parent.currentViewData.indexOf(record_1)];\n var eventArgs = { data: record_1, gridRow: gridRow, chartRow: chartRow, cancel: false };\n return eventArgs;\n }\n };\n GanttTreeGrid.prototype.treeActionComplete = function (args) {\n var _this = this;\n var updatedArgs = extend({}, args);\n if (getValue('requestType', args) === 'sorting') {\n this.parent.notify('updateModel', {});\n deleteObject(updatedArgs, 'isFrozen');\n }\n else if (getValue('requestType', args) === 'filtering') {\n this.parent.notify('updateModel', {});\n var focussedElement = this.parent.element.querySelector('.e-treegrid');\n focussedElement.focus();\n }\n else if (getValue('type', args) === 'save') {\n if (this.parent.editModule && this.parent.editModule.cellEditModule) {\n var data = getValue('data', args);\n if (!isNullOrUndefined(data) && !isNullOrUndefined(this.parent.getTaskByUniqueID(data.uniqueID))) {\n /* eslint-disable-next-line */\n this.parent.getTaskByUniqueID(data.uniqueID).taskData[this.parent.taskFields.duration] = data.taskData[this.parent.taskFields.duration];\n if (!isNullOrUndefined(data.taskData[this.parent.taskFields.resourceInfo])) {\n /* eslint-disable-next-line */\n this.parent.getTaskByUniqueID(data.uniqueID).taskData[this.parent.taskFields.resourceInfo] = data.taskData[this.parent.taskFields.resourceInfo];\n }\n }\n this.parent.editModule.cellEditModule.initiateCellEdit(args, this.currentEditRow);\n this.parent.editModule.cellEditModule.isCellEdit = false;\n this.currentEditRow = {};\n }\n }\n if (getValue('requestType', args) === 'filterafteropen') {\n this.parent.notify('actionComplete', args);\n }\n if (getValue('requestType', args) === 'searching') {\n this.parent.notify('actionComplete', args);\n }\n if (!isNullOrUndefined(getValue('batchChanges', args)) && !isNullOrUndefined(this.parent.toolbarModule)) {\n this.parent.toolbarModule.refreshToolbarItems();\n }\n if (this.parent.isCancelled) {\n setValue('requestType', 'cancel', updatedArgs);\n setValue('action', 'CellEditing', updatedArgs);\n this.parent.isCancelled = false;\n }\n if (getValue('requestType', args) === 'refresh' && isNullOrUndefined(getValue('type', args)) && this.parent.addDeleteRecord) {\n if (this.parent.selectedRowIndex != -1) {\n this.parent.selectRow(this.parent.selectedRowIndex);\n if (this.parent.selectedRowIndex > this.parent.currentViewData.length - 1) {\n this.parent.selectedRowIndex = -1;\n }\n }\n else {\n var indexvalue = 0;\n this.parent.currentViewData.map(function (data, index) {\n if (!isNullOrUndefined(_this.parent.currentSelection) && ((data.ganttProperties.taskId === _this.parent.currentSelection[_this.parent.taskFields.id])) || (!isNullOrUndefined(_this.parent.currentSelection)) && (data.ganttProperties.taskId === _this.parent.currentSelection.taskId)) {\n indexvalue = index;\n }\n });\n this.addedRecord = true;\n this.parent.selectRow((isNullOrUndefined(indexvalue) ? 0 : indexvalue));\n }\n this.parent.addDeleteRecord = false;\n }\n this.parent.trigger('actionComplete', updatedArgs);\n if (this.parent.viewType === 'ResourceView' && !this.parent.allowTaskbarOverlap && this.parent.showOverAllocation) {\n for (var i = 0; i < this.parent.currentViewData.length; i++) {\n if (this.parent.currentViewData[i].hasChildRecords && !this.parent.currentViewData[i].expanded) {\n this.parent.chartRowsModule.updateDragDropRecords(this.parent.currentViewData[i]);\n }\n }\n this.parent.ganttChartModule.renderRangeContainer(this.parent.currentViewData);\n }\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.hideMaskRow();\n }\n else {\n this.parent.hideSpinner();\n }\n };\n GanttTreeGrid.prototype.updateKeyConfigSettings = function () {\n delete this.parent.treeGrid.grid.keyboardModule.keyConfigs.delete;\n delete this.parent.treeGrid.grid.keyboardModule.keyConfigs.insert;\n delete this.parent.treeGrid.grid.keyboardModule.keyConfigs.upArrow;\n delete this.parent.treeGrid.grid.keyboardModule.keyConfigs.downArrow;\n delete this.parent.treeGrid.grid.keyboardModule.keyConfigs.ctrlHome;\n delete this.parent.treeGrid.grid.keyboardModule.keyConfigs.ctrlEnd;\n delete this.parent.treeGrid.grid.keyboardModule.keyConfigs.enter;\n delete this.parent.treeGrid.grid.keyboardModule.keyConfigs.tab;\n delete this.parent.treeGrid.grid.keyboardModule.keyConfigs.shiftTab;\n delete this.parent.treeGrid.keyboardModule.keyConfigs.enter;\n delete this.parent.treeGrid.keyboardModule.keyConfigs.upArrow;\n delete this.parent.treeGrid.keyboardModule.keyConfigs.downArrow;\n delete this.parent.treeGrid.keyboardModule.keyConfigs.ctrlShiftUpArrow;\n delete this.parent.treeGrid.keyboardModule.keyConfigs.ctrlShiftDownArrow;\n delete this.parent.treeGrid.keyboardModule.keyConfigs.ctrlUpArrow;\n delete this.parent.treeGrid.keyboardModule.keyConfigs.ctrlDownArrow;\n delete this.parent.treeGrid.keyboardModule.keyConfigs.tab;\n delete this.parent.treeGrid.keyboardModule.keyConfigs.shiftTab;\n };\n /**\n * Method to bind internal events on TreeGrid element\n *\n * @returns {void} .\n */\n GanttTreeGrid.prototype.wireEvents = function () {\n var content = this.parent.treeGrid.element.querySelector('.e-content');\n if (content) {\n EventHandler.add(content, 'scroll', this.scrollHandler, this);\n }\n if (this.parent.isAdaptive) {\n EventHandler.add(this.parent.treeGridPane, 'click', this.treeGridClickHandler, this);\n }\n };\n GanttTreeGrid.prototype.unWireEvents = function () {\n var content = this.parent.treeGrid.element &&\n this.parent.treeGrid.element.querySelector('.e-content');\n if (content) {\n EventHandler.remove(content, 'scroll', this.scrollHandler);\n }\n if (this.parent.isAdaptive) {\n EventHandler.remove(this.parent.treeGridPane, 'click', this.treeGridClickHandler);\n }\n };\n // eslint-disable-next-line\n GanttTreeGrid.prototype.scrollHandler = function (e) {\n var content = this.parent.treeGrid.element.querySelector('.e-content');\n if (content.scrollTop !== this.previousScroll.top) {\n this.parent.notify('grid-scroll', { top: content.scrollTop });\n }\n this.previousScroll.top = content.scrollTop;\n if (this.parent.contextMenuModule && this.parent.contextMenuModule.isOpen) {\n this.parent.contextMenuModule.contextMenu.close();\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n GanttTreeGrid.prototype.validateGanttColumns = function () {\n var ganttObj = this.parent;\n var length = ganttObj.columns.length;\n var tasks = this.parent.taskFields;\n this.parent.columnMapping = {};\n this.parent.columnByField = {};\n this.parent.customColumns = [];\n var tasksMapping = ['id', 'name', 'startDate', 'endDate', 'duration', 'dependency',\n 'progress', 'baselineStartDate', 'baselineEndDate', 'resourceInfo', 'notes', 'work', 'manual', 'type', 'milestone'];\n var _loop_1 = function (i) {\n var column = {};\n if (typeof ganttObj.columns[i] === 'string') {\n column.field = ganttObj.columns[i];\n }\n else {\n column = ganttObj.columns[i];\n }\n var columnName = [];\n if (tasksMapping.length > 0) {\n columnName = tasksMapping.filter(function (name) {\n return column.field === tasks[name];\n });\n }\n if (columnName.length === 0) {\n if (column.field === this_1.parent.resourceFields.group) {\n return \"continue\";\n }\n this_1.parent.customColumns.push(column.field);\n column.headerText = column.headerText ? column.headerText : column.field;\n column.width = column.width ? column.width : 150;\n column.editType = column.editType ? column.editType : 'stringedit';\n column.type = column.type ? column.type : 'string';\n this_1.bindTreeGridColumnProperties(column, true);\n return \"continue\";\n }\n else {\n var index = tasksMapping.indexOf(columnName[0]);\n tasksMapping.splice(index, 1);\n this_1.createTreeGridColumn(column, true);\n this_1.parent.columnMapping[columnName[0]] = column.field;\n }\n };\n var this_1 = this;\n for (var i = 0; i < length; i++) {\n _loop_1(i);\n }\n /** Create default columns with task settings property */\n for (var j = 0; j < tasksMapping.length; j++) {\n var column = {};\n if (!isNullOrUndefined(tasks[tasksMapping[j]])) {\n column.field = tasks[tasksMapping[j]];\n this.createTreeGridColumn(column, length === 0);\n this.parent.columnMapping[tasksMapping[j]] = column.field;\n }\n }\n if (this.parent.viewType !== 'ProjectView') {\n var column = {};\n this.composeUniqueIDColumn(column);\n this.createTreeGridColumn(column, true);\n }\n };\n /**\n *\n * @param {GanttColumnModel} column .\n * @param {boolean} isDefined .\n * @returns {void} .\n */\n GanttTreeGrid.prototype.createTreeGridColumn = function (column, isDefined) {\n var taskSettings = this.parent.taskFields;\n var previousColumn = this.parent.previousGanttColumns.filter(function (prevcolumn) {\n return column.field == prevcolumn.field;\n })[0];\n column.disableHtmlEncode = !isNullOrUndefined(column.disableHtmlEncode) ? column.disableHtmlEncode : this.parent.disableHtmlEncode;\n if (taskSettings.id !== column.field) {\n column.clipMode = column.clipMode ? column.clipMode : 'EllipsisWithTooltip';\n }\n if (taskSettings.id === column.field) {\n /** Id column */\n this.composeIDColumn(column);\n }\n else if (taskSettings.name === column.field) {\n /** Name column */\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('name');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('name');\n }\n column.width = column.width ? column.width : 150;\n column.editType = column.editType ? column.editType : 'stringedit';\n column.type = column.type ? column.type : 'string';\n }\n else if (taskSettings.startDate === column.field) {\n /** Name column */\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('startDate');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('startDate');\n }\n column.editType = column.editType ? column.editType :\n this.parent.getDateFormat().toLowerCase().indexOf('hh') !== -1 ? 'datetimepickeredit' : 'datepickeredit';\n column.format = column.format ? column.format : { type: 'date', format: this.parent.getDateFormat() };\n column.width = column.width ? column.width : 150;\n if (column.edit && column.edit.params) {\n column.edit.params['renderDayCell'] = this.parent.renderWorkingDayCell.bind(this.parent);\n }\n else {\n if (column.edit) {\n column.edit.params = { renderDayCell: this.parent.renderWorkingDayCell.bind(this.parent) };\n }\n else {\n column.edit = { params: { renderDayCell: this.parent.renderWorkingDayCell.bind(this.parent) } };\n }\n }\n }\n else if (taskSettings.endDate === column.field) {\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('endDate');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('endDate');\n }\n column.format = column.format ? column.format : { type: 'date', format: this.parent.getDateFormat() };\n column.editType = column.editType ? column.editType :\n this.parent.getDateFormat().toLowerCase().indexOf('hh') !== -1 ? 'datetimepickeredit' : 'datepickeredit';\n column.width = column.width ? column.width : 150;\n if (column.edit && column.edit.params) {\n column.edit.params['renderDayCell'] = this.parent.renderWorkingDayCell.bind(this.parent);\n }\n else {\n if (column.edit) {\n column.edit.params = { renderDayCell: this.parent.renderWorkingDayCell.bind(this.parent) };\n }\n else {\n column.edit = { params: { renderDayCell: this.parent.renderWorkingDayCell.bind(this.parent) } };\n }\n }\n }\n else if (taskSettings.duration === column.field) {\n column.width = column.width ? column.width : 150;\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('duration');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('duration');\n }\n column.valueAccessor = column.valueAccessor ? column.valueAccessor : !isNullOrUndefined(column.edit) ? null :\n this.durationValueAccessor.bind(this);\n column.editType = column.editType ? column.editType : 'stringedit';\n column.type = column.type ? column.type : 'string';\n }\n else if (taskSettings.progress === column.field) {\n this.composeProgressColumn(column);\n }\n else if (taskSettings.dependency === column.field) {\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('dependency');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('dependency');\n }\n column.width = column.width ? column.width : 150;\n column.editType = column.editType ? column.editType : 'stringedit';\n column.type = 'string';\n column.allowFiltering = column.allowFiltering === false ? false : true;\n }\n else if (taskSettings.resourceInfo === column.field) {\n this.composeResourceColumn(column);\n }\n else if (taskSettings.notes === column.field) {\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('notes');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('notes');\n }\n column.width = column.width ? column.width : 150;\n column.editType = column.editType ? column.editType : 'stringedit';\n if (!this.parent.showInlineNotes) {\n if (!column.template) {\n column.template = '
' +\n '
';\n }\n }\n }\n else if (taskSettings.baselineStartDate === column.field ||\n taskSettings.baselineEndDate === column.field) {\n var colName = (taskSettings.baselineEndDate === column.field) ? 'baselineEndDate' :\n 'baselineStartDate';\n column.width = column.width ? column.width : 150;\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant(colName);\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant(colName);\n }\n column.format = column.format ? column.format : { type: 'date', format: this.parent.getDateFormat() };\n column.editType = column.editType ? column.editType :\n this.parent.getDateFormat().toLowerCase().indexOf('hh') !== -1 ? 'datetimepickeredit' : 'datepickeredit';\n }\n else if (taskSettings.work === column.field) {\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('work');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('work');\n }\n column.width = column.width ? column.width : 150;\n column.valueAccessor = column.valueAccessor ? column.valueAccessor : this.workValueAccessor.bind(this);\n column.editType = column.editType ? column.editType : 'numericedit';\n }\n else if (taskSettings.type === column.field) {\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('taskType');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('taskType');\n }\n column.width = column.width ? column.width : 150;\n //column.type = 'string';\n column.editType = 'dropdownedit';\n column.valueAccessor = column.valueAccessor ? column.valueAccessor : this.taskTypeValueAccessor.bind(this);\n }\n else if (taskSettings.manual === column.field && this.parent.taskMode === 'Custom') {\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('taskMode');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('taskMode');\n }\n column.width = column.width ? column.width : 120;\n column.editType = column.editType ? column.editType : 'dropdownedit';\n column.valueAccessor = column.valueAccessor ? column.valueAccessor : this.modeValueAccessor.bind(this);\n column.edit = {\n params: {\n query: new Query(),\n dataSource: [\n { id: 1, text: this.parent.localeObj.getConstant('manual'), value: true },\n { id: 2, text: this.parent.localeObj.getConstant('auto'), value: false }\n ],\n fields: { text: 'text', value: 'value' }\n }\n };\n }\n this.bindTreeGridColumnProperties(column, isDefined);\n };\n /**\n * Compose Resource columns\n *\n * @param {GanttColumnModel} column .\n * @returns {void} .\n */\n GanttTreeGrid.prototype.composeResourceColumn = function (column) {\n var previousColumn = this.parent.previousGanttColumns.filter(function (prevcolumn) {\n return column.field == prevcolumn.field;\n })[0];\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('resourceName');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('resourceName');\n }\n column.width = column.width ? column.width : 150;\n column.type = 'string';\n column.valueAccessor = column.valueAccessor ? column.valueAccessor : this.resourceValueAccessor.bind(this);\n column.allowFiltering = column.allowFiltering === false ? false : true;\n };\n /**\n * @param {IGanttData} data .\n * @returns {object} .\n * @private\n */\n GanttTreeGrid.prototype.getResourceIds = function (data) {\n var value = getValue(this.parent.taskFields.resourceInfo, data.taskData);\n var id = [];\n if (!isNullOrUndefined(value)) {\n for (var i = 0; i < value.length; i++) {\n id.push(typeof value[i] === 'object' ? value[i][this.parent.resourceFields.id] : value[i]);\n }\n return id;\n }\n else {\n return value;\n }\n };\n /**\n * Create Id column\n *\n * @param {GanttColumnModel} column .\n * @returns {void} .\n */\n GanttTreeGrid.prototype.composeIDColumn = function (column) {\n var isProjectView = this.parent.viewType === 'ProjectView';\n var lengthDataSource = this.parent.dataSource['length'];\n var taskIDName;\n column.isPrimaryKey = isProjectView ? true : false;\n if (this.parent.isLocaleChanged) {\n var previousColumn = this.parent.previousGanttColumns.filter(function (prevcolumn) {\n return column.field == prevcolumn.field;\n })[0];\n if (previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('id');\n }\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('id');\n }\n column.width = column.width ? column.width : 100;\n for (var i = 0; i < lengthDataSource; i++) {\n if (!isNullOrUndefined(this.parent.dataSource[i][this.parent.taskFields.id])) {\n taskIDName = this.parent.dataSource[i][this.parent.taskFields.id];\n break;\n }\n }\n if (typeof (taskIDName) === \"string\" || isNullOrUndefined(taskIDName)) {\n if (this.parent.viewType === 'ResourceView') {\n column.allowEditing = column.allowEditing ? column.allowEditing : false;\n }\n else {\n column.allowEditing = column.allowEditing ? column.allowEditing : true;\n }\n column.editType = column.editType ? column.editType : 'stringedit';\n }\n else {\n column.allowEditing = column.allowEditing ? column.allowEditing : false;\n column.editType = column.editType ? column.editType : 'numericedit';\n }\n column.valueAccessor = isProjectView ? null : this.idValueAccessor.bind(this);\n };\n GanttTreeGrid.prototype.composeUniqueIDColumn = function (column) {\n column.field = 'rowUniqueID';\n column.isPrimaryKey = true;\n column.headerText = 'UniqueID';\n column.allowEditing = false;\n column.visible = false;\n };\n /**\n * Create progress column\n *\n * @param {GanttColumnModel} column .\n * @returns {void} .\n */\n GanttTreeGrid.prototype.composeProgressColumn = function (column) {\n var previousColumn = this.parent.previousGanttColumns.filter(function (prevcolumn) {\n return column.field == prevcolumn.field;\n })[0];\n if (this.parent.isLocaleChanged && previousColumn) {\n column.headerText = previousColumn.headerText ? previousColumn.headerText : this.parent.localeObj.getConstant('progress');\n }\n else {\n column.headerText = column.headerText ? column.headerText : this.parent.localeObj.getConstant('progress');\n }\n column.width = column.width ? column.width : 150;\n column.editType = column.editType ? column.editType : 'numericedit';\n };\n /**\n * @param {GanttColumnModel} newGanttColumn .\n * @param {boolean} isDefined .\n * @returns {void} .\n */\n GanttTreeGrid.prototype.bindTreeGridColumnProperties = function (newGanttColumn, isDefined) {\n var treeGridColumn = {};\n var ganttColumn = {};\n for (var _i = 0, _a = Object.keys(newGanttColumn); _i < _a.length; _i++) {\n var prop = _a[_i];\n treeGridColumn[prop] = ganttColumn[prop] = newGanttColumn[prop];\n }\n this.parent.columnByField[ganttColumn.field] = ganttColumn;\n this.parent.ganttColumns.push(new GanttColumn(ganttColumn));\n if (isDefined) {\n this.treeGridColumns.push(treeGridColumn);\n }\n }; // eslint-disable-next-line\n GanttTreeGrid.prototype.durationValueAccessor = function (field, data, column) {\n var ganttProp = data.ganttProperties;\n if (!isNullOrUndefined(ganttProp)) {\n return this.parent.dataOperation.getDurationString(ganttProp.duration, ganttProp.durationUnit);\n }\n return '';\n }; // eslint-disable-next-line\n GanttTreeGrid.prototype.resourceValueAccessor = function (field, data, column) {\n var ganttProp = data.ganttProperties;\n if (!isNullOrUndefined(ganttProp)) {\n return ganttProp.resourceNames;\n }\n return '';\n };\n GanttTreeGrid.prototype.workValueAccessor = function (field, data, column) {\n var ganttProp = data.ganttProperties;\n if (!isNullOrUndefined(ganttProp)) {\n return this.parent.dataOperation.getWorkString(ganttProp.work, ganttProp.workUnit);\n }\n return '';\n };\n GanttTreeGrid.prototype.taskTypeValueAccessor = function (field, data, column) {\n var ganttProp = data.ganttProperties;\n if (!isNullOrUndefined(ganttProp)) {\n return ganttProp.taskType;\n }\n return '';\n };\n GanttTreeGrid.prototype.modeValueAccessor = function (field, data, column) {\n if (data[field]) {\n return 'Manual';\n }\n else {\n return 'Auto';\n }\n };\n GanttTreeGrid.prototype.idValueAccessor = function (field, data, column) {\n return data.level === 0 ? 'R-' + data.ganttProperties.taskId : 'T-' + data.ganttProperties.taskId;\n };\n GanttTreeGrid.prototype.updateScrollTop = function (args) {\n var newScrollTop;\n if (getValue('top', args) > (this.parent.flatData.length * this.parent.rowHeight)) {\n newScrollTop = getValue('top', args) - document.getElementsByClassName('e-chart-scroll-container e-content')[0]['offsetHeight'];\n }\n else {\n newScrollTop = getValue('top', args);\n }\n this.treeGridElement.querySelector('.e-content').scrollTop = newScrollTop;\n this.previousScroll.top = this.treeGridElement.querySelector('.e-content').scrollTop;\n };\n GanttTreeGrid.prototype.treeGridClickHandler = function (e) {\n this.parent.notify('treeGridClick', e);\n };\n GanttTreeGrid.prototype.removeEventListener = function () {\n this.parent.off('renderPanels', this.createContainer);\n this.parent.off('chartScroll', this.updateScrollTop);\n this.parent.off('destroy', this.destroy);\n this.parent.treeGrid.off('reactTemplateRender', this.renderReactTemplate);\n };\n GanttTreeGrid.prototype.destroy = function () {\n this.removeEventListener();\n this.unWireEvents();\n if (this.parent.treeGrid.element) {\n this.parent.treeGrid.destroy();\n }\n };\n return GanttTreeGrid;\n}());\nexport { GanttTreeGrid };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of Gantt.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from \"@syncfusion/ej2-base\";\n/**\n * Configures the Loading Indicator of the Gantt.\n */\nvar LoadingIndicator = /** @class */ (function (_super) {\n __extends(LoadingIndicator, _super);\n function LoadingIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Spinner')\n ], LoadingIndicator.prototype, \"indicatorType\", void 0);\n return LoadingIndicator;\n}(ChildProperty));\nexport { LoadingIndicator };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines working time of day in project.\n */\nvar DayWorkingTime = /** @class */ (function (_super) {\n __extends(DayWorkingTime, _super);\n function DayWorkingTime() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], DayWorkingTime.prototype, \"from\", void 0);\n __decorate([\n Property(null)\n ], DayWorkingTime.prototype, \"to\", void 0);\n return DayWorkingTime;\n}(ChildProperty));\nexport { DayWorkingTime };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines holidays of project.\n */\nvar Holiday = /** @class */ (function (_super) {\n __extends(Holiday, _super);\n function Holiday() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Holiday.prototype, \"from\", void 0);\n __decorate([\n Property(null)\n ], Holiday.prototype, \"to\", void 0);\n __decorate([\n Property(null)\n ], Holiday.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Holiday.prototype, \"cssClass\", void 0);\n return Holiday;\n}(ChildProperty));\nexport { Holiday };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines event marker collection in Gantt.\n */\nvar EventMarker = /** @class */ (function (_super) {\n __extends(EventMarker, _super);\n function EventMarker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], EventMarker.prototype, \"day\", void 0);\n __decorate([\n Property(null)\n ], EventMarker.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], EventMarker.prototype, \"cssClass\", void 0);\n return EventMarker;\n}(ChildProperty));\nexport { EventMarker };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines mapping property to get task details from data source.\n */\nvar TaskFields = /** @class */ (function (_super) {\n __extends(TaskFields, _super);\n function TaskFields() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"id\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"parentID\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"startDate\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"endDate\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"dependency\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"progress\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"child\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"milestone\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"duration\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"durationUnit\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"baselineStartDate\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"baselineEndDate\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"resourceInfo\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"expandState\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"indicators\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"notes\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"work\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"manual\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"segments\", void 0);\n __decorate([\n Property(null)\n ], TaskFields.prototype, \"segmentId\", void 0);\n return TaskFields;\n}(ChildProperty));\nexport { TaskFields };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Configures timeline settings of Gantt.\n */\nvar TimelineTierSettings = /** @class */ (function (_super) {\n __extends(TimelineTierSettings, _super);\n function TimelineTierSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TimelineTierSettings.prototype, \"format\", void 0);\n __decorate([\n Property('None')\n ], TimelineTierSettings.prototype, \"unit\", void 0);\n __decorate([\n Property(1)\n ], TimelineTierSettings.prototype, \"count\", void 0);\n __decorate([\n Property(null)\n ], TimelineTierSettings.prototype, \"formatter\", void 0);\n return TimelineTierSettings;\n}(ChildProperty));\nexport { TimelineTierSettings };\n/**\n * Configures the timeline settings property in the Gantt.\n */\nvar TimelineSettings = /** @class */ (function (_super) {\n __extends(TimelineSettings, _super);\n function TimelineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Week')\n ], TimelineSettings.prototype, \"timelineViewMode\", void 0);\n __decorate([\n Complex({}, TimelineTierSettings)\n ], TimelineSettings.prototype, \"topTier\", void 0);\n __decorate([\n Complex({}, TimelineTierSettings)\n ], TimelineSettings.prototype, \"bottomTier\", void 0);\n __decorate([\n Property(33)\n ], TimelineSettings.prototype, \"timelineUnitSize\", void 0);\n __decorate([\n Property(0)\n ], TimelineSettings.prototype, \"weekStartDay\", void 0);\n __decorate([\n Property(null)\n ], TimelineSettings.prototype, \"weekendBackground\", void 0);\n __decorate([\n Property(true)\n ], TimelineSettings.prototype, \"showTooltip\", void 0);\n __decorate([\n Property(true)\n ], TimelineSettings.prototype, \"updateTimescaleView\", void 0);\n return TimelineSettings;\n}(ChildProperty));\nexport { TimelineSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures edit settings of Gantt.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Auto')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowTaskbarEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the selection behavior of the Gantt.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines labels for task, this will be placed right, left and inner side of taskbar.\n */\nvar LabelSettings = /** @class */ (function (_super) {\n __extends(LabelSettings, _super);\n function LabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], LabelSettings.prototype, \"rightLabel\", void 0);\n __decorate([\n Property(null)\n ], LabelSettings.prototype, \"leftLabel\", void 0);\n __decorate([\n Property(null)\n ], LabelSettings.prototype, \"taskLabel\", void 0);\n return LabelSettings;\n}(ChildProperty));\nexport { LabelSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures tooltip settings for Gantt.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"showTooltip\", void 0);\n __decorate([\n Property()\n ], TooltipSettings.prototype, \"taskbar\", void 0);\n __decorate([\n Property()\n ], TooltipSettings.prototype, \"baseline\", void 0);\n __decorate([\n Property()\n ], TooltipSettings.prototype, \"connectorLine\", void 0);\n __decorate([\n Property()\n ], TooltipSettings.prototype, \"editing\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Predicate } from '@syncfusion/ej2-grids';\n/**\n * Configures the filtering behavior of the Gantt.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('Menu')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures splitter position and splitter bar.\n */\nvar SplitterSettings = /** @class */ (function (_super) {\n __extends(SplitterSettings, _super);\n function SplitterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], SplitterSettings.prototype, \"position\", void 0);\n __decorate([\n Property(-1)\n ], SplitterSettings.prototype, \"columnIndex\", void 0);\n __decorate([\n Property(4)\n ], SplitterSettings.prototype, \"separatorSize\", void 0);\n __decorate([\n Property(null)\n ], SplitterSettings.prototype, \"minimum\", void 0);\n __decorate([\n Property('Default')\n ], SplitterSettings.prototype, \"view\", void 0);\n return SplitterSettings;\n}(ChildProperty));\nexport { SplitterSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Defines mapping property to get resource details from resource collection.\n */\nvar ResourceFields = /** @class */ (function (_super) {\n __extends(ResourceFields, _super);\n function ResourceFields() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ResourceFields.prototype, \"id\", void 0);\n __decorate([\n Property(null)\n ], ResourceFields.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], ResourceFields.prototype, \"unit\", void 0);\n __decorate([\n Property(null)\n ], ResourceFields.prototype, \"group\", void 0);\n return ResourceFields;\n}(ChildProperty));\nexport { ResourceFields };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the searching behavior of the Gantt.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property('')\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property('Parent')\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, isNullOrUndefined, extend, compile, getValue, setValue, SanitizeHtmlHelper, append } from '@syncfusion/ej2-base';\nimport { formatUnit, addClass } from '@syncfusion/ej2-base';\nimport { isScheduledTask } from '../base/utils';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as cls from '../base/css-constants';\nimport { DateProcessor } from '../base/date-processor';\n/**\n * To render the chart rows in Gantt\n */\nvar ChartRows = /** @class */ (function (_super) {\n __extends(ChartRows, _super);\n function ChartRows(ganttObj) {\n var _this = _super.call(this, ganttObj) || this;\n _this.taskBarHeight = 0;\n _this.milestoneHeight = 0;\n _this.milesStoneRadius = 0;\n _this.baselineTop = 0;\n _this.baselineHeight = 8;\n _this.touchLeftConnectorpoint = '';\n _this.touchRightConnectorpoint = '';\n _this.dropSplit = false;\n _this.refreshedTr = [];\n _this.refreshedData = [];\n _this.isUpdated = true;\n _this.parent = ganttObj;\n _this.initPublicProp();\n _this.addEventListener();\n return _this;\n }\n /**\n * To initialize the public property.\n *\n * @returns {void}\n * @private\n */\n ChartRows.prototype.initPublicProp = function () {\n this.ganttChartTableBody = null;\n };\n ChartRows.prototype.addEventListener = function () {\n this.parent.on('renderPanels', this.createChartTable, this);\n this.parent.on('dataReady', this.initiateTemplates, this);\n this.parent.on('destroy', this.destroy, this);\n };\n ChartRows.prototype.refreshChartByTimeline = function () {\n this.taskTable.style.width = formatUnit(this.parent.timelineModule.totalTimelineWidth);\n var prevDate = getValue('prevProjectStartDate', this.parent.dataOperation);\n var isUpdated = false;\n if (prevDate) {\n isUpdated = prevDate.getTime() === this.parent.cloneProjectStartDate.getTime();\n }\n this.isUpdated = this.parent.isFromOnPropertyChange && isUpdated &&\n getValue('mutableData', this.parent.treeGrid.grid.contentModule) ? true : false;\n this.refreshGanttRows();\n this.isUpdated = true;\n };\n /**\n * To render chart rows.\n *\n * @returns {void}\n * @private\n */\n ChartRows.prototype.createChartTable = function () {\n this.taskTable = createElement('table', {\n className: cls.taskTable + ' ' + cls.zeroSpacing, id: 'GanttTaskTable' + this.parent.element.id,\n styles: 'position: absolute;width:' + this.parent.timelineModule.totalTimelineWidth + 'px;',\n attrs: { cellspacing: '0.25px' }\n });\n var colgroup = createElement('colgroup');\n var column = createElement('col', { styles: 'width:' + this.parent.timelineModule.totalTimelineWidth + 'px;' });\n colgroup.appendChild(column);\n this.taskTable.appendChild(colgroup);\n this.ganttChartTableBody = createElement('tbody', {\n id: this.parent.element.id + 'GanttTaskTableBody'\n });\n this.taskTable.appendChild(this.ganttChartTableBody);\n this.parent.ganttChartModule.chartBodyContent.appendChild(this.taskTable);\n };\n ChartRows.prototype.initiateTemplates = function () {\n this.taskTable.style.width = formatUnit(this.parent.timelineModule.totalTimelineWidth);\n this.initChartHelperPrivateVariable();\n this.initializeChartTemplate();\n };\n /**\n * To render chart rows.\n *\n * @returns {void}\n * @private\n */\n ChartRows.prototype.renderChartRows = function () {\n this.createTaskbarTemplate();\n this.parent.isGanttChartRendered = true;\n };\n /**\n * To get gantt Indicator.\n *\n * @param {IIndicator} indicator .\n * @returns {NodeList} .\n * @private\n */\n ChartRows.prototype.getIndicatorNode = function (indicator) {\n var templateString = '';\n return this.createDivElement(templateString);\n };\n /**\n * To get gantt Indicator.\n *\n * @param {Date | string} date .\n * @returns {number} .\n * @private\n */\n ChartRows.prototype.getIndicatorleft = function (date) {\n date = this.parent.dateValidationModule.getDateFromFormat(date);\n var left = this.parent.dataOperation.getTaskLeft(date, false);\n return left;\n };\n /**\n * To get child taskbar Node.\n *\n * @param {number} i .\n * @param {NodeList} rootElement .\n * @returns {NodeList} .\n * @private\n */\n ChartRows.prototype.getChildTaskbarNode = function (i, rootElement) {\n var childTaskbarNode = null;\n var data = this.templateData;\n var direction;\n if (this.parent.enableRtl) {\n direction = 'right:';\n }\n else {\n direction = 'left:';\n }\n if (this.childTaskbarTemplateFunction) {\n childTaskbarNode = this.childTaskbarTemplateFunction(extend({ index: i }, data), this.parent, 'TaskbarTemplate', this.getTemplateID('TaskbarTemplate'), false, undefined, rootElement[0], this.parent.treeGrid['root']);\n }\n else {\n var labelString = '';\n var taskLabel = '';\n var taskbarInnerDiv = void 0;\n var progressDiv = void 0;\n if (data.ganttProperties.startDate && data.ganttProperties.endDate\n && data.ganttProperties.duration) {\n taskbarInnerDiv = this.createDivElement('
');\n progressDiv = this.createDivElement('
' +\n '
');\n }\n var tempDiv = createElement('div');\n if (this.taskLabelTemplateFunction && !isNullOrUndefined(progressDiv) && progressDiv.length > 0) {\n var taskLabelTemplateNode = this.taskLabelTemplateFunction(extend({ index: i }, data), this.parent, 'TaskLabelTemplate', this.getTemplateID('TaskLabelTemplate'), false, undefined, progressDiv[0]);\n if (taskLabelTemplateNode && taskLabelTemplateNode.length > 0) {\n append(taskLabelTemplateNode, tempDiv);\n labelString = tempDiv.innerHTML;\n }\n }\n else {\n var field = this.parent.labelSettings.taskLabel;\n labelString = this.getTaskLabel(field);\n labelString = labelString === 'isCustomTemplate' ? this.parent.labelSettings.taskLabel : labelString;\n if (this.parent.enableHtmlSanitizer && typeof (labelString) === 'string') {\n labelString = SanitizeHtmlHelper.sanitize(labelString);\n }\n }\n if (labelString.indexOf('null') === -1) {\n if (this.getTaskLabel(this.parent.labelSettings.taskLabel) === 'isCustomTemplate' &&\n !this.isTemplate(this.parent.labelSettings.taskLabel)) {\n labelString = '';\n }\n if (isNaN(parseInt(labelString))) {\n taskLabel = '';\n }\n else {\n taskLabel = '';\n }\n }\n var template = !isNullOrUndefined(data.ganttProperties.segments) && data.ganttProperties.segments.length > 0 ?\n this.splitTaskbar(data, labelString) : (data.ganttProperties.startDate && data.ganttProperties.endDate\n && data.ganttProperties.duration) ? (taskLabel) :\n (data.ganttProperties.startDate && !data.ganttProperties.endDate && !data.ganttProperties.duration) ? ('
') :\n (data.ganttProperties.endDate && !data.ganttProperties.startDate && !data.ganttProperties.duration) ?\n ('
') :\n (data.ganttProperties.duration && !data.ganttProperties.startDate && !data.ganttProperties.endDate) ?\n ('
') : '';\n if (data.ganttProperties.startDate && data.ganttProperties.endDate && data.ganttProperties.duration &&\n (isNullOrUndefined(data.ganttProperties.segments) || (!isNullOrUndefined(data.ganttProperties.segments) &&\n data.ganttProperties.segments.length === 0))) {\n if (template !== '' && !isNullOrUndefined(progressDiv) && progressDiv.length > 0) {\n var templateElement = this.createDivElement(template)[0];\n if (this.parent.disableHtmlEncode) {\n templateElement.innerText = labelString;\n }\n else {\n templateElement.innerHTML = labelString;\n }\n var childLabel = this.parent.labelSettings.taskLabel;\n if (childLabel && childLabel['elementRef'])\n templateElement.appendChild(tempDiv);\n progressDiv[0].appendChild(templateElement);\n if (progressDiv[0].querySelectorAll('.e-task-label')[0].textContent !== '' &&\n !this.isTemplate(childLabel) &&\n progressDiv[0].querySelectorAll('.e-task-label')[0].children[0])\n progressDiv[0].querySelectorAll('.e-task-label')[0].children[0].remove();\n if (progressDiv[0].querySelectorAll('.e-task-label')[0].textContent === '' &&\n childLabel && !childLabel['elementRef'] && tempDiv.innerHTML !== '')\n progressDiv[0].querySelectorAll('.e-task-label')[0].textContent = childLabel;\n }\n if (!isNullOrUndefined(taskbarInnerDiv) && taskbarInnerDiv.length > 0) {\n taskbarInnerDiv[0].appendChild([].slice.call(progressDiv)[0]);\n }\n childTaskbarNode = taskbarInnerDiv;\n }\n else {\n childTaskbarNode = this.createDivElement(template);\n }\n }\n if (this.parent.enableRtl && !isNullOrUndefined(childTaskbarNode) && childTaskbarNode[0] && childTaskbarNode[0].querySelector('.e-task-label')) {\n childTaskbarNode[0].querySelector('.e-task-label').style.marginLeft = '15px';\n childTaskbarNode[0].querySelector('.e-task-label').style.marginRight = '8px';\n if (childTaskbarNode[0].querySelector('.e-gantt-child-progressbar')) {\n childTaskbarNode[0].querySelector('.e-gantt-child-progressbar').style.textAlign = 'left';\n }\n }\n return childTaskbarNode;\n };\n ChartRows.prototype.splitTaskbar = function (data, labelString) {\n var splitTasks = '';\n for (var i = 0; i < data.ganttProperties.segments.length; i++) {\n var segment = data.ganttProperties.segments[i];\n var progressBarVisible = void 0;\n if (!segment.showProgress) {\n progressBarVisible = 'hidden';\n }\n else {\n progressBarVisible = 'initial';\n }\n var segmentPosition = (i === 0) ? 'e-segment-first' : (i === data.ganttProperties.segments.length - 1)\n ? 'e-segment-last' : 'e-segment-inprogress';\n splitTasks += (\n //split taskbar\n '
' +\n this.getSplitTaskbarLeftResizerNode() +\n //split progress bar\n '
= 0 ? 'block;' : 'none;') +\n 'width:' + segment.progressWidth + 'px;height:100%;' + 'text-align:' + (this.parent.enableRtl ? 'left;' : 'right;') +\n 'border-top-right-radius:' + this.getSplitTaskBorderRadius(segment) + 'px;' +\n 'border-bottom-right-radius:' + this.getSplitTaskBorderRadius(segment) + 'px;\">' +\n // progress label\n '' + labelString + '' +\n '
' +\n this.getSplitTaskbarRightResizerNode(segment) +\n (segment.showProgress ? this.getSplitProgressResizerNode(segment) : '') +\n '
');\n }\n return splitTasks;\n };\n ChartRows.prototype.getSplitTaskbarLeftResizerNode = function () {\n var lResizerLeft = -(this.parent.isAdaptive ? 12 : 2);\n var template = '
';\n return template;\n };\n ChartRows.prototype.getSplitTaskbarRightResizerNode = function (segment) {\n var rResizerLeft = this.parent.isAdaptive ? -2 : -10;\n var template = '
';\n return template;\n };\n ChartRows.prototype.getSplitProgressResizerNode = function (segment) {\n var width = this.parent.enableRtl ? (segment.progressWidth + 8) : (segment.progressWidth - 6);\n var template = '
' +\n '
';\n return template;\n };\n ChartRows.prototype.getSegmentIndex = function (splitStartDate, record) {\n var segmentIndex = -1;\n var ganttProp = record.ganttProperties;\n var segments = ganttProp.segments;\n if (!isNullOrUndefined(segments)) {\n segments.sort(function (a, b) {\n return a.startDate.getTime() - b.startDate.getTime();\n });\n var length_1 = segments.length;\n for (var i = 0; i < length_1; i++) {\n var segment = segments[i];\n // To find if user tend to split the start date of a main taskbar\n // purpose of this to restrict the split action\n if (splitStartDate.getTime() === ganttProp.startDate.getTime()) {\n this.dropSplit = true;\n segmentIndex = 0;\n // To find the if user tend to split the first date of already segmented task.\n // purpose of this to move on day of a segment\n }\n else if (splitStartDate.getTime() === segment.startDate.getTime()) {\n this.dropSplit = true;\n var sDate = segment.startDate;\n sDate.setDate(sDate.getDate() + 1);\n sDate = segment.startDate = this.parent.dataOperation.checkStartDate(sDate, ganttProp, false);\n segment.startDate = sDate;\n var eDate = segment.endDate;\n eDate = this.parent.dataOperation.getEndDate(sDate, segment.duration, ganttProp.durationUnit, ganttProp, false);\n segment.endDate = eDate;\n if (i === segments.length - 1) {\n this.parent.setRecordValue('endDate', eDate, ganttProp, true);\n }\n this.incrementSegments(segments, i, record);\n segmentIndex = segment.segmentIndex;\n // To find if the user tend to split the segment and find the segment index\n }\n else {\n segment.endDate = this.parent.dataOperation.getEndDate(segment.startDate, segment.duration, ganttProp.durationUnit, ganttProp, false);\n if (splitStartDate.getTime() >= segment.startDate.getTime() && splitStartDate.getTime() <= segment.endDate.getTime()) {\n segmentIndex = segment.segmentIndex;\n }\n }\n this.parent.setRecordValue('segments', ganttProp.segments, ganttProp, true);\n }\n }\n if (segmentIndex === -1) {\n this.dropSplit = true;\n }\n return segmentIndex;\n };\n ChartRows.prototype.mergeTask = function (taskId, segmentIndexes) {\n var mergeArrayLength = segmentIndexes.length;\n var taskFields = this.parent.taskFields;\n var mergeData = this.parent.flatData.filter(function (x) {\n if (x[taskFields.id] === taskId) {\n return x;\n }\n else {\n return null;\n }\n })[0];\n var segments = mergeData.ganttProperties.segments;\n segmentIndexes = segmentIndexes.sort(function (a, b) {\n return b.firstSegmentIndex - a.firstSegmentIndex;\n });\n for (var arrayLength = 0; arrayLength < mergeArrayLength; arrayLength++) {\n var firstSegment = segments[segmentIndexes[arrayLength].firstSegmentIndex];\n var secondSegment = segments[segmentIndexes[arrayLength].secondSegmentIndex];\n var duration = firstSegment.duration + secondSegment.duration;\n var endDate = this.parent.dataOperation.getEndDate(firstSegment.startDate, duration, mergeData.ganttProperties.durationUnit, mergeData.ganttProperties, false);\n var segment = {\n startDate: firstSegment.startDate,\n endDate: endDate,\n duration: duration\n };\n var insertIndex = segmentIndexes[arrayLength].firstSegmentIndex;\n segments.splice(insertIndex, 2, segment);\n this.parent.setRecordValue('segments', segments, mergeData.ganttProperties, true);\n this.parent.dataOperation.updateMappingData(mergeData, 'segments');\n if (segments.length === 1) {\n this.parent.setRecordValue('endDate', endDate, mergeData.ganttProperties, true);\n this.parent.setRecordValue('EndDate', endDate, mergeData, true);\n this.parent.setRecordValue('segments', null, mergeData.ganttProperties, true);\n this.parent.dataOperation.updateMappingData(mergeData, 'segments');\n }\n else if (mergeData.ganttProperties.endDate !== segments[segments.length - 1].endDate) {\n this.parent.setRecordValue('endDate', segments[segments.length - 1].endDate, mergeData.ganttProperties, true);\n }\n }\n this.refreshChartAfterSegment(mergeData, 'mergeSegment');\n };\n ChartRows.prototype.refreshChartAfterSegment = function (data, requestType) {\n this.parent.setRecordValue('segments', this.parent.dataOperation.setSegmentsInfo(data, false), data.ganttProperties, true);\n this.parent.dataOperation.updateMappingData(data, 'segments');\n this.parent.dataOperation.updateWidthLeft(data);\n if (this.parent.predecessorModule && this.parent.taskFields.dependency) {\n this.parent.predecessorModule.updatedRecordsDateByPredecessor();\n this.parent.connectorLineModule.removePreviousConnectorLines(this.parent.flatData);\n this.parent.connectorLineEditModule.refreshEditedRecordConnectorLine(this.parent.flatData);\n if (data.parentItem && this.parent.getParentTask(data.parentItem).ganttProperties.isAutoSchedule\n && this.parent.isInPredecessorValidation) {\n this.parent.dataOperation.updateParentItems(data.parentItem);\n }\n this.refreshRecords(this.parent.currentViewData);\n }\n else {\n this.refreshRow(this.parent.currentViewData.indexOf(data));\n }\n var tr = this.ganttChartTableBody.querySelectorAll('tr')[this.parent.currentViewData.indexOf(data)];\n var args = {\n requestType: requestType,\n rowData: data\n };\n this.triggerQueryTaskbarInfoByIndex(tr, data);\n this.parent.selectionModule.clearSelection();\n var segments = args.rowData.taskData[this.parent.taskFields.segments];\n if (this.parent.timezone && segments != null) {\n for (var i = 0; i < segments.length; i++) {\n segments[i][this.parent.taskFields.startDate] = this.parent.dateValidationModule.remove(args.rowData.ganttProperties.segments[i].startDate, this.parent.timezone);\n if (this.parent.taskFields.endDate) {\n segments[i][this.parent.taskFields.endDate] = this.parent.dateValidationModule.remove(args.rowData.ganttProperties.segments[i].endDate, this.parent.timezone);\n }\n }\n }\n this.parent.trigger('actionComplete', args);\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.hideMaskRow();\n }\n else {\n this.parent.hideSpinner();\n }\n setValue('isEdit', false, this.parent.contextMenuModule);\n setValue('isEdit', false, this.parent);\n };\n /**\n * public method to split task bar.\n *\n * @public\n */\n ChartRows.prototype.splitTask = function (taskId, splitDates) {\n var taskFields = this.parent.taskFields;\n var splitDate = splitDates;\n var splitRecord = this.parent.flatData.filter(function (x) {\n if (x[taskFields.id] === taskId) {\n return x;\n }\n else {\n return null;\n }\n })[0];\n var ganttProp = splitRecord.ganttProperties;\n this.dropSplit = false;\n var segmentIndex = -1;\n var segments = ganttProp.segments;\n if (isNullOrUndefined(splitDates.length) || splitDates.length < 0) {\n var splitStartDate = this.parent.dataOperation.checkStartDate(splitDate, ganttProp, false);\n if (splitStartDate.getTime() !== ganttProp.startDate.getTime()) {\n if (ganttProp.isAutoSchedule) {\n if (!isNullOrUndefined(segments) && segments.length > 0) {\n segmentIndex = this.getSegmentIndex(splitStartDate, splitRecord);\n }\n //check atleast one day difference is there to split\n if (this.dropSplit === false && splitDate.getTime() > ganttProp.startDate.getTime() &&\n splitDate.getTime() < ganttProp.endDate.getTime()) {\n segments = segmentIndex !== -1 ? segments : [];\n var startDate = segmentIndex !== -1 ?\n segments[segmentIndex].startDate : new Date(ganttProp.startDate.getTime());\n var endDate = segmentIndex !== -1 ? segments[segmentIndex].endDate : new Date(ganttProp.endDate.getTime());\n var segmentDuration = this.parent.dataOperation.getDuration(startDate, endDate, ganttProp.durationUnit, ganttProp.isAutoSchedule, ganttProp.isMilestone);\n this.parent.setRecordValue('segments', this.splitSegmentedTaskbar(startDate, endDate, splitDate, segmentIndex, segments, splitRecord, segmentDuration), ganttProp, true);\n if (segmentIndex !== -1) {\n this.incrementSegments(segments, segmentIndex + 1, splitRecord);\n }\n this.parent.setRecordValue('endDate', segments[segments.length - 1].endDate, ganttProp, true);\n if (this.parent.taskFields.endDate) {\n this.parent.dataOperation.updateMappingData(splitRecord, 'endDate');\n }\n }\n this.refreshChartAfterSegment(splitRecord, 'splitTaskbar');\n }\n }\n }\n else {\n splitDates.sort(function (a, b) {\n return a.getTime() - b.getTime();\n });\n this.parent.setRecordValue('segments', this.constructSegments(splitDates, splitRecord.ganttProperties), splitRecord.ganttProperties, true);\n this.refreshChartAfterSegment(splitRecord, 'splitTask');\n }\n };\n ChartRows.prototype.constructSegments = function (dates, taskData) {\n var segmentsArray = [];\n var segment;\n var startDate = new Date();\n var endDate;\n var duration;\n for (var i = 0; i < dates.length + 1; i++) {\n startDate = i === 0 ? taskData.startDate : startDate;\n startDate = this.parent.dataOperation.checkStartDate(startDate, taskData, false);\n endDate = i !== dates.length ? new Date(dates[i].getTime()) > taskData.endDate ? taskData.endDate\n : new Date(dates[i].getTime()) : taskData.endDate;\n endDate = this.parent.dataOperation.checkEndDate(endDate, taskData, false);\n duration = this.parent.dataOperation.getDuration(startDate, endDate, taskData.durationUnit, taskData.isAutoSchedule, taskData.isMilestone);\n if (endDate.getTime() >= startDate.getTime()) {\n segment = {\n startDate: startDate,\n endDate: endDate,\n duration: duration\n };\n segmentsArray.push(segment);\n }\n if (i === dates.length) {\n break;\n }\n startDate = new Date(dates[i].getTime());\n startDate.setDate(dates[i].getDate() + 1);\n }\n return segmentsArray;\n };\n ChartRows.prototype.splitSegmentedTaskbar = function (startDate, endDate, splitDate, segmentIndex, segments, ganttData, segmentDuration) {\n var ganttProp = ganttData.ganttProperties;\n var checkClickState = this.parent.nonWorkingDayIndex.indexOf(splitDate.getDay());\n var increment = checkClickState === -1 ? 0 : checkClickState === 0 ? 1 : 2;\n startDate = this.parent.dataOperation.checkStartDate(startDate, ganttProp, false);\n var segmentEndDate = new Date(splitDate.getTime());\n segmentEndDate = this.parent.dataOperation.checkEndDate(segmentEndDate, ganttProp, false);\n for (var i = 0; i < 2; i++) {\n var segment = {\n startDate: startDate,\n endDate: segmentEndDate,\n duration: this.parent.dataOperation.getDuration(startDate, segmentEndDate, ganttProp.durationUnit, ganttProp.isAutoSchedule, ganttProp.isMilestone),\n offsetDuration: 1\n };\n var endDateState = this.parent.nonWorkingDayIndex.indexOf(segmentEndDate.getDay());\n if (segmentIndex !== -1) {\n segments.splice(segmentIndex, 1);\n segmentIndex = -1;\n }\n segments.push(segment);\n var mode = this.parent.timelineModule.customTimelineSettings.bottomTier.unit;\n if (mode === 'Hour' || mode === 'Minutes') {\n startDate = new Date(splitDate.getTime());\n startDate = this.parent.dataOperation.checkStartDate(startDate, ganttProp, false);\n var count = this.parent.timelineModule.customTimelineSettings.bottomTier.count;\n var mode_1 = this.parent.timelineModule.customTimelineSettings.bottomTier.unit;\n var timeIncrement = this.parent.timelineModule.getIncrement(startDate, count, mode_1);\n var newTime = startDate.getTime() + timeIncrement;\n startDate.setTime(newTime + increment);\n segmentEndDate = new Date(endDate.getTime());\n timeIncrement = this.parent.timelineModule.getIncrement(segmentEndDate, count, mode_1);\n newTime = segmentEndDate.getTime() + timeIncrement;\n segmentEndDate.setTime(newTime + increment);\n }\n else {\n startDate = new Date(splitDate.getTime());\n startDate.setDate(startDate.getDate() + 1 + increment);\n this.setTime(this.parent.defaultStartTime, startDate);\n startDate = this.parent.dataOperation.checkStartDate(startDate, ganttProp, false);\n segmentEndDate = new Date(endDate.getTime());\n segmentEndDate.setDate(segmentEndDate.getDate() + 1);\n }\n if (endDateState !== -1) {\n var diff = segmentDuration - segment.duration;\n segmentEndDate =\n this.parent.dataOperation.getEndDate(startDate, diff, ganttProp.durationUnit, ganttProp, false);\n }\n else {\n segmentEndDate = this.parent.dataOperation.checkEndDate(segmentEndDate, ganttProp, false);\n }\n }\n segments.sort(function (a, b) {\n return a.startDate.getTime() - b.startDate.getTime();\n });\n return segments;\n };\n ChartRows.prototype.incrementSegments = function (segments, segmentIndex, ganttData) {\n var ganttProp = ganttData.ganttProperties;\n for (var i = segmentIndex + 1; i < segments.length; i++) {\n var segment = segments[i];\n var startDate = i !== 0 ? new Date(segments[i - 1].endDate.getTime()) : new Date(segment.startDate.getTime());\n startDate = this.parent.dataOperation.getEndDate(startDate, segment.offsetDuration, ganttProp.durationUnit, ganttProp, false);\n startDate = this.parent.dataOperation.checkStartDate(startDate, ganttProp, false);\n segment.startDate = startDate;\n var endDate = segment.endDate = this.parent.dataOperation.getEndDate(startDate, segment.duration, ganttProp.durationUnit, ganttProp, false);\n segment.endDate = endDate;\n if (i === segments.length - 1) {\n this.parent.setRecordValue('endDate', endDate, ganttProp, true);\n if (this.parent.taskFields.endDate) {\n this.parent.dataOperation.updateMappingData(ganttData, 'endDate');\n }\n }\n }\n segments.sort(function (a, b) {\n return a.startDate.getTime() - b.startDate.getTime();\n });\n this.parent.setRecordValue('segments', segments, ganttProp, true);\n this.parent.dataOperation.updateMappingData(ganttData, 'segments');\n };\n /**\n * To get milestone node.\n *\n * @param {number} i .\n * @param {NodeList} rootElement .\n * @returns {NodeList} .\n * @private\n */\n ChartRows.prototype.getMilestoneNode = function (i, rootElement) {\n var milestoneNode = null;\n var data = this.templateData;\n if (this.milestoneTemplateFunction) {\n milestoneNode = this.milestoneTemplateFunction(extend({ index: i }, data), this.parent, 'MilestoneTemplate', this.getTemplateID('MilestoneTemplate'), false, undefined, rootElement[0], this.parent.treeGrid['root']);\n }\n else {\n var template = '
40 ? 0 : 1) + 'px;left:' + 1 + 'px;\">
';\n milestoneNode = this.createDivElement(template);\n }\n return milestoneNode;\n };\n /**\n * To get task baseline Node.\n *\n * @returns {NodeList} .\n * @private\n */\n ChartRows.prototype.getTaskBaselineNode = function () {\n var data = this.templateData;\n var template = '
';\n return this.createDivElement(template);\n };\n /**\n * To get milestone baseline node.\n *\n * @returns {NodeList} .\n * @private\n */\n ChartRows.prototype.getMilestoneBaselineNode = function () {\n var data = this.templateData;\n var baselineMilestoneHeight = this.parent.renderBaseline ? 5 : 2;\n var template = '
';\n return this.createDivElement(template);\n };\n /**\n * To get left label node.\n *\n * @param {number} i .\n * @returns {NodeList} .\n * @private\n */\n ChartRows.prototype.getLeftLabelNode = function (i) {\n var leftLabelNode = this.leftLabelContainer();\n if (this.generateTaskLabelAriaLabel('left') !== \"\") {\n leftLabelNode[0].setAttribute('aria-label', this.generateTaskLabelAriaLabel('left'));\n }\n var leftLabelTemplateNode = null;\n if (this.leftTaskLabelTemplateFunction) {\n leftLabelTemplateNode = this.leftTaskLabelTemplateFunction(extend({ index: i }, this.templateData), this.parent, 'LeftLabelTemplate', this.getTemplateID('LeftLabelTemplate'), false, undefined, leftLabelNode[0], this.parent.treeGrid['root']);\n }\n else {\n var field = this.parent.labelSettings.leftLabel;\n var labelString = this.getTaskLabel(field);\n if (labelString) {\n labelString = labelString === 'isCustomTemplate' ? field : labelString;\n leftLabelTemplateNode = this.getLableText(labelString, cls.leftLabelInnerDiv);\n if (this.parent.enableHtmlSanitizer && typeof (labelString) === 'string') {\n labelString = SanitizeHtmlHelper.sanitize(labelString);\n labelString = labelString === 'isCustomTemplate' ? field : labelString;\n leftLabelTemplateNode = this.getLableText(labelString, cls.leftLabelInnerDiv);\n }\n }\n }\n if (leftLabelTemplateNode && leftLabelTemplateNode.length > 0) {\n if (leftLabelTemplateNode[0]['data'] === 'null') {\n leftLabelTemplateNode[0]['data'] = '';\n }\n append(leftLabelTemplateNode, leftLabelNode[0]);\n }\n if (this.parent.enableRtl) {\n leftLabelNode[0].style.paddingLeft = '25px';\n leftLabelNode[0].style.paddingRight = '0px';\n }\n return leftLabelNode;\n };\n ChartRows.prototype.getLableText = function (labelString, labelDiv) {\n var leftLabelHeight = this.parent.renderBaseline ? ((this.parent.rowHeight - this.taskBarHeight) / 2) : this.taskBarMarginTop;\n var templateString = createElement('div', {\n className: labelDiv, styles: 'height:' + (this.taskBarHeight) + 'px;' +\n 'margin-top:' + leftLabelHeight + 'px;'\n });\n var spanElem = createElement('span', { className: cls.label });\n var property = this.parent.disableHtmlEncode ? 'textContent' : 'innerHTML';\n spanElem[property] = labelString;\n templateString.appendChild(spanElem);\n var div = createElement('div');\n div.appendChild(templateString);\n return div.childNodes;\n };\n /**\n * To get right label node.\n *\n * @param {number} i .\n * @returns {NodeList} .\n * @private\n */\n ChartRows.prototype.getRightLabelNode = function (i) {\n var rightLabelNode = this.rightLabelContainer();\n if (this.generateTaskLabelAriaLabel('right') !== \"\") {\n rightLabelNode[0].setAttribute('aria-label', this.generateTaskLabelAriaLabel('right'));\n }\n var rightLabelTemplateNode = null;\n if (this.rightTaskLabelTemplateFunction) {\n rightLabelTemplateNode = this.rightTaskLabelTemplateFunction(extend({ index: i }, this.templateData), this.parent, 'RightLabelTemplate', this.getTemplateID('RightLabelTemplate'), false, undefined, rightLabelNode[0], this.parent.treeGrid['root']);\n }\n else {\n var field = this.parent.labelSettings.rightLabel;\n var labelString = this.getTaskLabel(field);\n if (labelString) {\n labelString = labelString === 'isCustomTemplate' ? field : labelString;\n rightLabelTemplateNode = this.getLableText(labelString, cls.rightLabelInnerDiv);\n if (this.parent.enableHtmlSanitizer && typeof (labelString) === 'string') {\n labelString = SanitizeHtmlHelper.sanitize(labelString);\n labelString = labelString === 'isCustomTemplate' ? field : labelString;\n rightLabelTemplateNode = this.getLableText(labelString, cls.rightLabelInnerDiv);\n }\n }\n }\n if (rightLabelTemplateNode && rightLabelTemplateNode.length > 0) {\n if (rightLabelTemplateNode[0]['data'] === 'null') {\n rightLabelTemplateNode[0]['data'] = '';\n }\n append(rightLabelTemplateNode, rightLabelNode[0]);\n }\n if (this.parent.enableRtl) {\n rightLabelNode[0].style.marginLeft = '0px';\n rightLabelNode[0].style.paddingRight = '25px';\n }\n return rightLabelNode;\n };\n ChartRows.prototype.getManualTaskbar = function () {\n var data = this.templateData;\n var taskbarHeight = (this.taskBarHeight / 2 - 1);\n var innerDiv = (data.ganttProperties.startDate && data.ganttProperties.endDate && data.ganttProperties.duration) ?\n ('
') :\n (!data.ganttProperties.startDate && !data.ganttProperties.endDate && data.ganttProperties.duration) ?\n ('
') : ('
');\n var template = '
' + innerDiv + ((data.ganttProperties.startDate && data.ganttProperties.endDate &&\n data.ganttProperties.duration) || data.ganttProperties.duration ? '
' +\n '
' + '
' : '');\n var milestoneTemplate = '
40 ? 0 : 2) + 'px;left:' + (this.parent.renderBaseline ? 2 : 1) + 'px;\">
';\n return this.createDivElement(data.ganttProperties.duration !== 0 ? template : milestoneTemplate);\n };\n /**\n * To get parent taskbar node.\n *\n * @param {number} i .\n * @param {NodeList} rootElement .\n * @returns {NodeList} .\n * @private\n */\n ChartRows.prototype.getParentTaskbarNode = function (i, rootElement) {\n var parentTaskbarNode = null;\n var data = this.templateData;\n if (this.parentTaskbarTemplateFunction) {\n parentTaskbarNode = this.parentTaskbarTemplateFunction(extend({ index: i }, data), this.parent, 'ParentTaskbarTemplate', this.getTemplateID('ParentTaskbarTemplate'), false, undefined, rootElement[0], this.parent.treeGrid['root']);\n }\n else {\n var labelString = '';\n var labelDiv = void 0;\n var tHeight = this.taskBarHeight / 5;\n var template = this.createDivElement('
' +\n '
');\n var progressBarInnerDiv = this.createDivElement('
');\n var div = createElement('div');\n if (this.taskLabelTemplateFunction) {\n var parentTaskLabelNode = this.taskLabelTemplateFunction(extend({ index: i }, data), this.parent, 'TaskLabelTemplate', this.getTemplateID('TaskLabelTemplate'), false, undefined, progressBarInnerDiv[0]);\n if (parentTaskLabelNode && parentTaskLabelNode.length > 0) {\n append(parentTaskLabelNode, div);\n labelString = div.innerHTML;\n }\n }\n else {\n labelString = this.getTaskLabel(this.parent.labelSettings.taskLabel);\n labelString = labelString === 'isCustomTemplate' ? this.parent.labelSettings.taskLabel : labelString;\n if (this.parent.enableHtmlSanitizer && typeof (labelString) === 'string') {\n labelString = SanitizeHtmlHelper.sanitize(labelString);\n }\n }\n if (labelString.indexOf('null') === -1) {\n if (this.getTaskLabel(this.parent.labelSettings.taskLabel) === 'isCustomTemplate' &&\n !this.isTemplate(this.parent.labelSettings.taskLabel)) {\n labelString = '';\n }\n if (isNaN(parseInt(labelString))) {\n labelDiv = '';\n }\n else {\n labelDiv = '';\n }\n var labelElement = this.createDivElement(labelDiv)[0];\n if (this.parent.disableHtmlEncode) {\n labelElement.innerText = labelString;\n }\n else {\n labelElement.innerHTML = labelString;\n }\n var parentLabel = this.parent.labelSettings.taskLabel;\n if (parentLabel && parentLabel['elementRef'])\n labelElement.appendChild(div);\n progressBarInnerDiv[0].appendChild(labelElement);\n if (progressBarInnerDiv[0].querySelectorAll('.e-task-label')[0].textContent !== '' &&\n !this.isTemplate(parentLabel) &&\n progressBarInnerDiv[0].querySelectorAll('.e-task-label')[0].children[0])\n progressBarInnerDiv[0].querySelectorAll('.e-task-label')[0].children[0].remove();\n if (progressBarInnerDiv[0].querySelectorAll('.e-task-label')[0].textContent === '' &&\n parentLabel && !parentLabel['elementRef'] && div.innerHTML !== '')\n progressBarInnerDiv[0].querySelectorAll('.e-task-label')[0].textContent = parentLabel;\n }\n var milestoneTemplate = '
40 ? 0 : 2) + 'px;left:' + (this.parent.renderBaseline ? 2 : 1) + 'px;\">
';\n template[0].appendChild([].slice.call(progressBarInnerDiv)[0]);\n parentTaskbarNode = data.ganttProperties.isMilestone ?\n this.createDivElement(data.ganttProperties.isAutoSchedule ? milestoneTemplate : '') : template;\n }\n if (this.parent.enableRtl && parentTaskbarNode[0] && parentTaskbarNode[0].querySelector('.e-task-label')) {\n parentTaskbarNode[0].querySelector('.e-task-label').style.marginLeft = '15px';\n parentTaskbarNode[0].querySelector('.e-task-label').style.marginRight = '8px';\n if (parentTaskbarNode[0].querySelector('.e-gantt-parent-progressbar')) {\n parentTaskbarNode[0].querySelector('.e-gantt-parent-progressbar').style.textAlign = 'left';\n }\n }\n return parentTaskbarNode;\n };\n /**\n * To get taskbar row('TR') node\n *\n * @returns {NodeList} .\n * @private\n */\n ChartRows.prototype.getTableTrNode = function (i) {\n var table = createElement('table');\n var className = (this.parent.gridLines === 'Horizontal' || this.parent.gridLines === 'Both') ?\n 'e-chart-row-border' : '';\n var rows = this.parent.treeGrid.grid.contentModule.getRows()[i];\n var activecls;\n if (rows && rows.isSelected) {\n activecls = 'e-active';\n }\n else {\n activecls = '';\n }\n table.innerHTML = '' +\n '';\n return table.childNodes;\n };\n /**\n * To initialize chart templates.\n *\n * @returns {void}\n * @private\n */\n ChartRows.prototype.initializeChartTemplate = function () {\n if (!isNullOrUndefined(this.parent.parentTaskbarTemplate)) {\n this.parentTaskbarTemplateFunction = this.templateCompiler(this.parent.parentTaskbarTemplate);\n }\n if (!isNullOrUndefined(this.parent.labelSettings.leftLabel) &&\n this.isTemplate(this.parent.labelSettings.leftLabel)) {\n this.leftTaskLabelTemplateFunction = this.templateCompiler(this.parent.labelSettings.leftLabel);\n }\n if (!isNullOrUndefined(this.parent.labelSettings.rightLabel) &&\n this.isTemplate(this.parent.labelSettings.rightLabel)) {\n this.rightTaskLabelTemplateFunction = this.templateCompiler(this.parent.labelSettings.rightLabel);\n }\n if (!isNullOrUndefined(this.parent.labelSettings.taskLabel) &&\n this.isTemplate(this.parent.labelSettings.taskLabel)) {\n this.taskLabelTemplateFunction = this.templateCompiler(this.parent.labelSettings.taskLabel);\n }\n if (!isNullOrUndefined(this.parent.taskbarTemplate)) {\n this.childTaskbarTemplateFunction = this.templateCompiler(this.parent.taskbarTemplate);\n }\n if (!isNullOrUndefined(this.parent.milestoneTemplate)) {\n this.milestoneTemplateFunction = this.templateCompiler(this.parent.milestoneTemplate);\n }\n };\n ChartRows.prototype.createDivElement = function (template) {\n var div = createElement('div');\n div.innerHTML = template;\n return div.childNodes;\n };\n ChartRows.prototype.isTemplate = function (template) {\n var result = false;\n for (var i = 0; i < this.parent.ganttColumns.length; i++) {\n if (template === this.parent.ganttColumns[i].field) {\n result = true;\n break;\n }\n }\n if (typeof template !== 'string' || template.indexOf('#') === 0 || template.indexOf('<') > -1\n || template.indexOf('$') > -1 || !result) {\n result = true;\n }\n else {\n result = false;\n }\n return result;\n };\n /**\n * @param {string} templateName .\n * @returns {string} .\n * @private\n */\n ChartRows.prototype.getTemplateID = function (templateName) {\n var ganttID = this.parent.element.id;\n return ganttID + templateName;\n };\n ChartRows.prototype.leftLabelContainer = function () {\n var template = '
';\n return this.createDivElement(template);\n };\n ChartRows.prototype.taskbarContainer = function () {\n var data = this.templateData;\n var manualParent = this.parent.editModule && this.parent.editSettings.allowTaskbarEditing &&\n this.parent.editModule.taskbarEditModule.taskBarEditAction === 'ParentResizing' ?\n true : false;\n var template = '
';\n return this.createDivElement(template);\n };\n ChartRows.prototype.rightLabelContainer = function () {\n var template = '
';\n return this.createDivElement(template);\n };\n ChartRows.prototype.childTaskbarLeftResizer = function () {\n var lResizerLeft = -(this.parent.isAdaptive ? 12 : 2);\n var template = '
';\n return this.createDivElement(template);\n };\n ChartRows.prototype.childTaskbarRightResizer = function () {\n var rResizerLeft = this.parent.isAdaptive ? -2 : -10;\n var template = '
';\n return this.createDivElement(template);\n };\n ChartRows.prototype.childTaskbarProgressResizer = function () {\n var width = this.parent.enableRtl ? (this.templateData.ganttProperties.progressWidth + 8) : (this.templateData.ganttProperties.progressWidth - 6);\n var template = '
' +\n '
';\n return this.createDivElement(template);\n };\n ChartRows.prototype.getLeftPointNode = function () {\n var data = this.templateData;\n var pointerLeft = -((this.parent.isAdaptive ? 14 : 2) + this.connectorPointWidth);\n var mileStoneLeft = -(this.connectorPointWidth + 2);\n var pointerTop = Math.floor(this.milesStoneRadius - (this.connectorPointWidth / 2));\n var marginTop;\n if ((!this.templateData.ganttProperties.isAutoSchedule && this.templateData.hasChildRecords) && this.parent.allowParentDependency) {\n marginTop = '';\n }\n else {\n marginTop = 'margin-top:' + this.connectorPointMargin + 'px';\n }\n var template = '
' +\n '
' + this.touchLeftConnectorpoint + '
';\n return this.createDivElement(template);\n };\n ChartRows.prototype.getRightPointNode = function () {\n var data = this.templateData;\n var pointerRight = this.parent.isAdaptive ? 10 : -2;\n var pointerTop = Math.floor(this.milesStoneRadius - (this.connectorPointWidth / 2));\n var marginTop;\n if ((!this.templateData.ganttProperties.isAutoSchedule && this.templateData.hasChildRecords) && this.parent.allowParentDependency) {\n marginTop = '';\n }\n else {\n marginTop = 'margin-top:' + this.connectorPointMargin + 'px';\n }\n var template = '
' +\n '
' +\n this.touchRightConnectorpoint + '
';\n return this.createDivElement(template);\n };\n /**\n * To get task label.\n *\n * @param {string} field .\n * @returns {string} .\n * @private\n */\n ChartRows.prototype.getTaskLabel = function (field) {\n var length = this.parent.ganttColumns.length;\n var resultString = null;\n if (!isNullOrUndefined(field) && field !== '') {\n if (field === this.parent.taskFields.resourceInfo) {\n resultString = this.getResourceName(this.templateData);\n }\n else {\n for (var i = 0; i < length; i++) {\n if (field === this.parent.ganttColumns[i].field) {\n resultString = this.getFieldValue(this.templateData[field]).toString();\n break;\n }\n }\n if (isNullOrUndefined(resultString)) {\n return 'isCustomTemplate';\n }\n }\n }\n else {\n resultString = '';\n }\n return resultString;\n };\n ChartRows.prototype.getExpandDisplayProp = function (data) {\n data = this.templateData;\n if (this.parent.getExpandStatus(data)) {\n return 'table-row';\n }\n return 'none';\n };\n ChartRows.prototype.getRowClassName = function (data) {\n data = this.templateData;\n var rowClass = 'gridrowtaskId';\n var parentItem = data.parentItem;\n if (parentItem) {\n rowClass += parentItem.taskId.toString();\n }\n rowClass += 'level';\n rowClass += data.level.toString();\n return rowClass;\n };\n ChartRows.prototype.getBorderRadius = function (data) {\n data = this.templateData;\n var diff = data.ganttProperties.width - data.ganttProperties.progressWidth;\n if (diff <= 4) {\n return 4 - diff;\n }\n else {\n return 0;\n }\n };\n ChartRows.prototype.getSplitTaskBorderRadius = function (data) {\n var diff = data.width - data.progressWidth;\n if (diff <= 4) {\n return 4 - diff;\n }\n else {\n return 0;\n }\n };\n ChartRows.prototype.taskNameWidth = function (ganttData) {\n ganttData = this.templateData;\n var ganttProp = ganttData.ganttProperties;\n var width;\n if (ganttData.ganttProperties.isMilestone) {\n width = (ganttData.ganttProperties.left - (this.parent.getTaskbarHeight() / 2));\n }\n else if (ganttData.hasChildRecords && !ganttProp.isAutoSchedule) {\n if (!this.parent.allowUnscheduledTasks) {\n width = (ganttProp.autoStartDate.getTime() < ganttProp.startDate.getTime()) ?\n ganttProp.autoLeft : ganttProp.left;\n }\n else {\n width = ganttProp.left < ganttProp.autoLeft ? ganttProp.left : ganttProp.autoLeft;\n }\n }\n else {\n width = ganttData.ganttProperties.left;\n }\n if (width < 0) {\n width = 0;\n }\n return width + 'px';\n };\n ChartRows.prototype.getRightLabelLeft = function (ganttData) {\n ganttData = this.templateData;\n var ganttProp = ganttData.ganttProperties;\n var left;\n var endLeft;\n var width;\n if (ganttData.ganttProperties.isMilestone) {\n return ganttData.ganttProperties.left + (this.parent.getTaskbarHeight() / 2);\n }\n else if (ganttData.hasChildRecords && !ganttProp.isAutoSchedule) {\n if (!this.parent.allowUnscheduledTasks) {\n left = ganttProp.autoStartDate.getTime() < ganttProp.startDate.getTime() ? ganttProp.autoLeft : ganttProp.left;\n endLeft = ganttProp.autoEndDate.getTime() < ganttProp.endDate.getTime() ?\n this.parent.dataOperation.getTaskLeft(ganttProp.endDate, ganttProp.isMilestone) :\n this.parent.dataOperation.getTaskLeft(ganttProp.autoEndDate, ganttProp.isMilestone);\n width = endLeft - left;\n }\n else {\n left = ganttProp.left < ganttProp.autoLeft ? ganttProp.autoLeft : ganttProp.left;\n width = ganttProp.autoWidth;\n }\n return left + width;\n }\n else {\n return ganttData.ganttProperties.left + ganttData.ganttProperties.width;\n }\n };\n ChartRows.prototype.getExpandClass = function (data) {\n data = this.templateData;\n if (data.expanded) {\n return cls.rowExpand;\n }\n else if (!data.expanded && data.hasChildRecords) {\n return cls.rowCollapse;\n }\n return '';\n };\n ChartRows.prototype.getFieldValue = function (field) {\n return isNullOrUndefined(field) ? '' : field;\n };\n ChartRows.prototype.getResourceName = function (ganttData) {\n ganttData = this.templateData;\n var resource = null;\n if (!isNullOrUndefined(ganttData.ganttProperties.resourceInfo)) {\n var length_2 = ganttData.ganttProperties.resourceInfo.length;\n if (length_2 > 0) {\n for (var i = 0; i < length_2; i++) {\n var resourceName = ganttData.ganttProperties.resourceInfo[i][this.parent.resourceFields.name];\n var resourceUnit = ganttData.ganttProperties.resourceInfo[i][this.parent.resourceFields.unit];\n if (resourceUnit !== 100) {\n resourceName += '[' + resourceUnit + '%' + ']';\n }\n if (isNullOrUndefined(resource)) {\n resource = resourceName;\n }\n else {\n resource += ' , ' + resourceName;\n }\n }\n return resource;\n }\n else {\n return '';\n }\n }\n return '';\n };\n /**\n * To initialize private variable help to render task bars.\n *\n * @returns {void}\n * @private\n */\n ChartRows.prototype.initChartHelperPrivateVariable = function () {\n var taskbarHeightValue = this.parent.renderBaseline ? 0.45 : 0.62;\n var taskBarMarginTopValue = this.parent.renderBaseline ? 4 : 2;\n var milestoneHeightValue = this.parent.renderBaseline ? 1.13 : 0.82;\n this.baselineColor = !isNullOrUndefined(this.parent.baselineColor) &&\n this.parent.baselineColor !== '' ? this.parent.baselineColor : null;\n this.taskBarHeight = isNullOrUndefined(this.parent.taskbarHeight) || this.parent.taskbarHeight >= this.parent.rowHeight ?\n Math.floor(this.parent.rowHeight * taskbarHeightValue) : this.parent.taskbarHeight; // 0.62 -- Standard Ratio.\n if (this.parent.renderBaseline) {\n var height = void 0;\n if ((this.taskBarHeight + this.baselineHeight) <= this.parent.rowHeight) {\n height = this.taskBarHeight;\n }\n else {\n height = this.taskBarHeight - (this.baselineHeight + 1);\n }\n this.taskBarHeight = height;\n }\n this.milestoneHeight = Math.floor(this.taskBarHeight * milestoneHeightValue); // 0.82 -- Standard Ratio.\n this.taskBarMarginTop = Math.floor((this.parent.rowHeight - this.taskBarHeight) / taskBarMarginTopValue);\n this.milestoneMarginTop = Math.floor((this.parent.rowHeight - this.milestoneHeight) / 2);\n this.milesStoneRadius = Math.floor((this.milestoneHeight) / 2);\n this.baselineTop = -(Math.floor((this.parent.rowHeight - (this.taskBarHeight + this.taskBarMarginTop))) - 4);\n this.connectorPointWidth = this.parent.isAdaptive ? Math.round(this.taskBarHeight / 2) : 10;\n this.connectorPointMargin = Math.floor((this.taskBarHeight / 2) - (this.connectorPointWidth / 2)) - 1;\n };\n /**\n * Function used to refresh Gantt rows.\n *\n * @returns {void}\n * @private\n */\n ChartRows.prototype.refreshGanttRows = function () {\n this.parent.currentViewData = this.parent.treeGrid.getCurrentViewRecords().slice();\n this.createTaskbarTemplate();\n if (this.parent.viewType === 'ResourceView' && this.parent.showOverAllocation) {\n for (var i = 0; i < this.parent.currentViewData.length; i++) {\n var data = this.parent.currentViewData[i];\n if (data.childRecords.length > 0) {\n this.parent.setRecordValue('workTimelineRanges', this.parent.dataOperation.mergeRangeCollections(data.ganttProperties.workTimelineRanges, true), data.ganttProperties, true);\n this.parent.dataOperation.calculateRangeLeftWidth(data.ganttProperties.workTimelineRanges);\n }\n }\n this.parent.ganttChartModule.renderRangeContainer(this.parent.currentViewData);\n }\n this.parent.ganttChartModule.updateLastRowBottomWidth();\n };\n /**\n * To render taskbars.\n *\n * @returns {void}\n * @private\n */\n ChartRows.prototype.createTaskbarTemplate = function () {\n var _a;\n var trs = [].slice.call(this.ganttChartTableBody.querySelectorAll('tr'));\n this.ganttChartTableBody.innerHTML = '';\n var collapsedResourceRecord = [];\n var prevCurrentView = this.parent.treeGridModule.prevCurrentView;\n this.refreshedTr = [];\n this.refreshedData = [];\n if (this.parent.enableImmutableMode && prevCurrentView && prevCurrentView.length > 0 && this.isUpdated) {\n var oldKeys = {};\n var oldRowElements = [];\n var key = this.parent.treeGrid.getPrimaryKeyFieldNames()[0];\n for (var i = 0; i < prevCurrentView.length; i++) {\n oldRowElements[i] = trs[i];\n oldKeys[prevCurrentView[i][key]] = i;\n }\n for (var index = 0; index < this.parent.currentViewData.length; index++) {\n var oldIndex = oldKeys[this.parent.currentViewData[index][key]];\n var modifiedRecIndex = this.parent.modifiedRecords.indexOf(this.parent.currentViewData[index]);\n if (isNullOrUndefined(oldIndex) || modifiedRecIndex !== -1 || this.parent.isFromRenderBaseline) {\n var tRow = this.getGanttChartRow(index, this.parent.currentViewData[index]);\n this.ganttChartTableBody.appendChild(tRow);\n this.refreshedTr.push(this.ganttChartTableBody.querySelectorAll('tr')[index]);\n this.refreshedData.push(this.parent.currentViewData[index]);\n }\n else {\n this.ganttChartTableBody.appendChild(oldRowElements[oldIndex]);\n }\n this.ganttChartTableBody.querySelectorAll('tr')[index].setAttribute('aria-rowindex', index.toString());\n }\n }\n else {\n var dupChartBody = void 0;\n dupChartBody = createElement('tbody', {\n id: this.parent.element.id + 'GanttTaskTableBody'\n });\n for (var i = 0; i < this.parent.currentViewData.length; i++) {\n var tempTemplateData = this.parent.currentViewData[i];\n if (this.parent.viewType === 'ResourceView') {\n if (this.parent.editModule && this.parent.editModule.isResourceTaskDeleted || this.parent.isFromOnPropertyChange) {\n this.parent.editModule.isResourceTaskDeleted = false;\n }\n if (!tempTemplateData.expanded && this.parent.enableMultiTaskbar) {\n collapsedResourceRecord.push(tempTemplateData);\n }\n }\n var tRow = this.getGanttChartRow(i, tempTemplateData);\n dupChartBody.appendChild(tRow);\n if (this.parent.enableImmutableMode) {\n this.refreshedTr.push(dupChartBody.querySelectorAll('tr')[i]);\n this.refreshedData.push(this.parent.currentViewData[i]);\n }\n // To maintain selection when virtualization is enabled\n if (this.parent.selectionModule && this.parent.allowSelection) {\n this.parent.selectionModule.maintainSelectedRecords(parseInt(tRow.getAttribute('aria-rowindex'), 10));\n }\n }\n (_a = this.ganttChartTableBody).replaceChildren.apply(_a, dupChartBody.childNodes);\n this.parent.initialChartRowElements = this.parent.ganttChartModule.getChartRows();\n }\n if (this.parent.enableCriticalPath && this.parent.criticalPathModule) {\n var criticalModule = this.parent.criticalPathModule;\n if (criticalModule.criticalPathCollection) {\n this.parent.criticalPathModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);\n }\n }\n this.parent.renderTemplates();\n this.triggerQueryTaskbarInfo();\n this.parent.modifiedRecords = [];\n if (this.parent.viewType == 'ResourceView' && this.parent.showOverAllocation) {\n this.updateOverlapped();\n }\n if (collapsedResourceRecord.length) {\n for (var j = 0; j < collapsedResourceRecord.length; j++) {\n if (collapsedResourceRecord[j].hasChildRecords) {\n this.parent.isGanttChartRendered = true;\n this.parent.chartRowsModule.refreshRecords([collapsedResourceRecord[j]]);\n }\n }\n }\n this.parent.isGanttChartRendered = true;\n this.parent.renderTemplates();\n };\n /**\n * To render taskbars.\n *\n * @param {number} i .\n * @param {IGanttData} tempTemplateData .\n * @returns {Node} .\n * @private\n */\n ChartRows.prototype.getGanttChartRow = function (i, tempTemplateData) {\n this.templateData = tempTemplateData;\n var taskBaselineTemplateNode = null;\n var parentTrNode = this.getTableTrNode(i);\n var leftLabelNode = this.getLeftLabelNode(i);\n var taskbarContainerNode = this.taskbarContainer();\n taskbarContainerNode[0].setAttribute('aria-label', this.generateAriaLabel(this.templateData));\n taskbarContainerNode[0].setAttribute('rowUniqueId', this.templateData.ganttProperties.rowUniqueID);\n var connectorLineLeftNode;\n if (!this.templateData.hasChildRecords && !this.parent.allowParentDependency) {\n var connectorLineLeftNode_1 = this.getLeftPointNode();\n taskbarContainerNode[0].appendChild([].slice.call(connectorLineLeftNode_1)[0]);\n }\n else if (this.parent.allowParentDependency) {\n connectorLineLeftNode = this.getLeftPointNode();\n if ((this.templateData.ganttProperties.isAutoSchedule && this.parent.viewType === 'ProjectView') || !this.templateData.hasChildRecords) {\n taskbarContainerNode[0].appendChild([].slice.call(connectorLineLeftNode)[0]);\n }\n }\n if (this.templateData.hasChildRecords) {\n var parentTaskbarTemplateNode = this.getParentTaskbarNode(i, taskbarContainerNode);\n if (!this.templateData.ganttProperties.isAutoSchedule) {\n var manualTaskbar = this.getManualTaskbar();\n if (!isNullOrUndefined(manualTaskbar[0])) {\n if (this.parent.allowParentDependency) {\n manualTaskbar[0].appendChild([].slice.call(connectorLineLeftNode)[0]);\n var connectorLineRightNode_1 = this.getRightPointNode();\n manualTaskbar[0].appendChild([].slice.call(connectorLineRightNode_1)[0]);\n }\n taskbarContainerNode[0].appendChild([].slice.call(manualTaskbar)[0]);\n }\n }\n if ((this.templateData.ganttProperties.autoDuration !== 0) && !this.templateData.ganttProperties.isMilestone && parentTaskbarTemplateNode && parentTaskbarTemplateNode.length > 0) {\n append(parentTaskbarTemplateNode, taskbarContainerNode[0]);\n }\n else if ((this.templateData.ganttProperties.duration === 0 && this.templateData.ganttProperties.isMilestone && this.templateData.ganttProperties.isAutoSchedule)) {\n var milestoneTemplateNode = this.getMilestoneNode(i, taskbarContainerNode);\n if (milestoneTemplateNode && milestoneTemplateNode.length > 0) {\n append(milestoneTemplateNode, taskbarContainerNode[0]);\n }\n }\n if (this.parent.renderBaseline && this.templateData.ganttProperties.baselineStartDate &&\n this.templateData.ganttProperties.baselineEndDate) {\n taskBaselineTemplateNode = ((this.templateData.ganttProperties.baselineStartDate.getTime() === this.templateData.ganttProperties.baselineEndDate.getTime()) || ((!isNullOrUndefined(this.templateData.ganttProperties.baselineStartDate) && !isNullOrUndefined(this.templateData.ganttProperties.startDate) && (this.templateData.ganttProperties.baselineStartDate.getTime() === this.templateData.ganttProperties.startDate.getTime()))\n && (!isNullOrUndefined(this.templateData.ganttProperties.baselineEndDate) && !isNullOrUndefined(this.templateData.ganttProperties.endDate) && (this.templateData.ganttProperties.baselineEndDate.getTime() === this.templateData.ganttProperties.endDate.getTime())) &&\n this.templateData.ganttProperties.isMilestone))\n ? this.getMilestoneBaselineNode() : this.getTaskBaselineNode();\n }\n }\n else if (this.templateData.ganttProperties.isMilestone) {\n var milestoneTemplateNode = this.getMilestoneNode(i, taskbarContainerNode);\n if (milestoneTemplateNode && milestoneTemplateNode.length > 0) {\n append(milestoneTemplateNode, taskbarContainerNode[0]);\n }\n if (this.parent.renderBaseline && this.templateData.ganttProperties.baselineStartDate &&\n this.templateData.ganttProperties.baselineEndDate) {\n taskBaselineTemplateNode = ((this.templateData.ganttProperties.baselineStartDate.getTime() === this.templateData.ganttProperties.baselineEndDate.getTime()) || ((!isNullOrUndefined(this.templateData.ganttProperties.baselineStartDate) && !isNullOrUndefined(this.templateData.ganttProperties.startDate) && (this.templateData.ganttProperties.baselineStartDate.getTime() === this.templateData.ganttProperties.startDate.getTime()))\n && (!isNullOrUndefined(this.templateData.ganttProperties.baselineEndDate) && !isNullOrUndefined(this.templateData.ganttProperties.endDate) && (this.templateData.ganttProperties.baselineEndDate.getTime() === this.templateData.ganttProperties.endDate.getTime())) &&\n this.templateData.ganttProperties.isMilestone))\n ? this.getMilestoneBaselineNode() : this.getTaskBaselineNode();\n }\n }\n else {\n var scheduledTask = isScheduledTask(this.templateData.ganttProperties); // eslint-disable-line\n var childTaskbarProgressResizeNode = null;\n var childTaskbarRightResizeNode = null;\n var childTaskbarLeftResizeNode = null;\n if (!isNullOrUndefined(scheduledTask)) {\n if (scheduledTask || this.templateData.ganttProperties.duration) {\n if (scheduledTask && (isNullOrUndefined(this.templateData.ganttProperties.segments)\n || this.templateData.ganttProperties.segments.length <= 0)) {\n childTaskbarProgressResizeNode = this.childTaskbarProgressResizer();\n childTaskbarLeftResizeNode = this.childTaskbarLeftResizer();\n childTaskbarRightResizeNode = this.childTaskbarRightResizer();\n }\n }\n var childTaskbarTemplateNode = this.getChildTaskbarNode(i, taskbarContainerNode);\n if (childTaskbarLeftResizeNode) {\n taskbarContainerNode[0].appendChild([].slice.call(childTaskbarLeftResizeNode)[0]);\n }\n if (childTaskbarTemplateNode && childTaskbarTemplateNode.length > 0) {\n if (this.templateData.ganttProperties.segments && this.templateData.ganttProperties.segments.length > 0) {\n var length_3 = this.templateData.ganttProperties.segments.length;\n var connector = ('
');\n var segmentConnector = null;\n segmentConnector = this.createDivElement(connector);\n taskbarContainerNode[0].appendChild([].slice.call(segmentConnector)[0]);\n for (var i_1 = 0; i_1 < length_3; i_1++) {\n taskbarContainerNode[0].appendChild([].slice.call(childTaskbarTemplateNode)[0]);\n }\n }\n else {\n append(childTaskbarTemplateNode, taskbarContainerNode[0]);\n }\n }\n if (childTaskbarProgressResizeNode) {\n taskbarContainerNode[0].appendChild([].slice.call(childTaskbarProgressResizeNode)[0]);\n }\n if (childTaskbarRightResizeNode) {\n taskbarContainerNode[0].appendChild([].slice.call(childTaskbarRightResizeNode)[0]);\n }\n }\n if (this.parent.renderBaseline && this.templateData.ganttProperties.baselineStartDate &&\n this.templateData.ganttProperties.baselineEndDate) {\n taskBaselineTemplateNode = ((this.templateData.ganttProperties.baselineStartDate.getTime() === this.templateData.ganttProperties.baselineEndDate.getTime()) || ((!isNullOrUndefined(this.templateData.ganttProperties.baselineStartDate) && !isNullOrUndefined(this.templateData.ganttProperties.startDate) && (this.templateData.ganttProperties.baselineStartDate.getTime() === this.templateData.ganttProperties.startDate.getTime()))\n && (!isNullOrUndefined(this.templateData.ganttProperties.baselineEndDate) && !isNullOrUndefined(this.templateData.ganttProperties.endDate) && (this.templateData.ganttProperties.baselineEndDate.getTime() === this.templateData.ganttProperties.endDate.getTime())) &&\n this.templateData.ganttProperties.isMilestone))\n ? this.getMilestoneBaselineNode() : this.getTaskBaselineNode();\n }\n }\n var connectorLineRightNode;\n if (this.parent.allowParentDependency && ((this.templateData.ganttProperties.isAutoSchedule && this.parent.viewType === 'ProjectView') || !this.templateData.hasChildRecords)) {\n connectorLineRightNode = this.getRightPointNode();\n taskbarContainerNode[0].appendChild([].slice.call(connectorLineRightNode)[0]);\n }\n else if (!this.parent.allowParentDependency) {\n connectorLineRightNode = this.getRightPointNode();\n taskbarContainerNode[0].appendChild([].slice.call(connectorLineRightNode)[0]);\n }\n var rightLabelNode = this.getRightLabelNode(i);\n parentTrNode[0].childNodes[0].childNodes[0].appendChild([].slice.call(leftLabelNode)[0]);\n parentTrNode[0].childNodes[0].childNodes[0].appendChild([].slice.call(taskbarContainerNode)[0]);\n if (this.templateData.ganttProperties.indicators && this.templateData.ganttProperties.indicators.length > 0) {\n var taskIndicatorNode = void 0;\n var taskIndicatorTextFunction = void 0;\n var taskIndicatorTextNode = void 0;\n var indicators = this.templateData.ganttProperties.indicators;\n for (var indicatorIndex = 0; indicatorIndex < indicators.length; indicatorIndex++) {\n taskIndicatorNode = this.getIndicatorNode(indicators[indicatorIndex]);\n taskIndicatorNode[0].setAttribute('aria-label', indicators[indicatorIndex].name);\n if (indicators[indicatorIndex].name.indexOf('$') > -1 || indicators[indicatorIndex].name.indexOf('#') > -1) {\n taskIndicatorTextFunction = this.templateCompiler(indicators[indicatorIndex].name);\n taskIndicatorTextNode = taskIndicatorTextFunction(extend({ index: i }, this.templateData), this.parent, 'indicatorLabelText');\n }\n else {\n var text = createElement('Text');\n text.innerHTML = indicators[indicatorIndex].name;\n if (this.parent.enableHtmlSanitizer && typeof (indicators[indicatorIndex].name) === 'string') {\n indicators[indicatorIndex].name = SanitizeHtmlHelper.sanitize(indicators[indicatorIndex].name);\n text.innerText = indicators[indicatorIndex].name;\n }\n taskIndicatorTextNode = text.childNodes;\n }\n taskIndicatorNode[0].appendChild([].slice.call(taskIndicatorTextNode)[0]);\n taskIndicatorNode[0].title =\n !isNullOrUndefined(indicators[indicatorIndex].tooltip) ? indicators[indicatorIndex].tooltip : '';\n parentTrNode[0].childNodes[0].childNodes[0].appendChild([].slice.call(taskIndicatorNode)[0]);\n }\n }\n if (rightLabelNode && rightLabelNode.length > 0) {\n parentTrNode[0].childNodes[0].childNodes[0].appendChild([].slice.call(rightLabelNode)[0]);\n }\n if (!isNullOrUndefined(taskBaselineTemplateNode)) {\n parentTrNode[0].childNodes[0].childNodes[0].appendChild([].slice.call(taskBaselineTemplateNode)[0]);\n }\n var tRow = parentTrNode[0].childNodes[0];\n this.setAriaRowIndex(tempTemplateData, tRow);\n return tRow;\n };\n /**\n * To set aria-rowindex for chart rows\n *\n * @returns {void} .\n * @private\n */\n ChartRows.prototype.setAriaRowIndex = function (tempTemplateData, tRow) {\n var dataSource = this.parent.treeGrid.getCurrentViewRecords();\n var visualData = this.parent.virtualScrollModule && this.parent.enableVirtualization ?\n getValue('virtualScrollModule.visualData', this.parent.treeGrid) : dataSource;\n var index = visualData.indexOf(tempTemplateData);\n tRow.setAttribute('aria-rowindex', index.toString());\n };\n /**\n * To trigger query taskbar info event.\n *\n * @returns {void}\n * @private\n */\n ChartRows.prototype.triggerQueryTaskbarInfo = function () {\n if (!this.parent.queryTaskbarInfo) {\n return;\n }\n var length = this.parent.enableImmutableMode ?\n this.refreshedTr.length : this.ganttChartTableBody.querySelectorAll('tr').length;\n var trElement;\n var data;\n for (var index = 0; index < length; index++) {\n trElement = this.parent.enableImmutableMode ? this.refreshedTr[index] : this.ganttChartTableBody.querySelectorAll('tr')[index];\n data = this.refreshedData.length > 0 ? this.refreshedData[index] : this.parent.currentViewData[index];\n var segmentLength = !isNullOrUndefined(data.ganttProperties.segments) && data.ganttProperties.segments.length;\n if (segmentLength > 0) {\n for (var i = 0; i < segmentLength; i++) {\n var segmentedTasks = trElement.getElementsByClassName('e-segmented-taskbar');\n var segmentElement = segmentedTasks[i];\n this.triggerQueryTaskbarInfoByIndex(segmentElement, data);\n }\n }\n else if (trElement) {\n this.triggerQueryTaskbarInfoByIndex(trElement, data);\n }\n }\n };\n /**\n *\n * @param {Element} trElement .\n * @param {IGanttData} data .\n * @returns {void} .\n * @private\n */\n ChartRows.prototype.triggerQueryTaskbarInfoByIndex = function (trElement, data) {\n var _this = this;\n // eslint-disable-next-line\n var taskbarElement = !isNullOrUndefined(data.ganttProperties.segments) && data.ganttProperties.segments.length > 0 ? trElement :\n trElement.querySelector('.' + cls.taskBarMainContainer);\n var rowElement;\n var segmentRowElement;\n if (data.ganttProperties.segments && data.ganttProperties.segments.length > 0) {\n segmentRowElement = trElement.parentElement.parentElement.parentElement;\n }\n var triggerTaskbarElement;\n var args = {\n data: data,\n rowElement: trElement,\n taskbarElement: taskbarElement,\n taskbarType: data.hasChildRecords ? 'ParentTask' : data.ganttProperties.isMilestone ? 'Milestone' : 'ChildTask'\n };\n var classCollections = this.getClassName(args);\n if (args.taskbarType === 'Milestone') {\n args.milestoneColor = taskbarElement.querySelector(classCollections[0]) ?\n getComputedStyle(taskbarElement.querySelector(classCollections[0])).backgroundColor : null;\n args.baselineColor = trElement.querySelector(classCollections[1]) ?\n getComputedStyle(trElement.querySelector(classCollections[1])).backgroundColor :\n (trElement.querySelector('.' + cls.baselineBar) ? getComputedStyle(trElement.querySelector('.' + cls.baselineBar)).backgroundColor : null);\n }\n else if (taskbarElement) {\n var childTask = taskbarElement.querySelector(classCollections[0]);\n var progressTask = taskbarElement.querySelector(classCollections[1]);\n args.taskbarBgColor = isNullOrUndefined(childTask) ? null : taskbarElement.classList.contains(cls.traceChildTaskBar) ?\n getComputedStyle(taskbarElement).backgroundColor :\n getComputedStyle(taskbarElement.querySelector(classCollections[0])).backgroundColor;\n args.taskbarBorderColor = isNullOrUndefined(childTask) ? null : taskbarElement.classList.contains(cls.traceChildTaskBar) ?\n getComputedStyle(taskbarElement).backgroundColor :\n getComputedStyle(taskbarElement.querySelector(classCollections[0])).borderColor;\n args.progressBarBgColor = isNullOrUndefined(progressTask) ? null :\n taskbarElement.classList.contains(cls.traceChildProgressBar) ?\n getComputedStyle(taskbarElement).backgroundColor :\n getComputedStyle(taskbarElement.querySelector(classCollections[1])).backgroundColor;\n // args.progressBarBorderColor = taskbarElement.querySelector(progressBarClass) ?\n // getComputedStyle(taskbarElement.querySelector(progressBarClass)).borderColor : null;\n if (segmentRowElement) {\n args.baselineColor = segmentRowElement.querySelector('.' + cls.baselineBar) ?\n getComputedStyle(segmentRowElement.querySelector('.' + cls.baselineBar)).backgroundColor : null;\n }\n else {\n args.baselineColor = trElement.querySelector('.' + cls.baselineBar) ?\n getComputedStyle(trElement.querySelector('.' + cls.baselineBar)).backgroundColor : null;\n }\n args.taskLabelColor = taskbarElement.querySelector('.' + cls.taskLabel) ?\n getComputedStyle(taskbarElement.querySelector('.' + cls.taskLabel)).color : null;\n }\n if (segmentRowElement) {\n args.rightLabelColor = segmentRowElement.querySelector('.' + cls.rightLabelContainer) &&\n (segmentRowElement.querySelector('.' + cls.rightLabelContainer)).querySelector('.' + cls.label) ?\n getComputedStyle((segmentRowElement.querySelector('.' + cls.rightLabelContainer)).querySelector('.' + cls.label)).color : null;\n args.leftLabelColor = segmentRowElement.querySelector('.' + cls.leftLabelContainer) &&\n (segmentRowElement.querySelector('.' + cls.leftLabelContainer)).querySelector('.' + cls.label) ?\n getComputedStyle((segmentRowElement.querySelector('.' + cls.leftLabelContainer)).querySelector('.' + cls.label)).color : null;\n }\n else {\n args.rightLabelColor = trElement.querySelector('.' + cls.rightLabelContainer) &&\n (trElement.querySelector('.' + cls.rightLabelContainer)).querySelector('.' + cls.label) ?\n getComputedStyle((trElement.querySelector('.' + cls.rightLabelContainer)).querySelector('.' + cls.label)).color : null;\n args.leftLabelColor = trElement.querySelector('.' + cls.leftLabelContainer) &&\n (trElement.querySelector('.' + cls.leftLabelContainer)).querySelector('.' + cls.label) ?\n getComputedStyle((trElement.querySelector('.' + cls.leftLabelContainer)).querySelector('.' + cls.label)).color : null;\n }\n this.parent.trigger('queryTaskbarInfo', args, function (taskbarArgs) {\n _this.updateQueryTaskbarInfoArgs(taskbarArgs, rowElement, triggerTaskbarElement);\n });\n };\n /**\n * To update query taskbar info args.\n *\n * @param {IQueryTaskbarInfoEventArgs} args .\n * @param {Element} rowElement .\n * @param {Element} taskBarElement .\n * @returns {void}\n * @private\n */\n ChartRows.prototype.updateQueryTaskbarInfoArgs = function (args, rowElement, taskBarElement) {\n var trElement = args.rowElement;\n var taskbarElement = args.taskbarElement;\n var classCollections = this.getClassName(args);\n var segmentRowElement;\n if (args.data.ganttProperties.segments && args.data.ganttProperties.segments.length > 0) {\n segmentRowElement = trElement.parentElement.parentElement.parentElement;\n }\n if (args.taskbarType === 'Milestone') {\n if (taskbarElement.querySelector(classCollections[0]) &&\n getComputedStyle(taskbarElement.querySelector(classCollections[0])).backgroundColor !== args.milestoneColor) {\n taskbarElement.querySelector(classCollections[0]).style.backgroundColor = args.milestoneColor;\n }\n if (trElement.querySelector(classCollections[1]) &&\n getComputedStyle(trElement.querySelector(classCollections[1])).backgroundColor !== args.baselineColor) {\n trElement.querySelector(classCollections[1]).style.backgroundColor = args.baselineColor;\n }\n if (trElement.querySelector('.' + cls.baselineBar) &&\n getComputedStyle(trElement.querySelector('.' + cls.baselineBar)).borderTopColor !== args.baselineColor) {\n trElement.querySelector('.' + cls.baselineBar).style.backgroundColor = args.baselineColor;\n }\n }\n else if (taskbarElement) {\n if (taskbarElement && this.parent.enableVirtualization && !args.data.expanded) {\n var childElement = trElement.querySelector('.' + cls.collapseParent);\n if (childElement) {\n for (var i = 0; i < childElement.childNodes.length; i++) {\n var taskbar = childElement.childNodes[i];\n var mainTaskbar = taskbar.querySelector('.' + cls.traceChildTaskBar);\n if (mainTaskbar) {\n mainTaskbar.style.backgroundColor = args.taskbarBgColor;\n }\n }\n }\n }\n if (taskbarElement.querySelector(classCollections[0]) &&\n getComputedStyle(taskbarElement.querySelector(classCollections[0])).backgroundColor !== args.taskbarBgColor) {\n taskbarElement.querySelector(classCollections[0]).style.backgroundColor = args.taskbarBgColor;\n }\n if (taskbarElement.querySelector(classCollections[0]) &&\n getComputedStyle(taskbarElement.querySelector(classCollections[0])).outlineColor !== args.taskbarBorderColor) {\n taskbarElement.querySelector(classCollections[0]).style.outlineColor = args.taskbarBorderColor;\n }\n if (taskbarElement.querySelector(classCollections[1]) &&\n getComputedStyle(taskbarElement.querySelector(classCollections[1])).backgroundColor !== args.progressBarBgColor) {\n taskbarElement.querySelector(classCollections[1]).style.backgroundColor = args.progressBarBgColor;\n }\n if (taskbarElement.classList.contains(cls.traceChildTaskBar) &&\n getComputedStyle(taskbarElement).backgroundColor !== args.taskbarBgColor) {\n taskbarElement.style.backgroundColor = args.taskbarBgColor;\n }\n if (taskbarElement.classList.contains(cls.traceChildTaskBar) &&\n getComputedStyle(taskbarElement).outlineColor !== args.taskbarBorderColor) {\n taskbarElement.style.outlineColor = args.taskbarBorderColor;\n }\n if (taskbarElement.classList.contains(cls.traceChildProgressBar) &&\n getComputedStyle(taskbarElement).backgroundColor !== args.progressBarBgColor) {\n taskbarElement.style.backgroundColor = args.progressBarBgColor;\n }\n // if (taskbarElement.querySelector(progressBarClass) &&\n // getComputedStyle(taskbarElement.querySelector(progressBarClass)).borderColor !== args.progressBarBorderColor) {\n // (taskbarElement.querySelector(progressBarClass) as HTMLElement).style.borderColor = args.progressBarBorderColor;\n // }\n if (taskbarElement.querySelector('.' + cls.taskLabel) &&\n getComputedStyle(taskbarElement.querySelector('.' + cls.taskLabel)).color !== args.taskLabelColor) {\n taskbarElement.querySelector('.' + cls.taskLabel).style.color = args.taskLabelColor;\n }\n if (segmentRowElement) {\n if (segmentRowElement.querySelector('.' + cls.baselineBar) &&\n getComputedStyle(segmentRowElement.querySelector('.' + cls.baselineBar)).backgroundColor !== args.baselineColor) {\n segmentRowElement.querySelector('.' + cls.baselineBar).style.backgroundColor = args.baselineColor;\n }\n }\n else {\n if (trElement.querySelector('.' + cls.baselineBar) &&\n getComputedStyle(trElement.querySelector('.' + cls.baselineBar)).backgroundColor !== args.baselineColor) {\n trElement.querySelector('.' + cls.baselineBar).style.backgroundColor = args.baselineColor;\n }\n }\n }\n if (segmentRowElement) {\n if (segmentRowElement.querySelector('.' + cls.leftLabelContainer) &&\n (segmentRowElement.querySelector('.' + cls.leftLabelContainer)).querySelector('.' + cls.label) &&\n getComputedStyle((segmentRowElement.querySelector('.' + cls.leftLabelContainer)).querySelector('.' + cls.label)).color !== args.leftLabelColor) {\n (segmentRowElement.querySelector('.' + cls.leftLabelContainer)).querySelector('.' + cls.label).style.color = args.leftLabelColor;\n }\n if (segmentRowElement.querySelector('.' + cls.rightLabelContainer) &&\n (segmentRowElement.querySelector('.' + cls.rightLabelContainer)).querySelector('.' + cls.label) &&\n getComputedStyle((segmentRowElement.querySelector('.' + cls.rightLabelContainer)).querySelector('.' + cls.label)).color !== args.rightLabelColor) {\n (segmentRowElement.querySelector('.' + cls.rightLabelContainer)).querySelector('.' + cls.label).style.color = args.rightLabelColor;\n }\n }\n else {\n if (trElement.querySelector('.' + cls.leftLabelContainer) &&\n (trElement.querySelector('.' + cls.leftLabelContainer)).querySelector('.' + cls.label) &&\n getComputedStyle((trElement.querySelector('.' + cls.leftLabelContainer)).querySelector('.' + cls.label)).color !== args.leftLabelColor) {\n (trElement.querySelector('.' + cls.leftLabelContainer)).querySelector('.' + cls.label).style.color = args.leftLabelColor;\n }\n if (trElement.querySelector('.' + cls.rightLabelContainer) &&\n (trElement.querySelector('.' + cls.rightLabelContainer)).querySelector('.' + cls.label) &&\n getComputedStyle((trElement.querySelector('.' + cls.rightLabelContainer)).querySelector('.' + cls.label)).color !== args.rightLabelColor) {\n (trElement.querySelector('.' + cls.rightLabelContainer)).querySelector('.' + cls.label).style.color = args.rightLabelColor;\n }\n }\n };\n ChartRows.prototype.getClassName = function (args) {\n var classCollection = [];\n classCollection.push('.' + (args.taskbarType === 'ParentTask' ?\n cls.traceParentTaskBar : args.taskbarType === 'ChildTask' ? cls.traceChildTaskBar : cls.traceMilestone));\n classCollection.push('.' + (args.taskbarType === 'ParentTask' ?\n cls.traceParentProgressBar : args.taskbarType === 'ChildTask' ? cls.traceChildProgressBar : cls.baselineMilestoneContainer));\n return classCollection;\n };\n /**\n * To compile template string.\n *\n * @param {string} template .\n * @returns {Function} .\n * @private\n */\n ChartRows.prototype.templateCompiler = function (template) {\n if (!isNullOrUndefined(template) && template !== '') {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim(), this.parent);\n }\n else {\n return compile(template, this.parent);\n }\n }\n catch (e) {\n return compile(template, this.parent);\n }\n }\n return null;\n };\n // to update the eOverlapped property\n ChartRows.prototype.updateOverlapped = function () {\n for (var k = 0; k < this.parent.treeGrid.parentData.length; k++) {\n var childRecords = this.parent.treeGrid.parentData[k].childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n if (childRecords[i + 1]) {\n childRecords[i].ganttProperties.eOverlapped = undefined;\n }\n for (var j = i + 1; j < childRecords.length; j++) {\n childRecords[j].ganttProperties.eOverlapped = undefined;\n if (childRecords[i].ganttProperties.startDate.getTime() < childRecords[j].ganttProperties.endDate.getTime() &&\n childRecords[i].ganttProperties.endDate.getTime() > childRecords[j].ganttProperties.startDate.getTime()) {\n childRecords[j].ganttProperties.eOverlapped = true;\n childRecords[i].ganttProperties.eOverlapped = true;\n }\n else {\n if (isNullOrUndefined(childRecords[j].ganttProperties.eOverlapped)) {\n childRecords[j].ganttProperties.eOverlapped = false;\n }\n if (isNullOrUndefined(childRecords[i].ganttProperties.eOverlapped)) {\n childRecords[i].ganttProperties.eOverlapped = false;\n }\n }\n }\n }\n }\n };\n // To update the row height when allow overallocation set to false\n ChartRows.prototype.updateDragDropRecords = function (data, tr) {\n var childRecords = data.childRecords;\n var rowIndex = this.parent.currentViewData.indexOf(data);\n var treeGridContentHeight = this.parent.enableRtl ? this.parent['element'].getElementsByClassName('e-content')[2].children[0]['offsetHeight'] :\n this.parent['element'].getElementsByClassName('e-content')[0].children[0]['offsetHeight'];\n if (!tr) {\n tr = this.ganttChartTableBody.childNodes[rowIndex];\n }\n tr['style'].height = this.parent.treeGrid.getRowByIndex(rowIndex)['style'].height = this.parent.rowHeight + 'px';\n this.parent.contentHeight = treeGridContentHeight;\n var rowIDs = [];\n var rowCounts = 0;\n if (data) {\n for (var i = 0; i < childRecords.length; i++) {\n for (var j = i + 1; j < childRecords.length; j++) {\n var taskbarContainer = tr.getElementsByClassName('e-taskbar-main-container');\n for (var k = 0; k < taskbarContainer.length; k++) {\n if (childRecords[i].ganttProperties.startDate.getTime() < childRecords[j].ganttProperties.endDate.getTime() &&\n childRecords[i].ganttProperties.endDate.getTime() > childRecords[j].ganttProperties.startDate.getTime()) {\n if (taskbarContainer[k].getAttribute('rowuniqueid') === childRecords[j]['rowUniqueID'] &&\n rowIDs.indexOf(childRecords[j]['rowUniqueID']) == -1) {\n rowIDs.push(childRecords[j]['rowUniqueID']);\n rowCounts++;\n tr.children[0]['style'].verticalAlign = 'baseline';\n tr.getElementsByClassName('e-taskbar-main-container')[k]['style'].marginTop = (rowCounts * this.parent.rowHeight) + this.taskBarMarginTop + 'px';\n tr['style'].height = this.parent.treeGrid.getRowByIndex(rowIndex)['style'].height = parseInt(tr['style'].height) + this.parent.rowHeight + 'px';\n }\n }\n else {\n if (taskbarContainer[k].getAttribute('rowuniqueid') === childRecords[j]['rowUniqueID'] &&\n rowIDs.indexOf(childRecords[j]['rowUniqueID']) == -1 && this.parent.rowDragAndDropModule &&\n this.parent.rowDragAndDropModule['draggedRecord'] && taskbarContainer[k].getAttribute('rowuniqueid') ===\n this.parent.rowDragAndDropModule['draggedRecord']['rowUniqueID'] && this.parent.rowDragAndDropModule['draggedRecord']['rowUniqueID'] === childRecords[j]['rowUniqueID']) {\n tr.getElementsByClassName('e-taskbar-main-container')[k]['style'].marginTop =\n this.parent.editModule.taskbarEditModule.draggedRecordMarginTop;\n }\n }\n }\n }\n }\n this.parent.contentHeight = treeGridContentHeight;\n document.getElementsByClassName('e-chart-rows-container')[0]['style'].height = this.parent.contentHeight + 'px';\n }\n };\n /**\n * To refresh edited TR\n *\n * @param {number} index .\n * @param {boolean} isValidateRange .\n * @returns {void} .\n * @private\n */\n ChartRows.prototype.refreshRow = function (index, isValidateRange) {\n var tr = this.ganttChartTableBody.childNodes[index];\n var selectedItem = this.parent.currentViewData[index];\n if (index !== -1 && selectedItem) {\n var data = selectedItem;\n if (!this.parent.allowTaskbarOverlap && this.parent.viewType === 'ResourceView' && data.expanded) {\n tr['style'].height = this.parent.treeGrid.getRowByIndex(index)['style'].height = this.parent.rowHeight + 'px';\n }\n if (this.parent.viewType === 'ResourceView' && data.hasChildRecords && !data.expanded && this.parent.enableMultiTaskbar) {\n tr.replaceChild(this.getResourceParent(data).childNodes[0], tr.childNodes[0]);\n }\n else {\n if (this.parent.viewType === 'ResourceView' && this.parent.allowTaskbarDragAndDrop && !data.expanded) {\n tr.replaceWith(this.getGanttChartRow(index, data));\n }\n else {\n tr.replaceChild(this.getGanttChartRow(index, data).childNodes[0], tr.childNodes[0]);\n }\n }\n this.parent.renderTemplates();\n if (this.parent.viewType === 'ResourceView' && data.hasChildRecords && this.parent.showOverAllocation && this.parent.allowTaskbarOverlap) {\n if (isValidateRange) {\n this.parent.ganttChartModule.renderRangeContainer(this.parent.currentViewData);\n }\n else {\n this.parent.dataOperation.updateOverlappingValues(data);\n this.parent.ganttChartModule.renderRangeContainer([data]);\n }\n }\n var segmentLength = !isNullOrUndefined(data.ganttProperties.segments) && data.ganttProperties.segments.length;\n if (segmentLength > 0) {\n for (var i = 0; i < segmentLength; i++) {\n var segmentedTasks = tr.getElementsByClassName('e-segmented-taskbar');\n var segmentElement = segmentedTasks[i];\n this.triggerQueryTaskbarInfoByIndex(segmentElement, data);\n }\n }\n else {\n this.triggerQueryTaskbarInfoByIndex(tr, data);\n }\n var dataId = this.parent.viewType === 'ProjectView' ? data.ganttProperties.taskId : data.ganttProperties.rowUniqueID;\n this.parent.treeGrid.grid.setRowData(dataId, data);\n if (this.parent.viewType === 'ResourceView' && data.hasChildRecords && !data.expanded && this.parent.enableMultiTaskbar && !this.parent.allowTaskbarOverlap) {\n this.updateDragDropRecords(selectedItem, tr);\n }\n if (this.parent.viewType === 'ResourceView' && data.hasChildRecords && this.parent.showOverAllocation && !this.parent.allowTaskbarOverlap) {\n this.parent.ganttChartModule.renderRangeContainer(this.parent.currentViewData);\n }\n var nextEditableElement = this.parent.ganttChartModule.tempNextElement;\n if (this.parent.ganttChartModule.isEditableElement && nextEditableElement) {\n this.parent.treeGrid.grid.focusModule.focus();\n addClass([this.parent.treeGrid.getRows()[tr['ariaRowIndex']].children[this.parent.ganttChartModule.childrenIndex]], 'e-focused');\n this.parent.ganttChartModule.tempNextElement = null;\n }\n var row = this.parent.treeGrid.grid.getRowObjectFromUID(this.parent.treeGrid.grid.getDataRows()[index].getAttribute('data-uid'));\n if (!isNullOrUndefined(row)) {\n row.data = data;\n }\n }\n };\n ChartRows.prototype.updateResourceTaskbarElement = function (tRow, parentTr) {\n var cloneElement = tRow.querySelector('.e-taskbar-main-container');\n addClass([cloneElement], 'collpse-parent-border');\n var id = tRow.querySelector('.' + cls.taskBarMainContainer).getAttribute('rowUniqueId');\n var ganttData = this.parent.getRecordByID(id);\n var zIndex = \"\";\n if (ganttData && !isNullOrUndefined(ganttData.ganttProperties.eOverlapIndex)) {\n zIndex = (ganttData.ganttProperties.eOverlapIndex).toString();\n }\n var cloneChildElement = cloneElement.cloneNode(true);\n cloneChildElement.style.zIndex = zIndex;\n parentTr[0].childNodes[0].childNodes[0].childNodes[0].appendChild(cloneChildElement);\n };\n ChartRows.prototype.getResourceParent = function (record) {\n var chartRows = this.parent.ganttChartModule.getChartRows();\n //Below code is for rendering taskbartemplate in resource view with multi taskbar\n if (this.parent.initialChartRowElements && (!this.parent.allowTaskbarDragAndDrop && this.parent.allowTaskbarOverlap)) {\n for (var j = 0; j < this.parent.initialChartRowElements.length; j++) {\n if (!isNullOrUndefined(chartRows[j])) {\n if (!isNullOrUndefined(chartRows[j].childNodes[0].childNodes[1].childNodes[2]) &&\n !isNullOrUndefined(this.parent.initialChartRowElements[j].childNodes[0].childNodes[1].childNodes[2])) {\n // eslint-disable-next-line\n chartRows[j].childNodes[0].childNodes[1].childNodes[2]['innerHTML'] = this.parent.initialChartRowElements[j].childNodes[0].childNodes[1].childNodes[2]['innerHTML'];\n }\n }\n }\n }\n this.templateData = record;\n var parentTrNode = this.getTableTrNode();\n var leftLabelNode = this.leftLabelContainer();\n var collapseParent = createElement('div', {\n className: 'e-collapse-parent'\n });\n parentTrNode[0].childNodes[0].childNodes[0].appendChild(collapseParent);\n var tasks = this.parent.dataOperation.setSortedChildTasks(record);\n this.parent.dataOperation.updateOverlappingIndex(tasks);\n var tRow;\n if (this.parent.enableVirtualization) {\n for (var i = 0; i < record.childRecords.length; i++) {\n tRow = this.getGanttChartRow(record.childRecords[i].index, this.parent.flatData[record.childRecords[i].index]);\n this.updateResourceTaskbarElement(tRow, parentTrNode);\n }\n }\n else {\n for (var i = 0; i < chartRows.length; i++) {\n if (chartRows[i].classList.contains('gridrowtaskId'\n + record.ganttProperties.rowUniqueID + 'level' + (record.level + 1))) {\n this.updateResourceTaskbarElement(chartRows[i], parentTrNode);\n }\n }\n }\n parentTrNode[0].childNodes[0].childNodes[0].appendChild([].slice.call(leftLabelNode)[0]);\n return parentTrNode[0].childNodes[0];\n };\n /**\n * To refresh all edited records\n *\n * @param {IGanttData} items .\n * @param {boolean} isValidateRange .\n * @returns {void} .\n * @private\n */\n ChartRows.prototype.refreshRecords = function (items, isValidateRange) {\n if (this.parent.isGanttChartRendered) {\n this.parent.renderTemplates();\n if (this.parent.viewType === 'ResourceView' && this.parent.enableMultiTaskbar) {\n var sortedRecords = [];\n sortedRecords = new DataManager(items).executeLocal(new Query()\n .sortBy('expanded', 'Descending'));\n items = sortedRecords;\n }\n for (var i = 0; i < items.length; i++) {\n var index = this.parent.currentViewData.indexOf(items[i]);\n this.refreshRow(index, isValidateRange);\n }\n this.parent.ganttChartModule.updateLastRowBottomWidth();\n }\n };\n ChartRows.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('renderPanels', this.createChartTable);\n this.parent.off('dataReady', this.initiateTemplates);\n this.parent.off('destroy', this.destroy);\n };\n ChartRows.prototype.destroy = function () {\n this.removeEventListener();\n };\n ChartRows.prototype.generateAriaLabel = function (data) {\n data = this.templateData;\n var defaultValue = '';\n var nameConstant = this.parent.localeObj.getConstant('name');\n var startDateConstant = this.parent.localeObj.getConstant('startDate');\n var endDateConstant = this.parent.localeObj.getConstant('endDate');\n var durationConstant = this.parent.localeObj.getConstant('duration');\n var taskNameVal = data.ganttProperties.taskName;\n var startDateVal = data.ganttProperties.startDate;\n var endDateVal = data.ganttProperties.endDate;\n var durationVal = data.ganttProperties.duration;\n if (data.ganttProperties.isMilestone) {\n defaultValue = nameConstant + ' ' + taskNameVal + ' ' + startDateConstant + ' '\n + this.parent.getFormatedDate(startDateVal);\n }\n else {\n if (taskNameVal) {\n defaultValue += nameConstant + ' ' + taskNameVal + ' ';\n }\n if (startDateVal) {\n defaultValue += startDateConstant + ' ' + this.parent.getFormatedDate(startDateVal) + ' ';\n }\n if (endDateVal) {\n defaultValue += endDateConstant + ' ' + this.parent.getFormatedDate(endDateVal) + ' ';\n }\n if (durationVal) {\n defaultValue += durationConstant + ' '\n + this.parent.getDurationString(durationVal, data.ganttProperties.durationUnit);\n }\n }\n return defaultValue;\n };\n ChartRows.prototype.generateBaselineAriaLabel = function (data) {\n data = this.templateData;\n var defaultValue = '';\n var nameConstant = this.parent.localeObj.getConstant('name');\n var startDateConstant = this.parent.localeObj.getConstant('startDate');\n var endDateConstant = this.parent.localeObj.getConstant('endDate');\n var taskNameVal = data.ganttProperties.taskName;\n var startDateVal = data.ganttProperties.baselineStartDate;\n var endDateVal = data.ganttProperties.baselineEndDate;\n defaultValue += 'Baseline' + ' ';\n defaultValue += nameConstant + ' ' + taskNameVal + ' ';\n defaultValue += startDateConstant + ' ' + this.parent.getFormatedDate(startDateVal) + ' ';\n defaultValue += endDateConstant + ' ' + this.parent.getFormatedDate(endDateVal) + ' ';\n return defaultValue;\n };\n ChartRows.prototype.generateSpiltTaskAriaLabel = function (data, ganttProp) {\n var defaultValue = '';\n var startDateConstant = this.parent.localeObj.getConstant('startDate');\n var endDateConstant = this.parent.localeObj.getConstant('endDate');\n var durationConstant = this.parent.localeObj.getConstant('duration');\n var startDateVal = data.startDate;\n var endDateVal = data.endDate;\n var durationVal = data.duration;\n if (startDateVal) {\n defaultValue += startDateConstant + ' ' + this.parent.getFormatedDate(startDateVal) + ' ';\n }\n if (endDateVal) {\n defaultValue += endDateConstant + ' ' + this.parent.getFormatedDate(endDateVal) + ' ';\n }\n if (durationVal) {\n defaultValue += durationConstant + ' '\n + this.parent.getDurationString(durationVal, ganttProp.durationUnit);\n }\n return defaultValue;\n };\n ChartRows.prototype.generateTaskLabelAriaLabel = function (type) {\n var label = '';\n if (type === 'left' && this.parent.labelSettings.leftLabel && !this.leftTaskLabelTemplateFunction) {\n label += this.parent.localeObj.getConstant('leftTaskLabel') +\n ' ' + this.getTaskLabel(this.parent.labelSettings.leftLabel);\n }\n else if (type === 'right' && this.parent.labelSettings.rightLabel && !this.rightTaskLabelTemplateFunction) {\n label += this.parent.localeObj.getConstant('rightTaskLabel') +\n ' ' + this.getTaskLabel(this.parent.labelSettings.rightLabel);\n }\n return label;\n };\n return ChartRows;\n}(DateProcessor));\nexport { ChartRows };\n","import { isScheduledTask } from '../base/utils';\nimport { getValue, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nvar Dependency = /** @class */ (function () {\n function Dependency(gantt) {\n this.parentRecord = [];\n this.parentIds = [];\n this.parentPredecessors = [];\n this.parent = gantt;\n this.dateValidateModule = this.parent.dateValidationModule;\n }\n /**\n * Method to populate predecessor collections in records\n *\n * @returns {void} .\n * @private\n */\n Dependency.prototype.ensurePredecessorCollection = function () {\n var predecessorTasks = this.parent.predecessorsCollection;\n var length = predecessorTasks.length - 1;\n for (var count = length; count >= 0; count--) {\n var ganttData = predecessorTasks[count];\n var ganttProp = ganttData.ganttProperties;\n if ((!ganttData.hasChildRecords && !this.parent.allowParentDependency) || this.parent.allowParentDependency) {\n this.ensurePredecessorCollectionHelper(ganttData, ganttProp);\n }\n }\n };\n /**\n *\n * @param {IGanttData} ganttData .\n * @param {ITaskData} ganttProp .\n * @returns {void} .\n * @private\n */\n Dependency.prototype.ensurePredecessorCollectionHelper = function (ganttData, ganttProp) {\n var predecessorVal = ganttProp.predecessorsName;\n if (predecessorVal && (typeof predecessorVal === 'string' || typeof predecessorVal === 'number')) {\n this.parent.setRecordValue('predecessor', this.calculatePredecessor(predecessorVal, ganttData), ganttProp, true);\n }\n else if (predecessorVal && typeof predecessorVal === 'object' && predecessorVal.length) {\n var preValues = [];\n for (var c = 0; c < predecessorVal.length; c++) {\n var predecessorItem = predecessorVal[c];\n var preValue = {};\n preValue.from = getValue('from', predecessorItem);\n preValue.to = getValue('to', predecessorItem) ? getValue('to', predecessorItem) : ganttProp.rowUniqueID;\n preValue.type = getValue('type', predecessorItem) ? getValue('type', predecessorItem) : 'FS';\n var offsetUnits = getValue('offset', predecessorItem);\n if (isNullOrUndefined(offsetUnits)) {\n preValue.offset = 0;\n preValue.offsetUnit = this.parent.durationUnit.toLocaleLowerCase();\n }\n else if (typeof offsetUnits === 'string') {\n var tempOffsetUnits = this.getOffsetDurationUnit(getValue('offset', predecessorItem));\n preValue.offset = tempOffsetUnits.duration;\n preValue.offsetUnit = tempOffsetUnits.durationUnit;\n }\n else {\n preValue.offset = parseFloat(offsetUnits.toString());\n preValue.offsetUnit = this.parent.durationUnit.toLocaleLowerCase();\n }\n var isOwnParent = this.checkIsParent(preValue.from.toString());\n if (!isOwnParent) {\n preValues.push(preValue);\n }\n }\n this.parent.setRecordValue('predecessor', preValues, ganttProp, true);\n }\n this.parent.setRecordValue('predecessorsName', this.getPredecessorStringValue(ganttData), ganttProp, true);\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.dependency, ganttProp.predecessorsName, ganttData);\n this.parent.setRecordValue(this.parent.taskFields.dependency, ganttProp.predecessorsName, ganttData);\n };\n /**\n * To render unscheduled empty task with 1 day duration during predecessor map\n *\n * @param {IGanttData} data .\n * @returns {void} .\n * @private\n */\n Dependency.prototype.updateUnscheduledDependency = function (data) {\n var task = this.parent.taskFields;\n var prdList = !isNullOrUndefined(data[task.dependency]) ?\n data[task.dependency].toString().split(',') : [];\n for (var i = 0; i < prdList.length; i++) {\n var predId = parseInt(prdList[i], 10);\n if (!isNaN(predId)) {\n var predData = this.parent.getRecordByID(predId.toString());\n var record = !isNullOrUndefined(predData) ?\n extend({}, {}, predData.taskData, true) : null;\n if (!isNullOrUndefined(record) && isNullOrUndefined(record[task.startDate])\n && isNullOrUndefined(record[task.duration]) && isNullOrUndefined(record[task.endDate])) {\n record[task.duration] = 1;\n record[task.startDate] = this.parent.projectStartDate;\n this.parent.updateRecordByID(record);\n }\n }\n }\n };\n /**\n *\n * @param {string} fromId .\n * @returns {boolean} .\n */\n Dependency.prototype.checkIsParent = function (fromId) {\n var boolValue = false;\n var task = this.parent.connectorLineModule.getRecordByID(fromId);\n if (task.hasChildRecords) {\n boolValue = true;\n }\n return boolValue;\n };\n /**\n * Get predecessor collection object from predecessor string value\n *\n * @param {string | number} predecessorValue .\n * @param {IGanttData} ganttRecord .\n * @returns {IPredecessor[]} .\n * @private\n */\n Dependency.prototype.calculatePredecessor = function (predecessorValue, ganttRecord) {\n var _this = this;\n var predecessor = predecessorValue.toString();\n var collection = [];\n var match;\n var isrelationship;\n var values;\n var offsetValue;\n var predecessorText;\n predecessor.split(',').forEach(function (el) {\n values = el.split('+');\n offsetValue = '+';\n if (el.indexOf('-') >= 0) {\n values = el.split('-');\n offsetValue = '-';\n }\n match = [];\n var ids = _this.parent.viewType === 'ResourceView' ? _this.parent.getTaskIds() : _this.parent.ids;\n var isExist1 = _this.parent.viewType === 'ResourceView' ? ids.indexOf('T' + values[0]) : ids.indexOf(values[0]);\n if (isExist1 !== -1) {\n match[0] = values[0];\n }\n else {\n if (ids.indexOf(values[0]) === -1) {\n match = values[0].split(\" \");\n if (match.length === 1) {\n if (match[0].indexOf(\" \") != -1) {\n match = values[0].match(/(\\d+|[A-z]+)/g);\n }\n else {\n match[0] = values[0].slice(0, -2);\n match[1] = values[0].slice(-2);\n }\n }\n }\n else {\n match[0] = values[0];\n }\n }\n var isExist = _this.parent.viewType === 'ResourceView' ? ids.indexOf('T' + match[0]) : ids.indexOf(match[0]);\n /*Validate for appropriate predecessor*/\n if (match[0] && isExist !== -1) {\n if (match.length > 1) {\n var type = match[1].toUpperCase();\n if (type === 'FS' || type === 'FF' || type === 'SF' || type === 'SS') {\n predecessorText = type;\n }\n else {\n predecessorText = 'FS';\n }\n }\n else {\n predecessorText = 'FS';\n }\n }\n else {\n return; // exit current loop for invalid id (match[0])\n }\n var tempOffset = values.length > 1 ? offsetValue + '' + values[1] : '0';\n var offsetUnits = _this.getOffsetDurationUnit(tempOffset);\n var obj = {\n from: match[0],\n type: predecessorText,\n isDrawn: false,\n to: _this.parent.viewType === 'ResourceView' ? ganttRecord.ganttProperties.taskId.toString()\n : ganttRecord.ganttProperties.rowUniqueID.toString(),\n offsetUnit: offsetUnits.durationUnit,\n offset: offsetUnits.duration\n };\n var isOwnParent = _this.checkIsParent(match[0]);\n if (!_this.parent.allowParentDependency) {\n if (!isOwnParent) {\n collection.push(obj);\n }\n }\n else {\n var fromData = _this.parent.connectorLineModule.getRecordByID(obj.to);\n var toData = _this.parent.connectorLineModule.getRecordByID(obj.from);\n var isValid = void 0;\n if (_this.parent.connectorLineEditModule && toData && fromData) {\n isValid = _this.parent.connectorLineEditModule.validateParentPredecessor(toData, fromData);\n if (isValid)\n collection.push(obj);\n }\n else {\n collection.push(obj);\n }\n match.splice(0);\n }\n });\n return collection;\n };\n /**\n * Get predecessor value as string with offset values\n *\n * @param {IGanttData} data .\n * @returns {string} .\n * @private\n */\n Dependency.prototype.getPredecessorStringValue = function (data) {\n var predecessors = data.ganttProperties.predecessor;\n var durationUnitTexts = this.parent.durationUnitTexts;\n var resultString = '';\n var temp1;\n var match;\n match = [];\n if (predecessors) {\n var length_1 = predecessors.length;\n for (var i = 0; i < length_1; i++) {\n var currentValue = predecessors[i];\n var temp = '';\n var id = this.parent.viewType === 'ResourceView' ? data.ganttProperties.taskId\n : data.ganttProperties.rowUniqueID;\n if (currentValue.from !== id.toString()) {\n temp = currentValue.from + currentValue.type;\n if (typeof (data.ganttProperties.taskId) === \"string\") {\n match[0] = temp.slice(0, -2);\n match[1] = temp.slice(-2);\n temp1 = match[0] + \" \" + match[1];\n }\n else {\n temp1 = temp;\n }\n temp = temp1;\n if (currentValue.offset !== 0) {\n temp += currentValue.offset > 0 ? ('+' + currentValue.offset + ' ') : (currentValue.offset + ' ');\n var multiple = currentValue.offset !== 1;\n if (currentValue.offsetUnit === 'day') {\n temp += multiple ? getValue('days', durationUnitTexts) : getValue('day', durationUnitTexts);\n }\n else if (currentValue.offsetUnit === 'hour') {\n temp += multiple ? getValue('hours', durationUnitTexts) : getValue('hour', durationUnitTexts);\n }\n else {\n temp += multiple ? getValue('minutes', durationUnitTexts) : getValue('minute', durationUnitTexts);\n }\n }\n if (resultString.length > 0) {\n resultString = resultString + ',' + temp;\n }\n else {\n resultString = temp;\n }\n }\n }\n }\n return resultString;\n };\n /*Get duration and duration unit value from tasks*/\n Dependency.prototype.getOffsetDurationUnit = function (val) {\n var duration = 0;\n var durationUnit = this.parent.durationUnit.toLocaleLowerCase();\n var durationUnitLabels = this.parent.durationUnitEditText;\n if (typeof val === 'string') {\n var values = val.match(/[^0-9]+|[0-9]+/g);\n for (var x = 0; x < values.length; x++) {\n values[x] = (values[x]).trim();\n }\n if (values[0] === '-' && values[1]) {\n values[1] = values[0] + values[1];\n values.shift();\n }\n else if (values[0] === '+') {\n values.shift();\n }\n if (values[1] === '.' && !isNaN(parseInt(values[2], 10))) {\n values[0] += values[1] + values[2];\n values.splice(1, 2);\n }\n if (values && values.length <= 2) {\n duration = parseFloat(values[0]);\n durationUnit = values[1] ? (values[1].toLowerCase()).trim() : '';\n if (getValue('minute', durationUnitLabels).indexOf(durationUnit) !== -1) {\n durationUnit = 'minute';\n }\n else if (getValue('hour', durationUnitLabels).indexOf(durationUnit) !== -1) {\n durationUnit = 'hour';\n }\n else if (getValue('day', durationUnitLabels).indexOf(durationUnit) !== -1) {\n durationUnit = 'day';\n }\n else {\n durationUnit = this.parent.durationUnit.toLocaleLowerCase();\n }\n }\n }\n else {\n duration = val;\n durationUnit = this.parent.durationUnit.toLocaleLowerCase();\n }\n if (isNaN(duration)) {\n duration = 0;\n durationUnit = this.parent.durationUnit.toLocaleLowerCase();\n }\n return {\n duration: duration,\n durationUnit: durationUnit\n };\n };\n /**\n * Update predecessor object in both from and to tasks collection\n *\n * @returns {void} .\n * @private\n */\n Dependency.prototype.updatePredecessors = function () {\n var predecessorsCollection = this.parent.predecessorsCollection;\n var ganttRecord;\n var length = predecessorsCollection.length;\n for (var count = 0; count < length; count++) {\n ganttRecord = predecessorsCollection[count];\n if ((!ganttRecord.hasChildRecords && !this.parent.allowParentDependency) || this.parent.allowParentDependency) {\n this.updatePredecessorHelper(ganttRecord, predecessorsCollection);\n if (!ganttRecord.ganttProperties.isAutoSchedule && this.parent.editSettings.allowEditing) {\n this.parent.connectorLineEditModule['calculateOffset'](ganttRecord);\n }\n }\n }\n };\n /**\n * To update predecessor collection to successor tasks\n *\n * @param {IGanttData} ganttRecord .\n * @param {IGanttData[]} predecessorsCollection .\n * @returns {void} .\n * @private\n */\n Dependency.prototype.updatePredecessorHelper = function (ganttRecord, predecessorsCollection) {\n var connectorsCollection = ganttRecord.ganttProperties.predecessor;\n var successorGanttRecord;\n var connectorCount = connectorsCollection.length;\n predecessorsCollection = isNullOrUndefined(predecessorsCollection) ? [] : predecessorsCollection;\n for (var i = 0; i < connectorCount; i++) {\n var connector = connectorsCollection[i];\n successorGanttRecord = this.parent.connectorLineModule.getRecordByID(connector.from);\n var id = this.parent.viewType === 'ResourceView' ? ganttRecord.ganttProperties.taskId\n : ganttRecord.ganttProperties.rowUniqueID;\n if (connector.from !== id.toString()) {\n if (successorGanttRecord) {\n var predecessorCollection = void 0;\n if (successorGanttRecord.ganttProperties.predecessor) {\n predecessorCollection = (extend([], successorGanttRecord.ganttProperties.predecessor, [], true));\n predecessorCollection.push(connector);\n this.parent.setRecordValue('predecessor', predecessorCollection, successorGanttRecord.ganttProperties, true);\n // successorGanttRecord.ganttProperties.predecessor.push(connector);\n }\n else {\n predecessorCollection = [];\n predecessorCollection.push(connector);\n this.parent.setRecordValue('predecessor', predecessorCollection, successorGanttRecord.ganttProperties, true);\n // this.parent.setRecordValue('predecessor', [], successorGanttRecord.ganttProperties, true);\n // successorGanttRecord.ganttProperties.predecessor.push(connector);\n predecessorsCollection.push(successorGanttRecord);\n }\n }\n }\n }\n };\n /**\n * Method to validate date of tasks with predecessor values for all records\n *\n * @returns {void} .\n * @private\n */\n Dependency.prototype.updatedRecordsDateByPredecessor = function () {\n if (!this.parent.autoCalculateDateScheduling) {\n return;\n }\n var flatData = this.parent.flatData;\n var totLength = this.parent.flatData.length;\n for (var count = 0; count < totLength; count++) {\n if (flatData[count].ganttProperties.predecessorsName) {\n this.validatePredecessorDates(flatData[count]);\n var predecessorCollection = flatData[count].ganttProperties.predecessor;\n if (predecessorCollection && predecessorCollection.length > 1) {\n for (var i = 0; i < predecessorCollection.length; i++) {\n var validateRecord = this.parent.getRecordByID(predecessorCollection[i].to);\n if (validateRecord) {\n this.validatePredecessorDates(validateRecord);\n }\n }\n }\n if (flatData[count].hasChildRecords && this.parent.editModule && !this.parent.allowUnscheduledTasks\n && this.parent.allowParentDependency) {\n this.parent.editModule['updateChildItems'](flatData[count]);\n }\n }\n }\n };\n Dependency.prototype.updateParentPredecessor = function () {\n if (this.parent.enablePredecessorValidation) {\n var parentPredecessorLength = this.parentPredecessors.length;\n for (var i = parentPredecessorLength - 1; i >= 0; i--) {\n var item = this.parentPredecessors[i];\n this.validatePredecessorDates(item);\n if (item.ganttProperties.startDate) {\n this.parent.editModule['updateChildItems'](item);\n }\n }\n }\n };\n /**\n * To validate task date values with dependency\n *\n * @param {IGanttData} ganttRecord .\n * @returns {void} .\n * @private\n */\n Dependency.prototype.validatePredecessorDates = function (ganttRecord) {\n if (ganttRecord.ganttProperties.predecessor) {\n var predecessorsCollection = ganttRecord.ganttProperties.predecessor;\n var count = void 0;\n var parentGanttRecord = void 0;\n var record = null;\n var currentTaskId_1 = this.parent.viewType === 'ResourceView' ? ganttRecord.ganttProperties.taskId.toString()\n : ganttRecord.ganttProperties.rowUniqueID.toString();\n var predecessors = predecessorsCollection.filter(function (data) {\n if (data.to === currentTaskId_1) {\n return data;\n }\n else {\n return null;\n }\n });\n for (count = 0; count < predecessors.length; count++) {\n var predecessor = predecessors[count];\n parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor.from);\n record = this.parent.connectorLineModule.getRecordByID(predecessor.to);\n if (this.parent.allowParentDependency && this.parent.isLoad && this.parentPredecessors.indexOf(ganttRecord) == -1\n && (ganttRecord.hasChildRecords || record.hasChildRecords)) {\n this.parentPredecessors.push(ganttRecord);\n }\n if (record.ganttProperties.isAutoSchedule || this.parent.validateManualTasksOnLinking) {\n this.validateChildGanttRecord(parentGanttRecord, record);\n }\n }\n }\n };\n /**\n * Method to validate task with predecessor\n *\n * @param {IGanttData} parentGanttRecord .\n * @param {IGanttData} childGanttRecord .\n * @returns {void} .\n */\n Dependency.prototype.validateChildGanttRecord = function (parentGanttRecord, childGanttRecord) {\n if (this.parent.editedTaskBarItem === childGanttRecord || isNullOrUndefined(isScheduledTask(parentGanttRecord.ganttProperties))\n || isNullOrUndefined(isScheduledTask(childGanttRecord.ganttProperties))) {\n return;\n }\n if (this.parent.isInPredecessorValidation && (childGanttRecord.ganttProperties.isAutoSchedule ||\n this.parent.validateManualTasksOnLinking)) {\n var childRecordProperty = childGanttRecord.ganttProperties;\n var currentTaskId_2 = this.parent.viewType === 'ResourceView' ? childRecordProperty.taskId.toString()\n : childRecordProperty.rowUniqueID.toString();\n var predecessorsCollection = childRecordProperty.predecessor;\n var childPredecessor = predecessorsCollection.filter(function (data) {\n if (data.to === currentTaskId_2) {\n return data;\n }\n else {\n return null;\n }\n });\n var startDate = this.getPredecessorDate(childGanttRecord, childPredecessor);\n this.parent.setRecordValue('startDate', startDate, childRecordProperty, true);\n this.parent.dataOperation.updateMappingData(childGanttRecord, 'startDate');\n var segments = childGanttRecord.ganttProperties.segments;\n if (isNullOrUndefined(segments)) {\n this.dateValidateModule.calculateEndDate(childGanttRecord);\n }\n this.parent.dataOperation.updateWidthLeft(childGanttRecord);\n if (!this.parent.isLoad && !this.parent.isFromOnPropertyChange && childGanttRecord.parentItem && this.parent.isInPredecessorValidation &&\n this.parent.getParentTask(childGanttRecord.parentItem).ganttProperties.isAutoSchedule) {\n if (this.parentIds.indexOf(childGanttRecord.parentItem.uniqueID) === -1) {\n this.parentIds.push(childGanttRecord.parentItem.uniqueID);\n this.parentRecord.push(childGanttRecord.parentItem);\n }\n }\n }\n };\n /**\n *\n * @param {IGanttData} ganttRecord .\n * @param {IPredecessor[]} predecessorsCollection .\n * @returns {Date} .\n * @private\n */\n Dependency.prototype.getPredecessorDate = function (ganttRecord, predecessorsCollection) {\n var _this = this;\n var maxStartDate;\n var tempStartDate;\n var parentGanttRecord;\n var childGanttRecord;\n var validatedPredecessor = predecessorsCollection.filter(function (data) {\n var id = _this.parent.viewType === 'ResourceView' ? ganttRecord.ganttProperties.taskId\n : ganttRecord.ganttProperties.rowUniqueID;\n if (data.to === id.toString()) {\n return data;\n }\n else {\n return null;\n }\n });\n if (validatedPredecessor) {\n var length_2 = validatedPredecessor.length;\n for (var i = 0; i < length_2; i++) {\n var predecessor = validatedPredecessor[i];\n parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor.from);\n childGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor.to);\n tempStartDate =\n this.getValidatedStartDate(childGanttRecord.ganttProperties, parentGanttRecord.ganttProperties, predecessor);\n if (maxStartDate == null || this.dateValidateModule.compareDates(tempStartDate, maxStartDate) === 1) {\n maxStartDate = tempStartDate;\n }\n }\n }\n return maxStartDate;\n };\n /**\n * Get validated start date as per predecessor type\n *\n * @param {ITaskData} ganttProperty .\n * @param {ITaskData} parentRecordProperty .\n * @param {IPredecessor} predecessor .\n * @returns {Date} .\n */\n Dependency.prototype.getValidatedStartDate = function (ganttProperty, parentRecordProperty, predecessor) {\n var type = predecessor.type;\n var offset = predecessor.offset;\n var tempDate;\n var returnStartDate;\n switch (type) {\n case 'FS':\n tempDate = this.dateValidateModule.getValidEndDate(parentRecordProperty);\n if (!ganttProperty.isMilestone || offset !== 0) {\n tempDate = this.dateValidateModule.checkStartDate(tempDate, ganttProperty);\n }\n if (offset !== 0) {\n tempDate = this.updateDateByOffset(tempDate, predecessor, ganttProperty);\n }\n if (!ganttProperty.isMilestone) {\n returnStartDate = this.dateValidateModule.checkStartDate(tempDate, ganttProperty);\n }\n else {\n returnStartDate = tempDate;\n }\n break;\n case 'FF':\n case 'SF':\n tempDate = type === 'FF' ? this.dateValidateModule.getValidEndDate(parentRecordProperty) :\n this.dateValidateModule.getValidStartDate(parentRecordProperty);\n if (offset !== 0) {\n tempDate = this.updateDateByOffset(tempDate, predecessor, ganttProperty);\n }\n if (!ganttProperty.isMilestone) {\n tempDate = this.dateValidateModule.checkEndDate(tempDate, ganttProperty);\n }\n returnStartDate = this.dateValidateModule.getStartDate(tempDate, ganttProperty.duration, ganttProperty.durationUnit, ganttProperty);\n break;\n case 'SS':\n tempDate = this.dateValidateModule.getValidStartDate(parentRecordProperty);\n if (offset !== 0) {\n tempDate = this.updateDateByOffset(tempDate, predecessor, ganttProperty);\n }\n if (!ganttProperty.isMilestone) {\n returnStartDate = this.dateValidateModule.checkStartDate(tempDate, ganttProperty);\n }\n else {\n returnStartDate = tempDate;\n }\n break;\n }\n return returnStartDate;\n };\n /**\n *\n * @param {Date} date .\n * @param {IPredecessor} predecessor .\n * @param {ITaskData} record .\n * @returns {void} .\n */\n Dependency.prototype.updateDateByOffset = function (date, predecessor, record) {\n var resultDate;\n var offsetValue = predecessor.offset;\n var durationUnit = predecessor.offsetUnit;\n if (offsetValue < 0) {\n resultDate = this.dateValidateModule.getStartDate(this.dateValidateModule.checkEndDate(date, record), (offsetValue * -1), durationUnit, record, true);\n }\n else {\n resultDate = this.dateValidateModule.getEndDate(date, offsetValue, durationUnit, record, false);\n if (!record.isMilestone) {\n resultDate = this.dateValidateModule.checkStartDate(resultDate, record);\n }\n }\n return resultDate;\n };\n /**\n *\n * @param {IGanttData} records .\n * @returns {void} .\n * @private\n */\n Dependency.prototype.createConnectorLinesCollection = function (records) {\n var ganttRecords = records ? records : this.parent.currentViewData;\n var recordLength = ganttRecords.length;\n var count;\n var ganttRecord;\n var predecessorsCollection;\n this.parent.connectorLineModule.expandedRecords = this.parent.virtualScrollModule && this.parent.enableVirtualization ?\n this.parent.updatedRecords : this.parent.getExpandedRecords(this.parent.updatedRecords);\n for (count = 0; count < recordLength; count++) {\n ganttRecord = ganttRecords[count];\n predecessorsCollection = ganttRecord.ganttProperties.predecessor;\n if (predecessorsCollection) {\n this.addPredecessorsCollection(predecessorsCollection);\n }\n }\n };\n /**\n *\n * @param {object[]} predecessorsCollection .\n * @returns {void} .\n */\n Dependency.prototype.addPredecessorsCollection = function (predecessorsCollection) {\n var predecessorsLength;\n var predecessorCount;\n var predecessor;\n var parentGanttRecord;\n var childGanttRecord;\n if (predecessorsCollection) {\n predecessorsLength = predecessorsCollection.length;\n for (predecessorCount = 0; predecessorCount < predecessorsLength; predecessorCount++) {\n predecessor = predecessorsCollection[predecessorCount];\n var from = 'from';\n var to = 'to';\n parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor[from]);\n childGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor[to]);\n if (this.parent.connectorLineModule.expandedRecords &&\n this.parent.connectorLineModule.expandedRecords.indexOf(parentGanttRecord) !== -1 &&\n this.parent.connectorLineModule.expandedRecords.indexOf(childGanttRecord) !== -1) {\n this.updateConnectorLineObject(parentGanttRecord, childGanttRecord, predecessor);\n }\n }\n }\n };\n /**\n * To refresh connector line object collections\n *\n * @param {IGanttData} parentGanttRecord .\n * @param {IGanttData} childGanttRecord .\n * @param {IPredecessor} predecessor .\n * @returns {void} .\n * @private\n */\n Dependency.prototype.updateConnectorLineObject = function (parentGanttRecord, childGanttRecord, predecessor) {\n var connectorObj = this.parent.connectorLineModule.createConnectorLineObject(parentGanttRecord, childGanttRecord, predecessor);\n if (connectorObj) {\n if (childGanttRecord.isCritical && parentGanttRecord.isCritical) {\n connectorObj.isCritical = true;\n }\n if ((this.parent.connectorLineIds.length > 0 && this.parent.connectorLineIds.indexOf(connectorObj.connectorLineId) === -1) ||\n this.parent.connectorLineIds.length === 0) {\n this.parent.updatedConnectorLineCollection.push(connectorObj);\n this.parent.connectorLineIds.push(connectorObj.connectorLineId);\n }\n else if (this.parent.connectorLineIds.indexOf(connectorObj.connectorLineId) !== -1) {\n var index = this.parent.connectorLineIds.indexOf(connectorObj.connectorLineId);\n this.parent.updatedConnectorLineCollection[index] = connectorObj;\n }\n predecessor.isDrawn = true;\n }\n return connectorObj;\n };\n /**\n *\n * @param {IGanttData} childGanttRecord .\n * @param {IPredecessor[]} previousValue .\n * @param {string} validationOn .\n * @returns {void} .\n * @private\n */\n Dependency.prototype.validatePredecessor = function (childGanttRecord, previousValue, validationOn) {\n if (!this.parent.isInPredecessorValidation) {\n return;\n }\n if (childGanttRecord.ganttProperties.predecessor) {\n var taskBarModule = this.parent.editModule.taskbarEditModule;\n var ganttProp = void 0;\n if (taskBarModule) {\n ganttProp = taskBarModule.taskBarEditRecord;\n }\n var predecessorsCollection = childGanttRecord.ganttProperties.predecessor;\n var parentGanttRecord = void 0;\n var record = null;\n var predecessor = void 0;\n var successor = void 0;\n var currentTaskId_3 = this.parent.viewType === 'ResourceView' ? childGanttRecord.ganttProperties.taskId.toString()\n : childGanttRecord.ganttProperties.rowUniqueID.toString();\n var predecessors = predecessorsCollection.filter(function (data) {\n if (data.to === currentTaskId_3) {\n return data;\n }\n else {\n return null;\n }\n });\n var successors = predecessorsCollection.filter(function (data) {\n if (data.from === currentTaskId_3) {\n return data;\n }\n else {\n return null;\n }\n });\n for (var count = 0; count < predecessors.length; count++) {\n predecessor = predecessors[count];\n parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor.from);\n record = this.parent.connectorLineModule.getRecordByID(predecessor.to);\n if (this.parent.isInPredecessorValidation && record.ganttProperties.isAutoSchedule) {\n this.parent.isValidationEnabled = true;\n }\n else {\n this.parent.isValidationEnabled = false;\n }\n var id = this.parent.viewType === 'ResourceView' ? childGanttRecord.ganttProperties.taskId\n : childGanttRecord.ganttProperties.rowUniqueID;\n if ((id.toString() === predecessor.to\n || id.toString() === predecessor.from)\n && (!validationOn || validationOn === 'predecessor')) {\n this.validateChildGanttRecord(parentGanttRecord, record);\n }\n }\n for (var count = 0; count < successors.length; count++) {\n successor = successors[count];\n parentGanttRecord = this.parent.connectorLineModule.getRecordByID(successor.from);\n record = this.parent.connectorLineModule.getRecordByID(successor.to);\n if (this.parent.isInPredecessorValidation && record.ganttProperties.isAutoSchedule) {\n this.parent.isValidationEnabled = true;\n }\n else {\n this.parent.isValidationEnabled = false;\n }\n if (validationOn !== 'predecessor' && this.parent.isValidationEnabled) {\n this.validateChildGanttRecord(parentGanttRecord, record);\n }\n else if (!record.ganttProperties.isAutoSchedule && this.parent.UpdateOffsetOnTaskbarEdit) {\n this.parent.connectorLineEditModule['calculateOffset'](record);\n }\n if (parentGanttRecord.expanded === false || record.expanded === false) {\n if (record) {\n this.validatePredecessor(record, undefined, 'successor');\n }\n continue;\n }\n if (record) {\n this.validatePredecessor(record, undefined, 'successor');\n }\n }\n if (record && record.ganttProperties.taskId !== this.isValidatedParentTaskID && ganttProp) {\n var validUpdate = false;\n var predecessorNames = ganttProp.ganttProperties.predecessorsName ?\n ganttProp.ganttProperties.predecessorsName.split(',').length : ganttProp.ganttProperties.predecessorsName;\n var predecessorLength = ganttProp.ganttProperties.predecessor ?\n ganttProp.ganttProperties.predecessor.length : ganttProp.ganttProperties.predecessor;\n if ((predecessorLength && predecessorNames !== predecessorLength)) {\n validUpdate = true;\n }\n else if (record.hasChildRecords && record.ganttProperties.predecessor.length > 0 && ganttProp.hasChildRecords && !ganttProp.ganttProperties.predecessor) {\n validUpdate = true;\n }\n if ((taskBarModule.taskBarEditAction !== 'ParentDrag' && taskBarModule.taskBarEditAction !== 'ChildDrag')) {\n if (!ganttProp.hasChildRecords && record.hasChildRecords) {\n this.parent.editModule['updateChildItems'](record);\n this.isValidatedParentTaskID = record.ganttProperties.taskId;\n }\n }\n else if ((record.hasChildRecords && taskBarModule.taskBarEditAction == 'ChildDrag') ||\n (validUpdate && taskBarModule.taskBarEditAction == 'ParentDrag')) {\n this.parent.editModule['updateChildItems'](record);\n this.isValidatedParentTaskID = record.ganttProperties.taskId;\n }\n if (!ganttProp.hasChildRecords) {\n this.parent.dataOperation.updateParentItems(record, true);\n }\n }\n else if (record && record.hasChildRecords && !ganttProp) {\n this.parent.editModule['updateChildItems'](record);\n }\n }\n };\n /**\n * Method to get validate able predecessor alone from record\n *\n * @param {IGanttData} record .\n * @returns {IPredecessor[]} .\n * @private\n */\n Dependency.prototype.getValidPredecessor = function (record) {\n var _this = this;\n var validPredecessor = [];\n if (!isNullOrUndefined(record)) {\n var recPredecessor = record.ganttProperties.predecessor;\n if (recPredecessor && recPredecessor.length > 0) {\n validPredecessor = recPredecessor.filter(function (value) {\n var id = _this.parent.viewType === 'ResourceView' ? record.ganttProperties.taskId\n : record.ganttProperties.rowUniqueID;\n return value.from !== id.toString();\n });\n }\n }\n return validPredecessor;\n };\n return Dependency;\n}());\nexport { Dependency };\n","/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * To import utils\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar SvgRenderer = /** @class */ (function () {\n /* End-Properties */\n function SvgRenderer(rootID) {\n //Internal Variables\n this.svgLink = 'http://www.w3.org/2000/svg';\n this.rootId = rootID;\n }\n // method to get the attributes value\n // tslint:disable-next-line:no-any\n SvgRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n }; /* tslint:enable */\n /**\n * To create a Html5 SVG element\n *\n * @param {SVGAttributes} options - Options to create SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createSvg = function (options) {\n if (isNullOrUndefined(options.id)) {\n options.id = this.rootId + '_svg';\n }\n this.svgObj = document.getElementById(options.id);\n if (isNullOrUndefined(document.getElementById(options.id))) {\n this.svgObj = document.createElementNS(this.svgLink, 'svg');\n }\n this.svgObj = this.setElementAttributes(options, this.svgObj);\n this.setSVGSize(options.width, options.height);\n return this.svgObj;\n };\n // method to set the height and width for the SVG element\n SvgRenderer.prototype.setSVGSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width) || this.width <= 0) {\n this.svgObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.svgObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height) || this.height <= 0) {\n this.svgObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.svgObj.setAttribute('height', this.height.toString());\n }\n };\n /**\n * To draw a path\n *\n * @param {PathAttributes} options - Options to draw a path in SVG\n * @returns {Element} It returns a appropriate path\n */\n SvgRenderer.prototype.drawPath = function (options) {\n var path = document.getElementById(options.id);\n if (path === null) {\n path = document.createElementNS(this.svgLink, 'path');\n }\n path = this.setElementAttributes(options, path);\n return path;\n };\n /**\n * To draw a line\n *\n * @param {LineAttributes} options - Options to draw a line in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawLine = function (options) {\n var line = document.getElementById(options.id);\n if (line === null) {\n line = document.createElementNS(this.svgLink, 'line');\n }\n line = this.setElementAttributes(options, line);\n return line;\n };\n /**\n * To draw a rectangle\n *\n * @param {BaseAttibutes} options - Required options to draw a rectangle in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawRectangle = function (options) {\n var rectangle = document.getElementById(options.id);\n if (rectangle === null) {\n rectangle = document.createElementNS(this.svgLink, 'rect');\n }\n rectangle = this.setElementAttributes(options, rectangle);\n return rectangle;\n };\n /**\n * To draw a circle\n *\n * @param {CircleAttributes} options - Required options to draw a circle in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawCircle = function (options) {\n var circle = document.getElementById(options.id);\n if (circle === null) {\n circle = document.createElementNS(this.svgLink, 'circle');\n }\n circle = this.setElementAttributes(options, circle);\n return circle;\n };\n /**\n * To draw a polyline\n *\n * @param {PolylineAttributes} options - Options required to draw a polyline\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawPolyline = function (options) {\n var polyline = document.getElementById(options.id);\n if (polyline === null) {\n polyline = document.createElementNS(this.svgLink, 'polyline');\n }\n polyline = this.setElementAttributes(options, polyline);\n return polyline;\n };\n /**\n * To draw an ellipse\n *\n * @param {EllipseAttributes} options - Options required to draw an ellipse\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawEllipse = function (options) {\n var ellipse = document.getElementById(options.id);\n if (ellipse === null) {\n ellipse = document.createElementNS(this.svgLink, 'ellipse');\n }\n ellipse = this.setElementAttributes(options, ellipse);\n return ellipse;\n };\n /**\n * To draw a polygon\n *\n * @param {PolylineAttributes} options - Options needed to draw a polygon in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawPolygon = function (options) {\n var polygon = document.getElementById(options.id);\n if (polygon === null) {\n polygon = document.createElementNS(this.svgLink, 'polygon');\n }\n polygon = this.setElementAttributes(options, polygon);\n return polygon;\n };\n /**\n * To draw an image\n *\n * @param {ImageAttributes} options - Required options to draw an image in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawImage = function (options) {\n var img = document.createElementNS(this.svgLink, 'image');\n img.setAttributeNS(null, 'height', options.height.toString());\n img.setAttributeNS(null, 'width', options.width.toString());\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', options.href);\n img.setAttributeNS(null, 'x', options.x.toString());\n img.setAttributeNS(null, 'y', options.y.toString());\n img.setAttributeNS(null, 'id', options.id);\n img.setAttributeNS(null, 'visibility', options.visibility);\n if (!isNullOrUndefined(this.getOptionValue(options, 'clip-path'))) {\n img.setAttributeNS(null, 'clip-path', this.getOptionValue(options, 'clip-path'));\n }\n if (!isNullOrUndefined(options.preserveAspectRatio)) {\n img.setAttributeNS(null, 'preserveAspectRatio', options.preserveAspectRatio);\n }\n return img;\n };\n /**\n * To draw a text\n *\n * @param {TextAttributes} options - Options needed to draw a text in SVG\n * @param {string} label - Label of the text\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createText = function (options, label) {\n var text = document.createElementNS(this.svgLink, 'text');\n text = this.setElementAttributes(options, text);\n if (!isNullOrUndefined(label)) {\n text.textContent = label;\n }\n return text;\n };\n /**\n * To create a tSpan\n *\n * @param {TextAttributes} options - Options to create tSpan\n * @param {string} label - The text content which is to be rendered in the tSpan\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createTSpan = function (options, label) {\n var tSpan = document.createElementNS(this.svgLink, 'tspan');\n tSpan = this.setElementAttributes(options, tSpan);\n if (!isNullOrUndefined(label)) {\n tSpan.textContent = label;\n }\n return tSpan;\n };\n /**\n * To create a title\n *\n * @param {string} text - The text content which is to be rendered in the title\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createTitle = function (text) {\n var title = document.createElementNS(this.svgLink, 'title');\n title.textContent = text;\n return title;\n };\n /**\n * To create defs element in SVG\n *\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createDefs = function () {\n var defs = document.createElementNS(this.svgLink, 'defs');\n return defs;\n };\n /**\n * To create clip path in SVG\n *\n * @param {BaseAttibutes} options - Options needed to create clip path\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createClipPath = function (options) {\n var clipPath = document.createElementNS(this.svgLink, 'clipPath');\n clipPath = this.setElementAttributes(options, clipPath);\n return clipPath;\n };\n /**\n * To create foreign object in SVG\n *\n * @param {BaseAttibutes} options - Options needed to create foreign object\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createForeignObject = function (options) {\n var foreignObject = document.createElementNS(this.svgLink, 'foreignObject');\n foreignObject = this.setElementAttributes(options, foreignObject);\n return foreignObject;\n };\n /**\n * To create group element in SVG\n *\n * @param {BaseAttibutes} options - Options needed to create group\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createGroup = function (options) {\n var group = document.createElementNS(this.svgLink, 'g');\n group = this.setElementAttributes(options, group);\n return group;\n };\n /**\n * To create pattern in SVG\n *\n * @param {PatternAttributes} options - Required options to create pattern in SVG\n * @param {string} element - Specifies the name of the pattern\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createPattern = function (options, element) {\n var pattern = document.createElementNS(this.svgLink, element);\n pattern = this.setElementAttributes(options, pattern);\n return pattern;\n };\n /**\n * To create radial gradient in SVG\n *\n * @param {string[]} colors - Specifies the colors required to create radial gradient\n * @param {string} name - Specifies the name of the gradient\n * @param {RadialGradient} options - value for radial gradient\n * @returns {string} It returns color name\n */\n SvgRenderer.prototype.createRadialGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'radialGradient',\n 'cx': options.cx + '%',\n 'cy': options.cy + '%',\n 'r': options.r + '%',\n 'fx': options.fx + '%',\n 'fy': options.fy + '%'\n };\n this.drawGradient('radialGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'radialGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To create linear gradient in SVG\n *\n * @param {GradientColor[]} colors - Array of string specifies the values for color\n * @param {string} name - Specifies the name of the gradient\n * @param {LinearGradient} options - Specifies the options for gradient\n * @returns {string} It returns color name\n */\n SvgRenderer.prototype.createLinearGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'linearGradient',\n 'x1': options.x1 + '%',\n 'y1': options.y1 + '%',\n 'x2': options.x2 + '%',\n 'y2': options.y2 + '%'\n };\n this.drawGradient('linearGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'linearGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To render the gradient element in SVG\n *\n * @param {string} gradientType - Specifies the type of the gradient\n * @param {RadialGradient | LinearGradient} options - Options required to render a gradient\n * @param {string[]} colors - Array of string specifies the values for color\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawGradient = function (gradientType, options, colors) {\n var defs = this.createDefs();\n var gradient = document.createElementNS(this.svgLink, gradientType);\n gradient = this.setElementAttributes(options, gradient);\n for (var i = 0; i < colors.length; i++) {\n var stop_1 = document.createElementNS(this.svgLink, 'stop');\n stop_1.setAttribute('offset', colors[i].colorStop);\n stop_1.setAttribute('stop-color', colors[i].color);\n stop_1.setAttribute('stop-opacity', colors[i].opacity ? (colors[i].opacity) : '1');\n if (!isNullOrUndefined(colors[i].style)) {\n stop_1.style.cssText = colors[i].style;\n }\n gradient.appendChild(stop_1);\n }\n defs.appendChild(gradient);\n return defs;\n };\n /**\n * To render a clip path\n *\n * @param {BaseAttibutes} options - Options required to render a clip path\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n options.id = options.id + '_Rect';\n var rect = this.drawRectangle(options);\n clipPath.appendChild(rect);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To create circular clip path in SVG\n *\n * @param {CircleAttributes} options - Options required to create circular clip path\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawCircularClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n options.id = options.id + '_Circle';\n var circle = this.drawCircle(options);\n clipPath.appendChild(circle);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To set the attributes to the element\n *\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {Element} element - The element to which the attributes need to be set\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] === 'style') {\n element.style.cssText = options[keys[i]];\n }\n else {\n element.setAttribute(keys[i], options[keys[i]]);\n }\n }\n return element;\n };\n /**\n * To create a Html5 canvas element\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n SvgRenderer.prototype.createCanvas = function () {\n return null;\n };\n return SvgRenderer;\n}());\nexport { SvgRenderer };\n","/* eslint-disable no-case-declarations */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * To import utils.\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar CanvasRenderer = /** @class */ (function () {\n /* End-Properties */\n function CanvasRenderer(rootID) {\n this.rootId = rootID;\n }\n // method to get the attributes value\n // tslint:disable-next-line:no-any\n CanvasRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n /* tslint:enable */\n /**\n * To create a Html5 canvas element\n *\n * @param {BaseAttibutes} options - Options to create canvas\n * @returns {HTMLCanvasElement} Creating a canvas\n */\n CanvasRenderer.prototype.createCanvas = function (options) {\n var canvasObj = document.createElement('canvas');\n canvasObj.setAttribute('id', this.rootId + '_canvas');\n this.ctx = canvasObj.getContext('2d');\n this.canvasObj = canvasObj;\n this.setCanvasSize(options.width, options.height);\n return this.canvasObj;\n };\n /**\n * To set the width and height for the Html5 canvas element\n *\n * @param {number} width - width of the canvas\n * @param {number} height - height of the canvas\n * @returns {void} Setting canvas size\n */\n CanvasRenderer.prototype.setCanvasSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width)) {\n this.canvasObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.canvasObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height)) {\n this.canvasObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.canvasObj.setAttribute('height', this.height.toString());\n }\n };\n // To set the values to the attributes\n CanvasRenderer.prototype.setAttributes = function (options) {\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n var dashArray = this.getOptionValue(options, 'stroke-dasharray');\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n this.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n this.ctx.strokeStyle = this.getOptionValue(options, 'stroke');\n };\n /**\n * To draw a line\n *\n * @param {LineAttributes} options - required options to draw a line on the canvas\n * @returns {void} To draw a line\n */\n CanvasRenderer.prototype.drawLine = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.moveTo(options.x1, options.y1);\n this.ctx.lineTo(options.x2, options.y2);\n this.ctx.stroke();\n this.ctx.restore();\n };\n /**\n * To draw a rectangle\n *\n * @param {RectAttributes} options - required options to draw a rectangle on the canvas.\n * @param {Int32Array} canvasTranslate TO get a translate value of canvas.\n * @returns {void} To draw rectangle.\n */\n CanvasRenderer.prototype.drawRectangle = function (options, canvasTranslate) {\n var canvasCtx = this.ctx;\n var cornerRadius = options.rx;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = this.getOptionValue(options, 'opacity');\n this.setAttributes(options);\n this.ctx.rect(options.x, options.y, options.width, options.height);\n if (cornerRadius !== null && cornerRadius >= 0) {\n this.drawCornerRadius(options);\n }\n else {\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n this.ctx.fillRect(options.x, options.y, options.width, options.height);\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n return (this.canvasObj);\n };\n // To draw the corner of a rectangle\n CanvasRenderer.prototype.drawCornerRadius = function (options) {\n var cornerRadius = options.rx;\n var x = options.x;\n var y = options.y;\n var width = options.width;\n var height = options.height;\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n if (width < 2 * cornerRadius) {\n cornerRadius = width / 2;\n }\n if (height < 2 * cornerRadius) {\n cornerRadius = height / 2;\n }\n this.ctx.beginPath();\n this.ctx.moveTo(x + width - cornerRadius, y);\n this.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n this.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n this.ctx.arcTo(x, y + height, x, y, cornerRadius);\n this.ctx.arcTo(x, y, x + width, y, cornerRadius);\n this.ctx.closePath();\n this.ctx.fill();\n this.ctx.stroke();\n };\n /**\n * To draw a path on the canvas\n *\n * @param {PathAttributes} options - options needed to draw path.\n * @param {Int32Array} canvasTranslate - Array of numbers to translate the canvas.\n * @returns {Element} To draw a path.\n */\n CanvasRenderer.prototype.drawPath = function (options, canvasTranslate) {\n var path = options.d;\n var dataSplit = path.split(' ');\n var borderWidth = this.getOptionValue(options, 'stroke-width');\n var canvasCtx = this.ctx;\n var flag = true;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = options.opacity ? options.opacity : this.getOptionValue(options, 'fill-opacity');\n this.setAttributes(options);\n for (var i = 0; i < dataSplit.length; i = i + 3) {\n var x1 = parseFloat(dataSplit[i + 1]);\n var y1 = parseFloat(dataSplit[i + 2]);\n switch (dataSplit[i]) {\n case 'M':\n if (!options.innerR && !options.cx) {\n this.ctx.moveTo(x1, y1);\n }\n break;\n case 'L':\n if (!options.innerR) {\n this.ctx.lineTo(x1, y1);\n }\n break;\n case 'Q':\n var q1 = parseFloat(dataSplit[i + 3]);\n var q2 = parseFloat(dataSplit[i + 4]);\n this.ctx.quadraticCurveTo(x1, y1, q1, q2);\n i = i + 2;\n break;\n case 'C':\n var c1 = parseFloat(dataSplit[i + 3]);\n var c2 = parseFloat(dataSplit[i + 4]);\n var c3 = parseFloat(dataSplit[i + 5]);\n var c4 = parseFloat(dataSplit[i + 6]);\n this.ctx.bezierCurveTo(x1, y1, c1, c2, c3, c4);\n i = i + 4;\n break;\n case 'A':\n if (!options.innerR) {\n if (options.cx) {\n this.ctx.arc(options.cx, options.cy, options.radius, 0, 2 * Math.PI, options.counterClockWise);\n }\n else {\n this.ctx.moveTo(options.x, options.y);\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.lineTo(options.x, options.y);\n }\n }\n else if (flag) {\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.arc(options.x, options.y, options.innerR, options.end, options.start, !options.counterClockWise);\n flag = false;\n }\n i = i + 5;\n break;\n case 'z':\n case 'Z':\n this.ctx.closePath();\n //since for loop is incremented by 3, to get next value after 'z' i is decremented for 2.\n i = i - 2;\n break;\n }\n }\n if (options.fill !== 'none' && options.fill !== undefined) {\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n }\n if (borderWidth > 0) {\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n return this.canvasObj;\n };\n /**\n * To draw a text\n *\n * @param {TextAttributes} options - options required to draw text\n * @param {string} label - Specifies the text which has to be drawn on the canvas\n * @param {number} transX - Specifies the text of translate X\n * @param {number} transY - Specifies the text of translate Y\n * @param {number} dy - Specifies the text of translate dy\n * @param {boolean} isTSpan - Specifies the boolean value of span value\n * @returns {void}\n */\n CanvasRenderer.prototype.createText = function (options, label, transX, transY, dy, isTSpan) {\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontSize = this.getOptionValue(options, 'font-size');\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n var anchor = this.getOptionValue(options, 'text-anchor');\n var opacity = options.opacity !== undefined ? options.opacity : 1;\n if (anchor === 'middle') {\n anchor = 'center';\n }\n this.ctx.save();\n this.ctx.fillStyle = options.fill;\n this.ctx.font = font;\n this.ctx.textAlign = anchor;\n this.ctx.globalAlpha = opacity;\n if (options.baseline) {\n this.ctx.textBaseline = options.baseline;\n }\n if (!isTSpan) {\n var txtlngth = 0;\n this.ctx.translate(options.x + (txtlngth / 2) + (transX ? transX : 0), options.y + (transY ? transY : 0));\n this.ctx.rotate(options.labelRotation * Math.PI / 180);\n }\n this.ctx.fillText(label, isTSpan ? options.x : 0, isTSpan ? dy : 0);\n this.ctx.restore();\n return this.canvasObj;\n };\n /**\n * To draw circle on the canvas\n *\n * @param {CircleAttributes} options - required options to draw the circle\n * @param {Int32Array} canvasTranslate Translate value of canvas\n * @returns {void}\n */\n CanvasRenderer.prototype.drawCircle = function (options, canvasTranslate) {\n var canvasCtx = this.ctx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n this.ctx.fillStyle = options.fill;\n this.ctx.globalAlpha = options.opacity;\n this.ctx.fill();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.setAttributes(options);\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n return this.canvasObj;\n };\n /**\n * To draw polyline\n *\n * @param {PolylineAttributes} options - options needed to draw polyline\n * @returns {void}\n */\n CanvasRenderer.prototype.drawPolyline = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n var points = options.points.split(' ');\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i].split(',');\n var x = parseFloat(point[0]);\n var y = parseFloat(point[1]);\n if (i === 0) {\n this.ctx.moveTo(x, y);\n }\n else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n };\n /**\n * To draw an ellipse on the canvas\n *\n * @param {EllipseAttributes} options - options needed to draw ellipse\n * @param {Int32Array} canvasTranslate Translate value of canvas\n * @returns {void}\n */\n CanvasRenderer.prototype.drawEllipse = function (options, canvasTranslate) {\n var canvasCtx = this.ctx;\n var circumference = Math.max(options.rx, options.ry);\n var scaleX = options.rx / circumference;\n var scaleY = options.ry / circumference;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.translate(options.cx, options.cy);\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.save();\n this.ctx.scale(scaleX, scaleY);\n this.ctx.arc(0, 0, circumference, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n this.ctx.restore();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n };\n /**\n * To draw an image\n *\n * @param {ImageAttributes} options - options required to draw an image on the canvas\n * @returns {void}\n */\n CanvasRenderer.prototype.drawImage = function (options) {\n this.ctx.save();\n var imageObj = new Image();\n if (!isNullOrUndefined(options.href)) {\n imageObj.src = options.href;\n this.ctx.drawImage(imageObj, options.x, options.y, options.width, options.height);\n }\n this.ctx.restore();\n };\n /**\n * To create a linear gradient\n *\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @returns {string} It returns color\n */\n CanvasRenderer.prototype.createLinearGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createLinearGradient(0, 0, 0, this.canvasObj.height);\n }\n var color = this.setGradientValues(colors, myGradient);\n return color;\n };\n /**\n * To create a radial gradient\n *\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @returns {string} It returns gradient color\n */\n CanvasRenderer.prototype.createRadialGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createRadialGradient(0, 0, 0, 0, 0, this.canvasObj.height);\n }\n var colorName = this.setGradientValues(colors, myGradient);\n return colorName;\n };\n // To set the gradient values\n CanvasRenderer.prototype.setGradientValues = function (colors, myGradient) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n for (var i = 0; i <= colors.length - 1; i++) {\n var color = colors[i].color;\n var newColorStop = (colors[i].colorStop).slice(0, -1);\n var stopColor = parseInt(newColorStop, 10) / 100;\n myGradient.addColorStop(stopColor, color);\n }\n colorName = myGradient.toString();\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To set the attributes to the element\n *\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {HTMLElement} element - The element to which the attributes need to be set\n * @returns {HTMLElement} It returns null value\n */\n CanvasRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n var values = Object.keys(options).map(function (key) { return options[key]; });\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], values[i]);\n }\n return null;\n };\n /**\n * To update the values of the canvas element attributes\n *\n * @param {SVGCanvasAttributes} options - Specifies the colors required to create gradient\n * @returns {void}\n */\n CanvasRenderer.prototype.updateCanvasAttributes = function (options) {\n this.setElementAttributes(options, this.canvasObj);\n var ctx = this.ctx;\n if (!isNullOrUndefined(this.dataUrl)) {\n var img_1 = new Image;\n img_1.onload = function () {\n ctx.drawImage(img_1, 0, 0);\n };\n img_1.src = this.dataUrl;\n }\n };\n /**\n * This method clears the given rectangle region\n *\n * @param {Rect} rect The rect parameter as passed\n */\n CanvasRenderer.prototype.clearRect = function (rect) {\n this.ctx.restore();\n this.ctx.clearRect(rect.x, rect.y, rect.width, rect.height);\n };\n /**\n * For canvas rendering in chart\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.createGroup = function () {\n return null;\n };\n /**\n * To render a clip path\n *\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.drawClipPath = function () {\n return null;\n };\n /**\n * To render a Circular clip path\n *\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.drawCircularClipPath = function () {\n return null;\n };\n /**\n * Clip method to perform clip in canvas mode\n *\n * @param {BaseAttibutes} options The canvas clip of options\n */\n CanvasRenderer.prototype.canvasClip = function (options) {\n this.ctx.save();\n this.ctx.fillStyle = 'transparent';\n this.ctx.rect(options.x, options.y, options.width, options.height);\n this.ctx.fill();\n this.ctx.clip();\n };\n /**\n * Tp restore the canvas\n */\n CanvasRenderer.prototype.canvasRestore = function () {\n this.ctx.restore();\n };\n /**\n * To draw a polygon\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.drawPolygon = function () {\n return null;\n };\n /**\n * To create defs element in SVG\n * Dummy method for using canvas/svg render in the same variable name in chart control\n *\n * @returns {Element} It returns null\n */\n CanvasRenderer.prototype.createDefs = function () {\n return null;\n };\n /**\n * To create clip path in SVG\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.createClipPath = function () {\n return null;\n };\n /**\n * To create a Html5 SVG element\n * Dummy method for using canvas/svg render in the same variable name in chart control\n *\n * @returns {Element} It returns null\n */\n CanvasRenderer.prototype.createSvg = function () {\n return null;\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","/** @private */\nexport function getTooltipThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n case 'HighContrast':\n style = {\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696',\n textStyle: { fontFamily: 'Segoe UI', color: '#000000' }\n };\n break;\n case 'MaterialDark':\n case 'FabricDark':\n case 'BootstrapDark':\n style = {\n tooltipFill: theme === 'MaterialDark' ? '#F4F4F4' : theme === 'FabricDark' ? '#A19F9D' : '#F0F0F0',\n tooltipBoldLabel: theme === 'MaterialDark' ? 'rgba(18, 18, 18, 1)' : theme === 'FabricDark' ? '#DADADA' : '#1A1A1A',\n tooltipLightLabel: theme === 'MaterialDark' ? 'rgba(18, 18, 18, 1)' : theme === 'FabricDark' ? '#DADADA' : '#1A1A1A',\n tooltipHeaderLine: '#9A9A9A',\n textStyle: theme === 'MaterialDark' ? { fontFamily: 'Roboto', color: 'rgba(18, 18, 18, 1)' } : theme === 'FabricDark' ? { fontFamily: 'Segoe UI', color: '#DADADA' } : { fontFamily: 'Helvetica', color: '#1A1A1A' }\n };\n break;\n case 'Bootstrap4':\n style = {\n tooltipFill: '#212529',\n tooltipBoldLabel: '#F9FAFB',\n tooltipLightLabel: '#F9FAFB',\n tooltipHeaderLine: 'rgba(255, 255, 255, 0.2)',\n textStyle: { fontFamily: 'Helvetica', color: '#F9FAFB' }\n };\n break;\n case 'Tailwind':\n style = {\n tooltipFill: '#111827',\n tooltipBoldLabel: '#F9FAFB',\n tooltipLightLabel: '#F9FAFB',\n tooltipHeaderLine: '#6B7280',\n textStyle: { fontFamily: 'Inter', color: '#F9FAFB' }\n };\n break;\n case 'TailwindDark':\n style = {\n tooltipFill: '#E9ECEF',\n tooltipBoldLabel: '#1F2937',\n tooltipLightLabel: '#1F2937',\n tooltipHeaderLine: '#9CA3AF',\n textStyle: { fontFamily: 'Inter', color: '#1F2937' }\n };\n break;\n case 'Bootstrap5':\n style = {\n tooltipFill: '#212529',\n tooltipBoldLabel: '#F9FAFB',\n tooltipLightLabel: '#F9FAFB',\n tooltipHeaderLine: '#9CA3AF',\n textStyle: { fontFamily: 'Helvetica', color: '#F9FAFB' }\n };\n break;\n case 'Bootstrap5Dark':\n style = {\n tooltipFill: '#E9ECEF',\n tooltipBoldLabel: '#212529',\n tooltipLightLabel: '#212529',\n tooltipHeaderLine: '#ADB5BD',\n textStyle: { fontFamily: 'Helvetica', color: '#212529' }\n };\n break;\n case 'Fluent':\n style = {\n tooltipFill: '#FFFFFF',\n tooltipBoldLabel: '#323130',\n tooltipLightLabel: '#323130',\n tooltipHeaderLine: '#D2D0CE',\n textStyle: { fontFamily: 'Segoe UI', color: '#323130' }\n };\n break;\n case 'FluentDark':\n style = {\n tooltipFill: '#323130',\n tooltipBoldLabel: '#F3F2F2',\n tooltipLightLabel: '#F3F2F1',\n tooltipHeaderLine: '#3B3A39',\n textStyle: { fontFamily: 'Segoe UI', color: '#F3F2F1' }\n };\n break;\n case 'Material3':\n style = {\n tooltipFill: '#313033',\n tooltipBoldLabel: '#F4EFF4',\n tooltipLightLabel: '#F4EFF4',\n tooltipHeaderLine: '#F4EFF4',\n textStyle: { fontFamily: 'Roboto', color: '#F4EFF4' }\n };\n break;\n case 'Material3Dark':\n style = {\n tooltipFill: '#E6E1E5',\n tooltipBoldLabel: '#313033',\n tooltipLightLabel: '#313033',\n tooltipHeaderLine: '#313033',\n textStyle: { fontFamily: 'Roboto', color: '#313033' }\n };\n break;\n default:\n style = {\n tooltipFill: theme === 'Material' ? '#000816' : theme === 'Fabric' ? '#FFFFFF' : '#212529',\n tooltipBoldLabel: theme === 'Material' ? 'rgba(249, 250, 251, 1)' : theme === 'Fabric' ? '#333333' : '#F9FAFB',\n tooltipLightLabel: theme === 'Material' ? 'rgba(249, 250, 251, 1)' : theme === 'Fabric' ? '#333333' : '#F9FAFB',\n tooltipHeaderLine: theme === 'Fabric' ? '#D2D0CE' : '#ffffff',\n textStyle: theme === 'Material' ? { fontFamily: 'Roboto', color: 'rgba(249, 250, 251, 1)' } : theme === 'Fabric' ? { fontFamily: 'Segoe UI', color: '#333333' } : { fontFamily: 'Helvetica', color: '#F9FAFB' }\n };\n break;\n }\n return style;\n}\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer } from '../svg-render/index';\nimport { createElement, remove, merge } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n *\n * @private\n * @param {string} text To get a text\n * @param {FontModel} font To get a font of the text\n * @returns {Size} measureText\n */\nexport function measureText(text, font, themeFontStyle) {\n var breakText = text || ''; // For avoid NuLL value\n var htmlObject = document.getElementById('chartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'chartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n if (typeof (text) === 'string' && (text.indexOf('<') > -1 || text.indexOf('>') > -1)) {\n var textArray = text.split(' ');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].indexOf('
') === -1) {\n textArray[i] = textArray[i].replace(/[<>]/g, '&');\n }\n }\n text = textArray.join(' ');\n }\n htmlObject.innerHTML = (breakText.indexOf('
') > -1 || breakText.indexOf('
') > -1) ? breakText : text;\n htmlObject.style.position = 'fixed';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily || themeFontStyle.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/** @private */\nexport function withInAreaBounds(x, y, areaBounds, width, height) {\n if (width === void 0) { width = 0; }\n if (height === void 0) { height = 0; }\n return (x >= areaBounds.x - width && x <= areaBounds.x + areaBounds.width + width && y >= areaBounds.y - height\n && y <= areaBounds.y + areaBounds.height + height);\n}\n/** @private */\nexport function findDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY, controlName) {\n if (controlName === void 0) { controlName = ''; }\n var direction = '';\n var startX = rect.x;\n var startY = rect.y;\n var width = rect.x + rect.width;\n var height = rect.y + rect.height;\n if (top) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + startY + ' ' + (startX + rX) + ' ' + startY + ' ' +\n ' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n + startY + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n if (arrowPadding !== 0) {\n if (controlName === 'RangeNavigator') {\n if ((arrowLocation.x - arrowPadding) > width / 2) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX + arrowPadding) + ' ' + (height + arrowPadding)\n + ' L' + ' ' + (arrowLocation.x) + ' ' + height);\n }\n else {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX - arrowPadding) + ' ' + (height + arrowPadding)\n + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + height);\n }\n }\n else {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (height + arrowPadding)\n + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + height);\n }\n }\n if ((arrowLocation.x - arrowPadding) > startX) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n if (arrowPadding === 0) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n }\n }\n }\n else if (bottom) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (arrowLocation.y));\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY)\n + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height) +\n ' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else if (left) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n + (startY) + ' ' + (width) + ' ' + ((controlName === 'RangeNavigator' ? 0 : (startY + rY)) + ' L' + ' ' + (width) + ' ' + (controlName === 'RangeNavigator' ? 0 : (arrowLocation.y - arrowPadding))));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (width + arrowPadding) + ' ' + 0) :\n direction.concat(' L' + ' ' + (width + arrowPadding) + ' ' + (tipY));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y - rY)) :\n direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n + (startY) + ' ' + (startX) + ' ' + ((controlName === 'RangeNavigator' ? 0 : (startY + rY)) + ' L' + ' ' + (startX) + ' ' + (controlName === 'RangeNavigator' ? 0 : (arrowLocation.y - arrowPadding))));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (startX - arrowPadding) + ' ' + 0) :\n direction.concat(' L' + ' ' + (startX - arrowPadding) + ' ' + (tipY));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y - rY)) :\n direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding));\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX + rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n + (height) + ' ' + (width) + ' ' + (height - rY) +\n ' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n }\n return direction;\n}\n/** @private */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\nvar Side = /** @class */ (function () {\n function Side(bottom, right) {\n this.isRight = right;\n this.isBottom = bottom;\n }\n return Side;\n}());\nexport { Side };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine, labelRotation) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.labelRotation = 0;\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n _this.labelRotation = labelRotation;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var renderer = new SvgRenderer('');\n var temp = calculateShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n htmlObject.setAttribute('aria-label', label);\n return htmlObject;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Plus':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nexport function textElement(options, font, color, parent, themeStyle) {\n var renderOptions = {};\n var renderer = new SvgRenderer('');\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily || themeStyle.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n var text = typeof options.text === 'string' ? options.text : options.text[0];\n var htmlObject = renderer.createText(renderOptions, text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nvar TooltipLocation = /** @class */ (function () {\n function TooltipLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return TooltipLocation;\n}());\nexport { TooltipLocation };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? 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/* eslint-disable security/detect-object-injection */\n/* eslint-disable no-useless-escape */\n/* eslint-disable security/detect-non-literal-regexp */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable jsdoc/require-param */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\nimport { NotifyPropertyChanges, Property, Event, Complex, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { extend, compile as templateComplier, Component, resetBlazorTemplate, isBlazor, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { SvgRenderer } from '../svg-render/index';\nimport { ChildProperty, createElement, remove, Browser, Animation } from '@syncfusion/ej2-base';\nimport { getTooltipThemeColor } from './interface';\nimport { Size, Rect, Side, measureText, getElement, findDirection, drawSymbol, textElement } from './helper';\nimport { removeElement, TextOption, TooltipLocation, PathOption, withInAreaBounds } from './helper';\n/**\n * Configures the fonts in charts.\n *\n * @private\n */\nvar TextStyle = /** @class */ (function (_super) {\n __extends(TextStyle, _super);\n function TextStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], TextStyle.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], TextStyle.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], TextStyle.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], TextStyle.prototype, \"opacity\", void 0);\n return TextStyle;\n}(ChildProperty));\nexport { TextStyle };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar TooltipBorder = /** @class */ (function (_super) {\n __extends(TooltipBorder, _super);\n function TooltipBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], TooltipBorder.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], TooltipBorder.prototype, \"dashArray\", void 0);\n return TooltipBorder;\n}(ChildProperty));\nexport { TooltipBorder };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar AreaBounds = /** @class */ (function (_super) {\n __extends(AreaBounds, _super);\n function AreaBounds() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"y\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"height\", void 0);\n return AreaBounds;\n}(ChildProperty));\nexport { AreaBounds };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar ToolLocation = /** @class */ (function (_super) {\n __extends(ToolLocation, _super);\n function ToolLocation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"y\", void 0);\n return ToolLocation;\n}(ChildProperty));\nexport { ToolLocation };\n/**\n * Represents the Tooltip control.\n * ```html\n *
\n * \n * ```\n *\n * @private\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the widget\n *\n * @hidden\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler.\n *\n * @private\n */\n Tooltip.prototype.preRender = function () {\n this.allowServerDataBinding = false;\n this.initPrivateVariable();\n if (!this.isCanvas) {\n this.removeSVG();\n }\n this.createTooltipElement();\n };\n Tooltip.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.themeStyle = getTooltipThemeColor(this.theme);\n this.formattedText = [];\n this.padding = 5;\n this.highlightPadding = 3;\n this.areaMargin = 10;\n this.isFirst = true;\n this.markerPoint = [];\n };\n Tooltip.prototype.removeSVG = function () {\n var svgObject = document.getElementById(this.element.id + '_svg');\n var templateObject = document.getElementById(this.element.id + 'parent_template');\n if (this.blazorTemplate) {\n resetBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate');\n }\n if (svgObject && svgObject.parentNode) {\n remove(svgObject);\n }\n if (templateObject && templateObject.parentNode) {\n remove(templateObject);\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Tooltip.prototype.render = function () {\n this.fadeOuted = false;\n if (!this.template) {\n this.renderText(this.isFirst);\n var argsData = {\n cancel: false, name: 'tooltipRender', tooltip: this\n };\n this.trigger('tooltipRender', argsData);\n var markerSide = this.renderTooltipElement(this.areaBounds, this.location);\n this.drawMarker(markerSide.isBottom, markerSide.isRight, this.markerSize);\n }\n else {\n this.updateTemplateFn();\n this.createTemplate(this.areaBounds, this.location);\n }\n this.trigger('loaded', { tooltip: this });\n var element = document.getElementById('chartmeasuretext');\n if (element) {\n remove(element);\n }\n this.allowServerDataBinding = true;\n };\n Tooltip.prototype.createTooltipElement = function () {\n this.textElements = [];\n if (!this.template || this.shared) {\n // SVG element for tooltip\n if (this.enableRTL) {\n this.element.setAttribute('dir', 'ltr');\n }\n var svgObject = this.renderer.createSvg({ id: this.element.id + '_svg' });\n this.element.appendChild(svgObject);\n // Group to hold text and path.\n var groupElement = document.getElementById(this.element.id + '_group');\n if (!groupElement) {\n groupElement = this.renderer.createGroup({ id: this.element.id + '_group' });\n groupElement.setAttribute('transform', 'translate(0,0)');\n }\n svgObject.appendChild(groupElement);\n var pathElement = this.renderer.drawPath({\n 'id': this.element.id + '_path', 'stroke-width': ((this.theme === 'Fabric' || this.theme === 'Fluent') && !this.border.width) ? 1 : this.border.width,\n 'fill': this.fill || this.themeStyle.tooltipFill, 'opacity': ((this.theme === 'TailwindDark' || this.theme === 'Tailwind' || this.theme === 'Bootstrap5' || this.theme === 'Bootstrap5Dark') && this.opacity === 0.75) ?\n 1 : this.opacity,\n 'stroke': this.border.color || (this.theme === 'Fabric' || this.theme === 'Fluent' ? '#D2D0CE' : this.border.color)\n });\n groupElement.appendChild(pathElement);\n }\n };\n Tooltip.prototype.drawMarker = function (isBottom, isRight, size) {\n if (this.shapes.length <= 0) {\n return null;\n }\n var shapeOption;\n var count = 0;\n var markerGroup = this.renderer.createGroup({ id: this.element.id + '_trackball_group' });\n var groupElement = getElement(this.element.id + '_group');\n var x = ((this.enableRTL) ? this.elementSize.width - (size / 2) :\n (this.marginX * 2) + (size / 2)) + (isRight ? this.arrowPadding : 0);\n for (var _i = 0, _a = this.shapes; _i < _a.length; _i++) {\n var shape = _a[_i];\n if (shape !== 'None') {\n shapeOption = new PathOption(this.element.id + '_Trackball_' + count, this.palette[count], 1, '#cccccc', 1, null);\n if (this.markerPoint[count]) {\n var padding = 0;\n if (this.header.indexOf(' -1) {\n padding = this.header.split(//g).length + count;\n }\n markerGroup.appendChild(drawSymbol(new TooltipLocation(x, this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : padding)), shape, new Size(size, size), '', shapeOption, null));\n }\n count++;\n }\n }\n groupElement.appendChild(markerGroup);\n };\n Tooltip.prototype.renderTooltipElement = function (areaBounds, location) {\n var tooltipDiv = getElement(this.element.id);\n var arrowLocation = new TooltipLocation(0, 0);\n var tipLocation = new TooltipLocation(0, 0);\n var svgObject = getElement(this.element.id + '_svg');\n var groupElement = getElement(this.element.id + '_group');\n var pathElement = getElement(this.element.id + '_path');\n var rect;\n var isTop = false;\n var isLeft = false;\n var isBottom = false;\n var x = 0;\n var y = 0;\n if (this.header !== '') {\n this.elementSize.height += this.marginY;\n }\n if (this.content.length > 1) {\n rect = this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y);\n isTop = true;\n }\n else {\n rect = this.tooltipLocation(areaBounds, location, arrowLocation, tipLocation);\n if (!this.inverted) {\n isTop = (rect.y < (location.y + this.clipBounds.y));\n isBottom = !isTop;\n y = (isTop ? 0 : this.arrowPadding);\n }\n else {\n isLeft = (rect.x < (location.x + this.clipBounds.x));\n x = (isLeft ? 0 : this.arrowPadding);\n if (this.allowHighlight) {\n rect.x += isLeft ? this.highlightPadding : -(2 * this.highlightPadding);\n }\n }\n }\n if (this.header !== '') {\n var wrapPadding = 2;\n var padding = 0;\n var wrapHeader = this.isWrap ? this.wrappedText : this.header;\n if (this.isWrap && typeof (wrapHeader) === 'string' && (wrapHeader.indexOf('<') > -1 || wrapHeader.indexOf('>') > -1)) {\n var textArray = wrapHeader.split('
');\n wrapPadding = textArray.length;\n }\n if (this.header.indexOf(' -1) {\n padding = 5 * (this.header.split(//g).length - 1);\n }\n var key = 'properties';\n var font = extend({}, this.textStyle, null, true)[key];\n font.fontWeight = '600';\n var headerSize = measureText(this.isWrap ? this.wrappedText : this.header, font, this.themeStyle.textStyle).height +\n (this.marginY * wrapPadding) + (isBottom ? this.arrowPadding : 0) + (this.isWrap ? 5 : padding); //header padding;\n var xLength = (this.marginX * 3) + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0);\n var direction = 'M ' + xLength + ' ' + headerSize +\n 'L ' + (rect.width + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0) - (this.marginX * 2)) +\n ' ' + headerSize;\n var pathElement_1 = this.renderer.drawPath({\n 'id': this.element.id + '_header_path', 'stroke-width': 1,\n 'fill': null, 'opacity': this.theme === ('Material3' || 'Material3Dark') ? 0.2 : 0.8, 'stroke': this.themeStyle.tooltipHeaderLine, 'd': direction\n });\n groupElement.appendChild(pathElement_1);\n }\n var start = this.border.width / 2;\n var pointRect = new Rect(start + x, start + y, rect.width - start, rect.height - start);\n groupElement.setAttribute('opacity', '1');\n if (this.enableAnimation && !this.isFirst && !this.crosshair) {\n this.animateTooltipDiv(tooltipDiv, rect);\n }\n else {\n this.updateDiv(tooltipDiv, rect.x, rect.y);\n }\n // eslint-disable-next-line no-extra-boolean-cast\n svgObject.setAttribute('height', (rect.height + this.border.width + (!((!this.inverted)) ? 0 : this.arrowPadding) + 5).toString());\n svgObject.setAttribute('width', (rect.width + this.border.width + (((!this.inverted)) ? 0 : this.arrowPadding) + 5).toString());\n svgObject.setAttribute('opacity', '1');\n if (!isNullOrUndefined(this.tooltipPlacement)) {\n isTop = this.tooltipPlacement.indexOf('Top') > -1;\n isBottom = this.tooltipPlacement.indexOf('Bottom') > -1;\n isLeft = this.tooltipPlacement.indexOf('Left') > -1;\n }\n pathElement.setAttribute('d', findDirection(this.rx, this.ry, pointRect, arrowLocation, this.arrowPadding, isTop, isBottom, isLeft, tipLocation.x, tipLocation.y, this.controlName));\n if (this.enableShadow && this.theme !== 'Bootstrap4') {\n // To fix next chart initial tooltip opacity issue in tab control\n var shadowId = this.element.id + '_shadow';\n if (this.theme === 'Tailwind' || this.theme === 'TailwindDark'\n || this.theme === 'Bootstrap5' || this.theme === 'Bootstrap5Dark') {\n pathElement.setAttribute('box-shadow', '0px 1px 2px rgba(0, 0, 0, 0.06), 0px 1px 3px rgba(0, 0, 0, 0.1)');\n }\n else {\n pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#' + shadowId + ')');\n }\n var shadow = '';\n shadow += '';\n shadow += '';\n var defElement = this.renderer.createDefs();\n defElement.setAttribute('id', this.element.id + 'SVG_tooltip_definition');\n groupElement.appendChild(defElement);\n defElement.innerHTML = shadow;\n }\n var borderColor = ((this.theme === 'Fabric' || this.theme === 'Fluent') && !this.border.color) ? '#D2D0CE' : this.border.color;\n pathElement.setAttribute('stroke', borderColor);\n if (!isNullOrUndefined(this.border.dashArray)) {\n pathElement.setAttribute('stroke-dasharray', this.border.dashArray);\n }\n this.changeText(new TooltipLocation(x, y), isBottom, !isLeft && !isTop && !isBottom);\n if (this.revert) {\n this.inverted = !this.inverted;\n this.revert = false;\n }\n return new Side(isBottom, !isLeft && !isTop && !isBottom);\n };\n Tooltip.prototype.changeText = function (point, isBottom, isRight) {\n var element = document.getElementById(this.element.id + '_text');\n if (isBottom) {\n element.setAttribute('transform', 'translate(0,' + this.arrowPadding + ')');\n }\n if (isRight) {\n element.setAttribute('transform', 'translate(' + this.arrowPadding + ' 0)');\n }\n };\n Tooltip.prototype.findFormattedText = function () {\n this.formattedText = [];\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n this.formattedText = this.formattedText.concat(this.header);\n }\n this.formattedText = this.formattedText.concat(this.content);\n };\n // tslint:disable-next-line:max-func-body-length\n Tooltip.prototype.renderText = function (isRender) {\n var height = 0;\n var width = 0; // Padding for text;\n var subWidth = 0;\n var lines;\n var key = 'properties';\n var font = extend({}, this.textStyle, null, true)[key];\n var groupElement = getElement(this.element.id + '_group');\n var tspanElement;\n var textCollection;\n var tspanStyle = '';\n var line;\n var tspanOption;\n this.findFormattedText();\n this.isWrap = false;\n var isRtlEnabled = document.body.getAttribute('dir') === 'rtl';\n var anchor = isRtlEnabled && !this.enableRTL ? 'end' : 'start';\n this.leftSpace = this.areaBounds.x + this.location.x;\n this.rightSpace = (this.areaBounds.x + this.areaBounds.width) - this.leftSpace;\n var headerContent = this.header.replace(//g, '').replace(/<\\/b>/g, '').trim();\n var isBoldTag = this.header.indexOf('') > -1 && this.header.indexOf('') > -1;\n font.fontWeight = '600';\n var headerWidth = measureText(this.formattedText[0], font, this.themeStyle.textStyle).width\n + (2 * this.marginX) + this.arrowPadding;\n var isLeftSpace = (this.location.x - headerWidth) < this.location.x;\n var isRightSpace = (this.areaBounds.x + this.areaBounds.width) < (this.location.x + headerWidth);\n var header;\n var headerSpace = (headerContent !== '') ? this.marginY : 0;\n var isRow = true;\n var isColumn = true;\n this.markerPoint = [];\n var markerSize = (this.shapes.length > 0) ? 10 : 0;\n var markerPadding = (this.shapes.length > 0) ? 5 : 0;\n var spaceWidth = 4;\n var subStringLength;\n var fontSize = '12px';\n var fontWeight = '400';\n var labelColor = this.themeStyle.tooltipLightLabel;\n var dy = (22 / parseFloat(fontSize)) * (parseFloat(font.size));\n var contentWidth = [];\n if (!isRender || this.isCanvas) {\n removeElement(this.element.id + '_text');\n removeElement(this.element.id + '_header_path');\n removeElement(this.element.id + '_trackball_group');\n removeElement(this.element.id + 'SVG_tooltip_definition');\n }\n var options = new TextOption(this.element.id + '_text', this.marginX * 2, (this.marginY * 2 + this.padding * 2 + (this.marginY === 2 ? this.controlName === 'RangeNavigator' ? 5 : 3 : 0)), anchor, '');\n var parentElement = textElement(options, font, font.color || this.themeStyle.tooltipBoldLabel, groupElement, this.themeStyle.textStyle);\n var withoutHeader = this.formattedText.length === 1 && this.formattedText[0].indexOf(' : ') > -1;\n var isHeader = this.header !== '';\n var size = isHeader && isBoldTag ? 16 : 13;\n for (var k = 0, pointsLength = this.formattedText.length; k < pointsLength; k++) {\n textCollection = this.formattedText[k].replace(/<(b|strong)>/g, '')\n .replace(/<\\/(b|strong)>/g, '')\n .split(//g);\n if (this.isTextWrap && this.header !== this.formattedText[k] && this.formattedText[k].indexOf(' this.rightSpace ? (this.leftSpace / size) : (this.rightSpace / size));\n textCollection = this.formattedText[k].match(new RegExp('.{1,' + subStringLength + '}', 'g'));\n }\n if (k === 0 && !withoutHeader && this.isTextWrap &&\n (this.leftSpace < headerWidth || isLeftSpace) &&\n (this.rightSpace < headerWidth || isRightSpace)) {\n subStringLength = Math.round(this.leftSpace > this.rightSpace ? (this.leftSpace / size) : (this.rightSpace / size));\n header = headerContent !== '' ? headerContent : this.formattedText[k];\n textCollection = header.match(new RegExp('.{1,' + subStringLength + '}', 'g'));\n this.wrappedText = isBoldTag ? '' + textCollection.join('
') + '
' : textCollection.join('
');\n this.isWrap = textCollection.length > 1;\n }\n if (textCollection[0] === '') {\n continue;\n }\n if ((k !== 0) || (headerContent === '')) {\n this.markerPoint.push((headerContent !== '' ? (this.marginY) : 0) + options.y + height);\n }\n for (var i = 0, len = textCollection.length; i < len; i++) { // string value of unicode for LTR is \\u200E\n lines = textCollection[i].replace(//g, '
').replace(/<\\/b>/g, '
').split('
');\n if (this.enableRTL && lines.length > 0 && textCollection[i].match(/:/g)) {\n lines[0] = lines[0].trim();\n lines.reverse();\n }\n subWidth = 0;\n isColumn = true;\n height += dy;\n for (var j = 0, len_1 = lines.length; j < len_1; j++) {\n line = lines[j];\n if (this.enableRTL && line !== '' && this.isRTLText(line)) {\n line = line.concat('\\u200E');\n }\n if (!/\\S/.test(line) && line !== '') {\n line = ' '; //to trim multiple white spaces to single white space\n }\n if ((!isColumn && line === ' ') || (line.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '')) {\n subWidth += line !== ' ' ? spaceWidth : 0;\n if (isColumn && !isRow) {\n if (this.header.indexOf(' -1 && k !== 0) {\n headerSpace += this.header.split(//g).length;\n }\n tspanOption = {\n x: (this.marginX * 2) + (markerSize + markerPadding),\n dy: dy + ((isColumn) ? headerSpace : 0), fill: ''\n };\n headerSpace = null;\n }\n else {\n if (isRow && isColumn) {\n tspanOption = {\n x: (headerContent === '') ? ((this.marginX * 2) + (markerSize + markerPadding))\n : (this.marginX * 2) + (this.isWrap ? (markerSize + markerPadding) : 0)\n };\n }\n else {\n tspanOption = {};\n }\n }\n isColumn = false;\n tspanElement = this.renderer.createTSpan(tspanOption, '');\n parentElement.appendChild(tspanElement);\n if (line.indexOf('') > -1 || ((isBoldTag && j === 0 && k === 0) && (isHeader || this.isWrap))) {\n fontWeight = '600';\n labelColor = this.themeStyle.tooltipBoldLabel;\n tspanStyle = 'font-weight:' + fontWeight;\n font.fontWeight = fontWeight;\n (tspanElement).setAttribute('fill', this.textStyle.color || labelColor);\n }\n else {\n tspanStyle = fontWeight === '600' ? 'font-weight:' + fontWeight : '';\n font.fontWeight = fontWeight;\n (tspanElement).setAttribute('fill', this.textStyle.color || labelColor);\n }\n if (line.indexOf('') > -1 || ((isBoldTag && j === len_1 - 1 && k === 0) && (isHeader || this.isWrap))) {\n fontWeight = 'Normal';\n labelColor = this.themeStyle.tooltipLightLabel;\n }\n // eslint-disable-next-line no-useless-escape\n if (tspanStyle !== '') {\n tspanElement.style.fontWeight = tspanStyle.split('font-weight:')[1];\n tspanElement.style.color = tspanElement.getAttribute('fill');\n }\n // 'inherit' will apply css style from parent element.\n tspanElement.style.fontFamily = 'inherit';\n tspanElement.style.fontStyle = 'inherit';\n tspanElement.style.fontSize = (this.header === this.formattedText[k]) ? font.size : this.textStyle.size;\n tspanElement.style.fontWeight = (this.header === this.formattedText[k] && (this.header.indexOf('') || this.header.indexOf('')) === -1) ? '600' : line.indexOf('') > -1 || line.indexOf('') > -1 ? 'bold' : this.textStyle.fontWeight;\n var textFont = extend({}, this.textStyle, null, true)[key];\n textFont.fontWeight = tspanElement.style.fontWeight;\n isRow = false;\n (tspanElement).textContent = line = this.getTooltipTextContent(line);\n subWidth += measureText(line, textFont, this.themeStyle.textStyle).width;\n }\n }\n subWidth -= spaceWidth;\n width = Math.max(width, subWidth);\n contentWidth.push(subWidth);\n }\n }\n this.elementSize = new Size(width + (width > 0 ? (2 * this.marginX) : 0), height);\n this.elementSize.width += (markerSize + markerPadding); // marker size + marker Spacing\n var element = (parentElement.childNodes[0]);\n if (headerContent !== '' && element && !this.isWrap) {\n font.fontWeight = '600';\n var width_1 = (this.elementSize.width + (2 * this.padding)) / 2 - measureText(headerContent, font, this.themeStyle.textStyle).width / 2;\n element.setAttribute('x', width_1.toString());\n }\n this.renderContentRTL(parentElement, isHeader, markerSize + markerPadding, contentWidth);\n };\n Tooltip.prototype.renderContentRTL = function (textElement, isHeader, markerSize, contentWidth) {\n if (this.enableRTL) {\n var tspanElement = void 0;\n var contentWidthIndex = isHeader ? 1 : 0;\n for (var i = 0; i < textElement.childNodes.length; i++) {\n tspanElement = (textElement.childNodes[i]);\n if ((!isHeader || i > 0) && !isNullOrUndefined(tspanElement.getAttribute('x'))) {\n tspanElement.setAttribute('x', (this.elementSize.width - (markerSize + contentWidth[contentWidthIndex])).toString());\n contentWidthIndex++;\n }\n }\n }\n };\n Tooltip.prototype.getTooltipTextContent = function (tooltipText) {\n var characterCollection = tooltipText.match(/<[a-zA-Z\\/](.|\\n)*?>/g);\n if (isNullOrUndefined(characterCollection)) {\n return tooltipText;\n }\n var isRtlText = this.isRTLText(tooltipText);\n for (var i = 0; i < characterCollection.length; i++) {\n if (this.isValidHTMLElement(characterCollection[i].replace('<', '').replace('/', '').replace('>', '').trim())) {\n tooltipText = tooltipText.replace(characterCollection[i], isRtlText ? '\\u200E' : '');\n }\n }\n return tooltipText;\n };\n Tooltip.prototype.isValidHTMLElement = function (element) {\n return document.createElement(element).toString() !== '[object HTMLUnknownElement]';\n };\n Tooltip.prototype.isRTLText = function (tooltipContent) {\n return /[\\u0590-\\u07FF\\u200F\\u202B\\u202E\\uFB1D-\\uFDFD\\uFE70-\\uFEFC]/.test(tooltipContent);\n };\n Tooltip.prototype.createTemplate = function (areaBounds, location) {\n var argsData = { cancel: false, name: 'tooltipRender', tooltip: this };\n this.trigger('tooltipRender', argsData);\n var parent = document.getElementById(this.element.id);\n if (this.isCanvas) {\n this.removeSVG();\n }\n var firstElement = parent.firstElementChild;\n if (firstElement) {\n remove(firstElement);\n }\n if (!argsData.cancel) {\n var elem = createElement('div', { id: this.element.id + 'parent_template' });\n var templateElement = void 0;\n if (this.controlName === 'Chart' && this.shared) {\n for (var i = 0; i < this.data.length; i++) {\n var sharedTemplateElement = this.templateFn(this.data[i], this.controlInstance, elem.id, elem.id + '_blazorTemplate', '');\n if (i === 0) {\n templateElement = sharedTemplateElement;\n }\n else {\n templateElement[0].outerHTML += '
' + sharedTemplateElement[0].outerHTML;\n }\n }\n }\n else {\n templateElement = this.templateFn(this.data, this.controlInstance, elem.id, elem.id + '_blazorTemplate', '');\n }\n while (templateElement && templateElement.length > 0) {\n if (isBlazor() || templateElement.length === 1) {\n elem.appendChild(templateElement[0]);\n templateElement = null;\n }\n else {\n elem.appendChild(templateElement[0]);\n }\n }\n parent.appendChild(elem);\n var element = this.isCanvas ? elem : this.element;\n var rect = element.getBoundingClientRect();\n this.padding = 0;\n this.elementSize = new Size(rect.width, rect.height);\n var tooltipRect = this.shared ? this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y)\n : this.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n if (this.enableAnimation && !this.isFirst && !this.crosshair) {\n this.animateTooltipDiv(this.element, tooltipRect);\n }\n else {\n this.updateDiv(element, tooltipRect.x, tooltipRect.y);\n }\n if (this.blazorTemplate) {\n //Customer issue - F149037 Call back function to handle the blazor tooltip alignment issues\n var tooltipRendered = function () {\n var rect1 = getElement(thisObject_1.element.id).getBoundingClientRect();\n thisObject_1.elementSize = new Size(rect1.width, rect1.height);\n var tooltipRect1 = thisObject_1.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n thisObject_1.updateDiv(getElement(thisObject_1.element.id), tooltipRect1.x, tooltipRect1.y);\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisObject_1 = this;\n tooltipRendered.bind(thisObject_1, areaBounds, location);\n updateBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate', this.blazorTemplate.name, this.blazorTemplate.parent, undefined, tooltipRendered);\n }\n }\n else {\n remove(getElement(this.element.id + '_tooltip'));\n }\n };\n Tooltip.prototype.sharedTooltipLocation = function (bounds, x, y) {\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var tooltipRect = new Rect(x + 2 * this.padding, y - height - this.padding, width, height);\n if (tooltipRect.y < bounds.y) {\n tooltipRect.y += (tooltipRect.height + 2 * this.padding);\n }\n if (tooltipRect.y + tooltipRect.height > bounds.y + bounds.height) {\n tooltipRect.y = Math.max((bounds.y + bounds.height) - (tooltipRect.height + 2 * this.padding), bounds.y);\n }\n if (tooltipRect.x + tooltipRect.width > bounds.x + bounds.width) {\n tooltipRect.x = (bounds.x + bounds.width) - (tooltipRect.width + 4 * this.padding);\n }\n if (tooltipRect.x < bounds.x) {\n tooltipRect.x = bounds.x;\n }\n return tooltipRect;\n };\n Tooltip.prototype.getCurrentPosition = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n var position = this.tooltipPlacement;\n var clipX = this.clipBounds.x;\n var clipY = this.clipBounds.y;\n var markerHeight = this.offset;\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n if (position === 'Top' || position === 'Bottom') {\n location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if (position === 'Bottom') {\n location.y = symbolLocation.y + clipY + markerHeight;\n }\n if (bounds.x + bounds.width < location.x + width) {\n location.x = (bounds.width > width) ? ((bounds.x + bounds.width) - width + 6) : bounds.x;\n arrowLocation.x = tipLocation.x = (bounds.width > width) ? (bounds.x + symbolLocation.x - location.x) : symbolLocation.x;\n }\n else if (bounds.x > location.x) {\n location.x = bounds.x;\n arrowLocation.x = tipLocation.x = symbolLocation.x;\n }\n }\n else {\n location = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if (position === 'Left') {\n location.x = symbolLocation.x + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (bounds.y + bounds.height < location.y + height) {\n location.y = (bounds.height > height) ? ((bounds.y + bounds.height) - height + 6) : bounds.y;\n arrowLocation.y = tipLocation.y = (bounds.height > height) ? (bounds.y + symbolLocation.y - location.y) : symbolLocation.y;\n }\n else if (bounds.y > location.y) {\n location.y = bounds.y;\n arrowLocation.y = tipLocation.y = symbolLocation.y;\n }\n }\n return new Rect(location.x, location.y, width, height);\n };\n // tslint:disable-next-line:max-func-body-length\n Tooltip.prototype.tooltipLocation = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n if (!isNullOrUndefined(this.tooltipPlacement)) {\n var tooltipRect = this.getCurrentPosition(bounds, symbolLocation, arrowLocation, tipLocation);\n return tooltipRect;\n }\n var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var markerHeight = this.offset;\n var clipX = this.clipBounds.x;\n var clipY = this.clipBounds.y;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n this.outOfBounds = false;\n if (!this.inverted) {\n location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * (this.allowHighlight ? this.highlightPadding : this.padding)) -\n this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if ((location.y < boundsY || (this.isNegative)) && !(this.controlName === 'Progressbar')) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n }\n if (location.y + height + this.arrowPadding > boundsY + bounds.height) {\n location.y = Math.min(symbolLocation.y, boundsY + bounds.height) + clipY\n - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight;\n }\n if (((location.x + width > boundsX + bounds.width) && location.y < boundsY || (this.isNegative)) && !(this.controlName === 'Progressbar')) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n }\n tipLocation.x = width / 2;\n if (location.x < boundsX && !(this.controlName === 'Progressbar')) {\n arrowLocation.x -= (boundsX - location.x);\n tipLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (location.x + width > boundsX + bounds.width && !(this.controlName === 'Progressbar')) {\n arrowLocation.x += ((location.x + width) - (boundsX + bounds.width));\n tipLocation.x += ((location.x + width) - (boundsX + bounds.width));\n location.x -= ((location.x + width) - (boundsX + bounds.width));\n }\n if (location.x < boundsX && !(this.controlName === 'Progressbar')) {\n arrowLocation.x -= (boundsX - location.x);\n tipLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (arrowLocation.x + this.arrowPadding > width - this.rx) {\n arrowLocation.x = width - this.rx - this.arrowPadding;\n tipLocation.x = width - this.rx - this.arrowPadding;\n }\n if (arrowLocation.x - this.arrowPadding < this.rx) {\n arrowLocation.x = tipLocation.x = this.rx + this.arrowPadding;\n }\n if (this.controlName === 'Chart') {\n if (((bounds.x + bounds.width) - (location.x + arrowLocation.x)) < this.areaMargin + this.arrowPadding ||\n (location.x + arrowLocation.x) < this.areaMargin + this.arrowPadding) {\n this.outOfBounds = true;\n }\n if (!withInAreaBounds(location.x, location.y, bounds) || this.outOfBounds) {\n this.inverted = !this.inverted;\n this.revert = true;\n location = new TooltipLocation(symbolLocation.x + markerHeight + clipX, symbolLocation.y + clipY - this.elementSize.height / 2 - (this.padding));\n tipLocation.x = arrowLocation.x = 0;\n tipLocation.y = arrowLocation.y = height / 2;\n if ((location.x + this.arrowPadding + width > boundsX + bounds.width) || (this.isNegative)) {\n location.x = (symbolLocation.x > bounds.width ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (this.arrowPadding + width);\n }\n if (location.x < boundsX) {\n location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + markerHeight + clipX;\n }\n if (location.y <= boundsY) {\n tipLocation.y -= (boundsY - location.y);\n arrowLocation.y -= (boundsY - location.y);\n location.y = boundsY;\n }\n if (location.y + height >= bounds.height + boundsY) {\n arrowLocation.y += ((location.y + height) - (bounds.height + boundsY));\n tipLocation.y += ((location.y + height) - (bounds.height + boundsY));\n location.y -= ((location.y + height) - (bounds.height + boundsY));\n }\n if ((this.arrowPadding) + arrowLocation.y > height - this.ry) {\n arrowLocation.y = height - this.arrowPadding - this.ry;\n tipLocation.y = height;\n }\n if (arrowLocation.y - this.arrowPadding < this.ry) {\n arrowLocation.y = (this.arrowPadding) + this.ry;\n tipLocation.y = 0;\n }\n }\n }\n }\n else {\n location = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if ((location.x + width + this.arrowPadding > boundsX + bounds.width) || (this.isNegative)) {\n location.x = (symbolLocation.x > bounds.width + bounds.x ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (location.x < boundsX) {\n location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + clipX + markerHeight;\n }\n if ((location.x + width + this.arrowPadding > boundsX + bounds.width)) {\n location.x = (symbolLocation.x > bounds.width + bounds.x ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (location.y <= boundsY) {\n arrowLocation.y -= (boundsY - location.y);\n tipLocation.y -= (boundsY - location.y);\n location.y = boundsY;\n }\n if (location.y + height >= boundsY + bounds.height) {\n arrowLocation.y += ((location.y + height) - (boundsY + bounds.height));\n tipLocation.y += ((location.y + height) - (boundsY + bounds.height));\n location.y -= ((location.y + height) - (boundsY + bounds.height));\n }\n if (arrowLocation.y + this.arrowPadding > height - this.ry) {\n arrowLocation.y = height - this.ry - this.arrowPadding;\n tipLocation.y = height;\n }\n if (arrowLocation.y - this.arrowPadding < this.ry) {\n arrowLocation.y = tipLocation.y = this.ry + this.arrowPadding;\n }\n if (this.controlName === 'Chart') {\n if ((location.y + arrowLocation.y) < this.areaMargin + this.arrowPadding ||\n ((bounds.y + bounds.height) - (location.y + arrowLocation.y)) < this.areaMargin + this.arrowPadding) {\n this.outOfBounds = true;\n }\n if (!withInAreaBounds(location.x, location.y, bounds) || this.outOfBounds) {\n this.inverted = !this.inverted;\n location = new TooltipLocation(symbolLocation.x + clipX - this.padding - this.elementSize.width / 2, symbolLocation.y + clipY - this.elementSize.height - (2 * this.padding) - markerHeight - this.arrowPadding);\n this.revert = true;\n tipLocation.x = arrowLocation.x = width / 2;\n tipLocation.y = arrowLocation.y = 0;\n if (location.y < boundsY || (this.isNegative)) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + markerHeight + clipY;\n }\n if (location.y + this.arrowPadding + height > boundsY + bounds.height) {\n location.y = Math.min(symbolLocation.y, boundsY + bounds.height) + clipY\n - this.elementSize.height - (2 * this.padding) - markerHeight - this.arrowPadding;\n }\n tipLocation.x = width / 2;\n if (location.x < boundsX) {\n tipLocation.x -= (boundsX - location.x);\n arrowLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (location.x + width > bounds.width + boundsX) {\n arrowLocation.x += ((location.x + width) - (bounds.width + boundsX));\n tipLocation.x += ((location.x + width) - (bounds.width + boundsX));\n location.x -= ((location.x + width) - (bounds.width + boundsX));\n }\n if ((this.arrowPadding) + arrowLocation.x > width - this.rx) {\n tipLocation.x = width - this.rx - (this.arrowPadding);\n arrowLocation.x = width - this.rx - (this.arrowPadding);\n }\n if (arrowLocation.x - (this.arrowPadding) < this.rx) {\n arrowLocation.x = tipLocation.x = this.rx + (this.arrowPadding);\n }\n }\n }\n }\n return new Rect(location.x, location.y, width, height);\n };\n Tooltip.prototype.animateTooltipDiv = function (tooltipDiv, rect) {\n var _this = this;\n var x = parseFloat(tooltipDiv.style.left);\n var y = parseFloat(tooltipDiv.style.top);\n var currenDiff;\n new Animation({}).animate(tooltipDiv, {\n duration: this.duration,\n progress: function (args) {\n currenDiff = (args.timeStamp / args.duration);\n tooltipDiv.style.animation = null;\n if ((_this.controlName === 'Chart' && _this.shared) && !_this.enableRTL) {\n tooltipDiv.style.transition = isBlazor() ? 'transform 0.3s' : 'transform 0.1s';\n tooltipDiv.style.transform = 'translate(' + (x + currenDiff * (rect.x - x)) + 'px,' + (y + currenDiff * (rect.y - y)) + 'px)';\n }\n else {\n tooltipDiv.style.left = (x + currenDiff * (rect.x - x)) + 'px';\n tooltipDiv.style.top = (y + currenDiff * (rect.y - y)) + 'px';\n }\n },\n end: function (model) {\n _this.updateDiv(tooltipDiv, rect.x, rect.y);\n _this.trigger('animationComplete', { tooltip: _this });\n }\n });\n };\n Tooltip.prototype.updateDiv = function (tooltipDiv, x, y) {\n if ((this.controlName === 'Chart' && this.shared && !this.crosshair) && !this.enableRTL) {\n tooltipDiv.style.transform = 'translate(' + x + 'px,' + y + 'px)';\n }\n else {\n tooltipDiv.style.left = x + 'px';\n tooltipDiv.style.top = y + 'px';\n }\n };\n Tooltip.prototype.updateTemplateFn = function () {\n if (this.template) {\n try {\n if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {\n this.templateFn = templateComplier(document.querySelector(this.template).innerHTML.trim());\n }\n else {\n this.templateFn = templateComplier(this.template);\n }\n }\n catch (e) {\n this.templateFn = templateComplier(this.template);\n }\n }\n };\n /** @private */\n Tooltip.prototype.fadeOut = function () {\n var _this = this;\n var tooltipElement = (this.isCanvas && !this.template) ? getElement(this.element.id + '_svg') :\n getElement(this.element.id);\n var tooltipDiv = getElement(this.element.id);\n if (tooltipElement) {\n var tooltipGroup_1 = tooltipElement.firstChild;\n if (tooltipGroup_1 && tooltipGroup_1.nodeType !== Node.ELEMENT_NODE) {\n tooltipGroup_1 = tooltipElement.firstElementChild;\n }\n if (this.isCanvas && !this.template) {\n tooltipGroup_1 = document.getElementById(this.element.id + '_group') ? document.getElementById(this.element.id + '_group') :\n tooltipGroup_1;\n }\n if (!tooltipGroup_1) {\n return null;\n }\n var opacity_1 = parseFloat(tooltipGroup_1.getAttribute('opacity'));\n opacity_1 = !isNullOrUndefined(opacity_1) ? opacity_1 : 1;\n new Animation({}).animate(tooltipGroup_1, {\n duration: 200,\n progress: function (args) {\n // tooltipGroup.removeAttribute('e-animate');\n _this.progressAnimation(tooltipGroup_1, opacity_1, (args.timeStamp / args.duration));\n },\n end: function () {\n _this.fadeOuted = true;\n _this.endAnimation(tooltipGroup_1);\n tooltipDiv.style.transition = '';\n }\n });\n }\n };\n Tooltip.prototype.progressAnimation = function (tooltipGroup, opacity, timeStamp) {\n tooltipGroup.style.animation = '';\n tooltipGroup.setAttribute('opacity', (opacity - timeStamp).toString());\n };\n /*\n * @hidden\n */\n Tooltip.prototype.endAnimation = function (tooltipGroup) {\n tooltipGroup.setAttribute('opacity', '0');\n if (this.template) {\n tooltipGroup.style.display = 'none';\n }\n this.trigger('animationComplete', { tooltip: this });\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n var keyEntity = [];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n *\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * To destroy the accumulationcharts\n *\n * @private\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-tooltip');\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @returns {void}\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.blazorTemplate) {\n resetBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate');\n }\n this.isFirst = false;\n this.render();\n };\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"shared\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"crosshair\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableShadow\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], Tooltip.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ size: '12px', fontWeight: '400', color: null, fontStyle: 'Normal', fontFamily: null }, TextStyle)\n ], Tooltip.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(300)\n ], Tooltip.prototype, \"duration\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"inverted\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isNegative\", void 0);\n __decorate([\n Complex({ color: null, width: null }, TooltipBorder)\n ], Tooltip.prototype, \"border\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property(10)\n ], Tooltip.prototype, \"markerSize\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"clipBounds\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"palette\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"shapes\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"location\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offset\", void 0);\n __decorate([\n Property(4)\n ], Tooltip.prototype, \"rx\", void 0);\n __decorate([\n Property(4)\n ], Tooltip.prototype, \"ry\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginX\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginY\", void 0);\n __decorate([\n Property(7)\n ], Tooltip.prototype, \"arrowPadding\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"data\", void 0);\n __decorate([\n Property('Material')\n ], Tooltip.prototype, \"theme\", void 0);\n __decorate([\n Complex({ x: 0, y: 0, width: 0, height: 0 }, AreaBounds)\n ], Tooltip.prototype, \"areaBounds\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"availableSize\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"blazorTemplate\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isCanvas\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isTextWrap\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"tooltipPlacement\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"controlInstance\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"controlName\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"animationComplete\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableRTL\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"allowHighlight\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","import { createElement, isNullOrUndefined, isObject, remove } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constants';\nimport { isScheduledTask } from '../base/utils';\nimport { SvgRenderer } from '@syncfusion/ej2-svg-base';\n/**\n * To render the connector line in Gantt\n */\nvar ConnectorLine = /** @class */ (function () {\n function ConnectorLine(ganttObj) {\n this.transform = '';\n this.connectorLinePath = '';\n this.arrowPath = '';\n this.expandedRecords = [];\n this.parent = ganttObj;\n this.dependencyViewContainer =\n createElement('div', { className: cls.dependencyViewContainer,\n });\n Object.assign(this.dependencyViewContainer.style, {\n width: \"100%\",\n height: \"100%\",\n zIndex: 2,\n position: \"absolute\",\n pointerEvents: \"none\"\n });\n this.renderer = new SvgRenderer(this.parent.element.id);\n this.initPublicProp();\n this.svgObject = this.renderer.createSvg({\n id: this.parent.element.id + '_svg'\n });\n this.svgObject.setAttribute('height', '100%');\n this.svgObject.setAttribute('width', '100%');\n }\n /**\n * To get connector line gap.\n *\n * @param {IConnectorLineObject} data .\n * @returns {number} .\n * @private\n */\n ConnectorLine.prototype.getconnectorLineGap = function (data) {\n var width = 0;\n width = (data.milestoneChild ?\n ((this.parent.chartRowsModule.milestoneMarginTop / 2) + (this.parent.chartRowsModule.milestoneHeight / 2)) :\n ((this.parent.chartRowsModule.taskBarMarginTop / 2) + (this.parent.chartRowsModule.taskBarHeight / 2)));\n return width;\n };\n /**\n * To initialize the public property.\n *\n * @returns {void}\n * @private\n */\n ConnectorLine.prototype.initPublicProp = function () {\n this.lineColor = this.parent.connectorLineBackground;\n this.lineStroke = (this.parent.connectorLineWidth) > 4 ? 4 : this.parent.connectorLineWidth;\n this.createConnectorLineTooltipTable();\n };\n ConnectorLine.prototype.getTaskbarMidpoint = function (isMilestone) {\n return Math.floor(isMilestone ?\n (this.parent.chartRowsModule.milestoneMarginTop + (this.parent.chartRowsModule.milestoneHeight / 2)) + 1 :\n (this.parent.chartRowsModule.taskBarMarginTop + (this.parent.chartRowsModule.taskBarHeight / 2))) + 1;\n };\n /**\n * To connector line object collection.\n *\n * @param {IGanttData} parentGanttData .\n * @param {IGanttData} childGanttData .\n * @param {IPredecessor} predecessor .\n * @returns {void}\n * @private\n */\n ConnectorLine.prototype.createConnectorLineObject = function (parentGanttData, childGanttData, predecessor) {\n var connectorObj = {};\n var updatedRecords = this.parent.pdfExportModule && this.parent.pdfExportModule.isPdfExport ?\n this.parent.flatData : this.expandedRecords;\n var parentIndex = updatedRecords.indexOf(parentGanttData);\n var childIndex = updatedRecords.indexOf(childGanttData);\n var parentGanttRecord = parentGanttData.ganttProperties;\n var childGanttRecord = childGanttData.ganttProperties;\n var currentData = this.parent.virtualScrollModule && this.parent.enableVirtualization ?\n this.parent.currentViewData : this.parent.getExpandedRecords(this.parent.currentViewData);\n connectorObj.parentIndexInCurrentView = currentData.indexOf(parentGanttData);\n connectorObj.childIndexInCurrentView = currentData.indexOf(childGanttData);\n var isVirtualScroll = this.parent.virtualScrollModule && this.parent.enableVirtualization;\n if ((!isVirtualScroll && (connectorObj.parentIndexInCurrentView === -1 || connectorObj.childIndexInCurrentView === -1)) ||\n connectorObj.parentIndexInCurrentView === -1 && connectorObj.childIndexInCurrentView === -1) {\n return null;\n }\n else {\n connectorObj.parentLeft = parentGanttRecord.isMilestone ?\n parentGanttRecord.left - (this.parent.chartRowsModule.milestoneHeight / 2) : parentGanttRecord.left;\n connectorObj.childLeft = childGanttRecord.isMilestone ?\n childGanttRecord.left - (this.parent.chartRowsModule.milestoneHeight / 2) : childGanttRecord.left;\n connectorObj.parentWidth = parentGanttRecord.width === 0 || parentGanttRecord.isMilestone ?\n (Math.floor(this.parent.chartRowsModule.milestoneHeight)) : parentGanttRecord.width;\n connectorObj.childWidth = childGanttRecord.width === 0 || childGanttRecord.isMilestone ?\n (Math.floor(this.parent.chartRowsModule.milestoneHeight)) : childGanttRecord.width;\n connectorObj.parentIndex = parentIndex;\n connectorObj.childIndex = childIndex;\n var rowHeight = !isNullOrUndefined(this.parent.ganttChartModule.getChartRows()) && this.parent.ganttChartModule.getChartRows()[0] &&\n this.parent.ganttChartModule.getChartRows()[0].getBoundingClientRect().height;\n connectorObj.rowHeight = rowHeight && !isNaN(rowHeight) ? rowHeight : this.parent.rowHeight;\n connectorObj.type = predecessor.type;\n var parentId = this.parent.viewType === 'ResourceView' ? parentGanttRecord.taskId : parentGanttRecord.rowUniqueID;\n var childId = this.parent.viewType === 'ResourceView' ? childGanttRecord.taskId : childGanttRecord.rowUniqueID;\n connectorObj.connectorLineId = 'parent' + parentId + 'child' + childId;\n connectorObj.milestoneParent = parentGanttRecord.isMilestone ? true : false;\n connectorObj.milestoneChild = childGanttRecord.isMilestone ? true : false;\n connectorObj.parentEndPoint = connectorObj.parentLeft + connectorObj.parentWidth;\n connectorObj.childEndPoint = connectorObj.childLeft + connectorObj.childWidth;\n if (isNullOrUndefined(isScheduledTask(parentGanttRecord)) || isNullOrUndefined(isScheduledTask(childGanttRecord))) {\n return null;\n }\n else {\n return connectorObj;\n }\n }\n };\n /**\n * To render connector line.\n *\n * @param {IConnectorLineObject} connectorLinesCollection .\n * @returns {void}\n * @private\n */\n ConnectorLine.prototype.renderConnectorLines = function (connectorLinesCollection) {\n var connectorLine = '';\n var ariaConnector = [];\n for (var index = 0; index < connectorLinesCollection.length; index++) {\n connectorLine = connectorLine + this.getConnectorLineTemplate(connectorLinesCollection[index]);\n ariaConnector.push(connectorLinesCollection[index]);\n }\n this.svgObject.innerHTML = connectorLine;\n var childNodes = this.parent.connectorLineModule.svgObject.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var innerChild = childNodes[i].childNodes;\n for (var j = 0; j < innerChild.length; j++) {\n var ariaString = 'Connector Line ' + this.parent.connectorLineModule.generateAriaLabel(ariaConnector[i]);\n innerChild[j].setAttribute('aria-label', ariaString);\n }\n }\n this.parent.ganttChartModule.chartBodyContent.insertBefore(this.dependencyViewContainer, this.parent.ganttChartModule.chartBodyContent.lastChild);\n this.dependencyViewContainer.appendChild(this.svgObject);\n for (var i = 0; i < this.svgObject.children.length; i++) {\n this.svgObject.children[i].children[0].setAttribute('tabindex', '-1');\n }\n };\n /**\n * To get parent position.\n *\n * @param {IConnectorLineObject} data .\n * @returns {void}\n * @private\n */\n ConnectorLine.prototype.getParentPosition = function (data) {\n if (data.parentIndex < data.childIndex) {\n if (data.type === 'FF') {\n if ((data.childLeft + data.childWidth) >= (data.parentLeft + data.parentWidth)) {\n return 'FFType2';\n }\n else {\n return 'FFType1';\n }\n }\n else if ((data.parentLeft < data.childLeft) && (data.childLeft > (data.parentLeft + data.parentWidth + 25))) {\n if (data.type === 'FS') {\n return 'FSType1';\n }\n if (data.type === 'SF') {\n return 'SFType1';\n }\n else if (data.type === 'SS') {\n return 'SSType2';\n }\n else if (data.type === 'FF') {\n return 'FFType2';\n }\n }\n else if ((data.parentLeft < data.childLeft && (data.childLeft < (data.parentLeft + data.parentWidth)))\n || (data.parentLeft === data.childLeft || data.parentLeft > data.childLeft)) {\n if (data.parentLeft > (data.childLeft + data.childWidth + 25)) {\n if (data.type === 'SF') {\n return 'SFType2';\n }\n }\n if (data.parentLeft > data.childLeft) {\n if (data.type === 'SS') {\n return 'SSType1';\n }\n if (data.type === 'SF') {\n return 'SFType1';\n }\n if (data.type === 'FF') {\n return 'FFType1';\n }\n }\n else if ((data.childLeft + data.childWidth) > (data.parentLeft + data.parentWidth)) {\n if (data.type === 'FF') {\n return 'FFType2';\n }\n }\n if (data.type === 'FS') {\n return 'FSType2';\n }\n else if (data.type === 'SS') {\n return 'SSType2';\n }\n else if (data.type === 'FF') {\n return 'FFType1';\n }\n else if (data.type === 'SF') {\n return 'SFType1';\n }\n }\n else if ((data.parentLeft) < data.childLeft) {\n if (data.type === 'FS') {\n return 'FSType2';\n }\n else if (data.type === 'FF') {\n return 'FFType2';\n }\n else if (data.type === 'SS') {\n return 'SSType2';\n }\n else if (data.type === 'SF') {\n return 'SFType1';\n }\n }\n }\n else if (data.parentIndex > data.childIndex) {\n if ((data.parentLeft < data.childLeft) && (data.childLeft > (data.parentLeft + data.parentWidth))) {\n if (data.type === 'FS') {\n if (30 >= (data.childLeft - (data.milestoneParent ?\n (data.parentLeft + data.parentWidth + 4) : (data.parentLeft + data.parentWidth)))) {\n return 'FSType3';\n }\n else {\n return 'FSType4';\n }\n }\n if (data.parentLeft < data.childLeft || ((data.childLeft + data.childWidth) > (data.parentLeft + data.parentWidth))) {\n if (data.type === 'SS') {\n return 'SSType4';\n }\n if (data.type === 'FF') {\n return 'FFType4';\n }\n if (data.type === 'SF') {\n return 'SFType4';\n }\n // eslint-disable-next-line\n }\n else if ((data.childLeft + data.childWidth) > (data.parentLeft + data.parentWidth)) {\n if (data.type === 'FF') {\n return 'FFType4';\n }\n }\n }\n else if ((data.parentLeft < data.childLeft && (data.childLeft < (data.parentLeft + data.parentWidth)))\n || (data.parentLeft === data.childLeft || data.parentLeft > data.childLeft)) {\n if ((data.childLeft + data.childWidth) <= (data.parentLeft + data.parentWidth)) {\n if (data.type === 'FF') {\n return 'FFType3';\n }\n if (data.type === 'SF') {\n if ((data.childLeft + data.childWidth + 25) < (data.parentLeft)) {\n return 'SFType3';\n }\n else {\n return 'SFType4';\n }\n }\n if (data.type === 'SS') {\n if (data.childLeft <= data.parentLeft) {\n return 'SSType3';\n }\n else {\n return 'SSType4';\n }\n }\n }\n else if ((data.childLeft + data.childWidth) > (data.parentLeft + data.parentWidth)) {\n if (data.type === 'FF') {\n return 'FFType4';\n }\n if (data.type === 'SF') {\n return 'SFType4';\n }\n if (data.type === 'SS') {\n if (data.childLeft <= data.parentLeft) {\n return 'SSType3';\n }\n else {\n return 'SSType4';\n }\n }\n }\n if (data.type === 'FS') {\n return 'FSType3';\n }\n }\n else if (data.parentLeft < data.childLeft) {\n if (data.type === 'FS') {\n return 'FSType3';\n }\n if (data.type === 'SS') {\n return 'SSType4';\n }\n if (data.type === 'FF') {\n return 'FFType4';\n }\n if (data.type === 'SF') {\n return 'SFType4';\n }\n }\n }\n return null;\n };\n /**\n * To get line height.\n *\n * @param {IConnectorLineObject} data .\n * @returns {void}\n * @private\n */\n ConnectorLine.prototype.getHeightValue = function (data) {\n if (this.parent.viewType === 'ResourceView' && this.parent.showOverAllocation && !this.parent.allowTaskbarOverlap) {\n return (data.parentIndex * this.parent.rowHeight) > (data.childIndex * this.parent.rowHeight) ?\n ((data.parentIndex * this.parent.rowHeight) - (data.childIndex * this.parent.rowHeight)) :\n ((data.childIndex * this.parent.rowHeight) - (data.parentIndex * this.parent.rowHeight));\n }\n else {\n return (data.parentIndex * data.rowHeight) > (data.childIndex * data.rowHeight) ?\n ((data.parentIndex * data.rowHeight) - (data.childIndex * data.rowHeight)) :\n ((data.childIndex * data.rowHeight) - (data.parentIndex * data.rowHeight));\n }\n };\n /**\n * To get sstype2 inner element width.\n *\n * @param {IConnectorLineObject} data .\n * @returns {void}\n * @private\n */\n ConnectorLine.prototype.getInnerElementWidthSSType2 = function (data) {\n if (data.parentLeft === data.childLeft) {\n return 10;\n }\n return (data.childLeft - data.parentLeft);\n };\n /**\n * To get sstype2 inner element left.\n *\n * @param {IConnectorLineObject} data .\n * @returns {void}\n * @private\n */\n ConnectorLine.prototype.getInnerElementLeftSSType2 = function (data) {\n if (data.parentLeft === data.childLeft) {\n return (data.parentLeft - 20);\n }\n return (data.parentLeft - 10);\n };\n /**\n * To get sstype2 inner child element width.\n *\n * @param {IConnectorLineObject} data .\n * @returns {void}\n * @private\n */\n ConnectorLine.prototype.getInnerChildWidthSSType2 = function (data) {\n if ((data.parentLeft + data.parentWidth) < data.childLeft) {\n return 10;\n }\n if (data.parentLeft === data.childLeft) {\n return 20;\n }\n if ((data.parentLeft + data.parentWidth) >= data.childLeft) {\n return 10;\n }\n return (data.childLeft - data.parentLeft);\n };\n ConnectorLine.prototype.getBorderStyles = function (cssType, unit) {\n var borderWidth = 'border-' + cssType + '-width:' + unit + 'px;';\n var borderStyle = 'border-' + cssType + '-style:solid;';\n var borderColor = !isNullOrUndefined(this.lineColor) ? 'border-' + cssType + '-color:' + this.lineColor + ';' : '';\n return (borderWidth + borderStyle + borderColor);\n };\n /**\n * To get connector line template.\n *\n * @param {IConnectorLineObject} data .\n * @returns {void}\n * @private\n */\n ConnectorLine.prototype.getConnectorLineTemplate = function (data) {\n var setInnerChildWidthSSType2 = this.getInnerChildWidthSSType2(data);\n var setInnerElementWidthSSType2 = this.getInnerElementWidthSSType2(data);\n var setInnerElementLeftSSType2 = this.getInnerElementLeftSSType2(data);\n var height = this.getHeightValue(data);\n var isMilestoneParent = data.milestoneParent ? true : false;\n var isMilestone = data.milestoneChild ? true : false;\n var connectorContainer = '';\n var isVirtual = this.parent.virtualScrollModule && this.parent.enableVirtualization;\n var connectorLine = this.getPosition(data, this.getParentPosition(data), height);\n var rowPosition = this.getPosition(data, this.getParentPosition(data), height);\n var rowPositionHeight = rowPosition.top;\n var isMilestoneValue = 0;\n if (this.parent.renderBaseline) {\n isMilestoneValue = (data.milestoneParent && data.milestoneChild) ? 0 : data.milestoneParent ? -5 : data.milestoneChild ? 5 : 0;\n }\n var heightValue = isVirtual ? connectorLine.height : (height + isMilestoneValue);\n var borderTopWidth = 0;\n var addTop = 0;\n var parentOverlapTopValue = 0;\n var childOverlapTopValue = 0;\n var count = 0;\n if (this.parent.viewType === 'ResourceView' && this.parent.showOverAllocation && !this.parent.allowTaskbarOverlap) {\n for (var i = 0; i < this.parent.currentViewData.length; i++) {\n if (this.parent.getRowByIndex(i).style.display != 'none') {\n if (count < data.parentIndex) {\n count++;\n parentOverlapTopValue = parentOverlapTopValue + this.parent.getRowByIndex(i).offsetHeight;\n }\n }\n }\n count = 0;\n for (var j = 0; j < this.parent.currentViewData.length; j++) {\n if (this.parent.getRowByIndex(j).style.display != 'none') {\n if (count < data.childIndex) {\n count++;\n childOverlapTopValue = childOverlapTopValue + this.parent.getRowByIndex(j).offsetHeight;\n }\n }\n }\n heightValue = Math.abs(parentOverlapTopValue - childOverlapTopValue);\n }\n if (this.parent.currentViewData[data.parentIndex] && this.parent.currentViewData[data.childIndex] && this.parent.allowParentDependency) {\n var fromRecordIsParent = this.parent.currentViewData[data.parentIndex].hasChildRecords;\n var toRecordIsParent = this.parent.currentViewData[data.childIndex].hasChildRecords;\n var fromRecordIsManual = this.parent.currentViewData[data.parentIndex].ganttProperties.isAutoSchedule;\n var toRecordIsManual = this.parent.currentViewData[data.childIndex].ganttProperties.isAutoSchedule;\n var isValid = true;\n if (((fromRecordIsParent && fromRecordIsManual) && !toRecordIsParent) || ((toRecordIsParent && toRecordIsManual) &&\n !fromRecordIsParent) || (fromRecordIsParent && fromRecordIsManual && toRecordIsManual && toRecordIsParent)\n || (!fromRecordIsParent && !toRecordIsParent)) {\n isValid = false;\n }\n if (isValid) {\n if (((fromRecordIsParent && !fromRecordIsManual) && (toRecordIsParent && !toRecordIsManual))) {\n addTop = -11;\n }\n else if (!((fromRecordIsParent && !fromRecordIsManual) && (toRecordIsParent && !toRecordIsManual))) {\n if (data.childIndex > data.parentIndex) {\n if (!fromRecordIsParent && toRecordIsParent) {\n borderTopWidth = -11;\n }\n else {\n borderTopWidth = 11;\n addTop = -11;\n }\n }\n else {\n if ((fromRecordIsParent && !toRecordIsParent)) {\n borderTopWidth = -11;\n }\n else {\n borderTopWidth = 11;\n addTop = -11;\n }\n }\n }\n if (this.parent.currentViewData[data.parentIndex].ganttProperties.isMilestone) {\n if (data.parentIndex > data.childIndex) {\n addTop = -11;\n borderTopWidth = 12;\n }\n else if (data.type === 'SS' || data.type === 'FF') {\n addTop = -5;\n }\n }\n else if (this.parent.currentViewData[data.childIndex].ganttProperties.isMilestone) {\n if (data.parentIndex > data.childIndex) {\n addTop = 5;\n borderTopWidth = -10;\n }\n else if (data.parentIndex < data.childIndex) {\n if (data.type === 'SS' || data.type === 'FF') {\n addTop = -10;\n }\n }\n }\n else {\n if (data.parentIndex < data.childIndex && fromRecordIsManual && !toRecordIsManual) {\n addTop = 0;\n borderTopWidth = -11;\n }\n else if (data.childIndex < data.parentIndex && !fromRecordIsManual && toRecordIsManual) {\n addTop = 0;\n borderTopWidth = -11;\n }\n }\n }\n }\n if (this.getParentPosition(data)) {\n // Create the group element\n this.transform = this.parent.enableRtl ? \"translate(\" + this.parent.timelineModule.totalTimelineWidth + \", 0) scale(-1, 1)\" : '';\n this.connectorId = \"ConnectorLine\" + data.connectorLineId;\n this.groupObject = this.renderer.createGroup({\n id: this.connectorId,\n transform: this.transform,\n style: 'pointer-events: stroke',\n class: cls.connectorLineContainer,\n });\n // Create the path element for the connector line\n this.connectorPath = this.renderer.drawPath({\n class: cls.connectorLineSVG,\n d: this.connectorLinePath,\n fill: 'transparent',\n \"stroke-width\": 1,\n });\n // Create the path element for the arrow\n this.arrowlinePath = this.renderer.drawPath({\n d: this.arrowPath,\n class: cls.connectorLineArrow\n });\n // Append the path element to the group element\n this.groupObject.appendChild(this.connectorPath);\n this.groupObject.appendChild(this.arrowlinePath);\n if (this.getParentPosition(data) === 'FSType1') {\n this.taskLineValue = data.milestoneChild ? 1 : 0;\n this.x1 = data.parentEndPoint + (data.milestoneParent ? -1 : (data.milestoneChild ? -1 : 0));\n this.x2 = data.milestoneParent ? ((((data.childLeft - (data.parentLeft + data.parentWidth + 10)) + this.lineStroke) - 10) + 1) : (((data.childLeft - (data.parentLeft + data.parentWidth + 10)) + this.lineStroke) - 10);\n this.y1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? parentOverlapTopValue : (data.parentIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue));\n this.y2 = heightValue + this.taskLineValue + borderTopWidth - this.lineStroke;\n this.connectorLinePath = \"M \" + this.x1 + \" \" + (this.y1) + \" L \" + (this.x1 + this.x2) + \" \" + (this.y1) + \" L \" + (this.x1 + this.x2) + \" \" + (this.y1 + this.y2) +\n \" L \" + (this.x1 + this.x2 + 12) + \" \" + (this.y1 + this.y2);\n this.arrowPath = \"M \" + (this.x1 + this.x2 + 20) + \" \" + (this.y1 + this.y2) +\n \" L \" + (this.x1 + this.x2 + 12) + \" \" + (this.y1 + this.y2 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + this.x2 + 12) + \" \" + (this.y1 + this.y2 + 4) + \" Z\";\n }\n if (this.getParentPosition(data) === 'FSType2') {\n this.x1 = data.parentLeft;\n this.x2 = data.parentWidth + (data.milestoneParent ? -1 : 0);\n this.x3 = this.x2 + (data.milestoneParent ? 11 : 10);\n this.x4 = data.parentWidth - ((data.parentEndPoint - data.childLeft) + 20);\n this.y1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? parentOverlapTopValue : (data.parentIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue));\n this.y2 = heightValue + borderTopWidth - this.getconnectorLineGap(data) - this.lineStroke;\n this.y3 = this.getconnectorLineGap(data);\n this.y4 = (!this.parent.allowTaskbarOverlap ? childOverlapTopValue : (this.y1 + this.y2 - ((this.y1 + this.y2) % data.rowHeight)));\n this.connectorLinePath = \"M \" + (this.x1 + this.x2) + \" \" + (this.y1) + \" \" + \" L \" + (this.x1 + this.x3) + \" \" + (this.y1) + \" L \" + (this.x1 + this.x3) + \" \" + this.y4 +\n \" L \" + (this.x1 + this.x4) + \" \" + this.y4 + \" L \" + (this.x1 + this.x4) + \" \" + (this.y1 + this.y2 + this.y3) + \" L \" + (this.x1 + this.x4 + 12) + \" \" + (this.y1 + this.y2 + this.y3);\n this.arrowPath = \"M \" + (this.x1 + this.x4 + 20) + \" \" + (this.y1 + this.y2 + this.y3) +\n \" L \" + (this.x1 + this.x4 + 12) + \" \" + (this.y1 + this.y2 + this.y3 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + this.x4 + 12) + \" \" + (this.y1 + this.y2 + this.y3 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'FSType3') {\n this.taskLineValue = data.milestoneChild ? 1 : 0;\n this.point1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? childOverlapTopValue : (data.childIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue));\n this.x1 = (data.childLeft + (data.milestoneChild ? -1 : 0) + (data.milestoneParent ? 1 : 0)) - 20;\n this.x2 = (data.parentEndPoint - data.childLeft) + 30;\n this.y1 = this.point1 + (this.parent.renderBaseline ? (data.milestoneChild && !(data.milestoneParent) ? 11 : data.milestoneParent && !(data.milestoneChild) ? -12 : 0) : 0);\n this.y2 = this.point1 + heightValue + borderTopWidth - this.getconnectorLineGap(data) - this.lineStroke + this.taskLineValue;\n this.y3 = this.getconnectorLineGap(data);\n this.y4 = this.y2 - (this.y2 % data.rowHeight);\n this.connectorLinePath = \"M \" + (this.x1 + 12) + \" \" + (this.y1) + \" L \" + this.x1 + \" \" + (this.y1) + \" L \" + this.x1 + \" \" + this.y4 +\n \" L \" + (this.x1 + this.x2) + \" \" + this.y4 + \" L \" + (this.x1 + this.x2) + \" \" + (this.y2 + this.y3) + \" L \" + (this.x1 + this.x2 - 12) + \" \" + (this.y2 + this.y3);\n this.arrowPath = \"M \" + (this.x1 + 20) + \" \" + (this.y1) +\n \" L \" + (this.x1 + 12) + \" \" + (this.y1 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + 12) + \" \" + (this.y1 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'FSType4') {\n this.point1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? childOverlapTopValue : (data.childIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1)));\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : 0;\n this.x1 = data.parentEndPoint + (data.milestoneChild ? -1 : 0) + (data.milestoneParent ? 1 : 0);\n this.x2 = data.childLeft - data.parentEndPoint - 20;\n this.y1 = this.point1 + (data.milestoneChild ? -1 : 0);\n this.y2 = this.point1 + heightValue + borderTopWidth - this.lineStroke + 1 + this.taskLineValue + (this.parent.renderBaseline ? (data.milestoneChild && !(data.milestoneParent) ? -12 : data.milestoneParent && !(data.milestoneChild) ? 11 : 0) : 0);\n this.connectorLinePath = \"M \" + (this.x1 + this.x2 + 12) + \" \" + (this.y1) + \" L \" + (this.x1 + this.x2) + \" \" + (this.y1) + \" L \" + (this.x1 + this.x2) + \" \" + this.y2 +\n \" L \" + this.x1 + \" \" + this.y2;\n this.arrowPath = \"M \" + (this.x1 + this.x2 + 20) + \" \" + (this.y1) +\n \" L \" + (this.x1 + this.x2 + 12) + \" \" + (this.y1 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + this.x2 + 12) + \" \" + (this.y1 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'SSType4') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : 0;\n this.point1 = heightValue + this.taskLineValue + borderTopWidth;\n this.point2 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? childOverlapTopValue : (data.childIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1)));\n this.x1 = data.parentLeft - 10;\n this.x2 = data.childLeft - data.parentLeft;\n this.y1 = this.point2 + (data.milestoneChild ? 1 : 0);\n this.y2 = this.y1 + this.point1 + (this.parent.renderBaseline ? (data.milestoneParent && !(data.milestoneChild) ? 10 : data.milestoneChild && !(data.milestoneParent) ? -13 : 0) : 0);\n this.connectorLinePath = \"M \" + (this.x1 + this.x2) + \" \" + (this.y1) + \" L \" + this.x1 + \" \" + (this.y1) +\n \" L \" + this.x1 + \" \" + this.y2 + \" L \" + (this.x1 + 10) + \" \" + this.y2;\n this.arrowPath = \"M \" + (this.x1 + this.x2 + 8) + \" \" + (this.y1) +\n \" L \" + (this.x1 + this.x2) + \" \" + (this.y1 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + this.x2) + \" \" + (this.y1 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'SSType3') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : data.milestoneChild ? 1 : 0;\n this.point1 = heightValue + this.taskLineValue + borderTopWidth - (this.lineStroke - 1);\n this.x1 = data.childLeft - 20;\n this.y1 = (data.milestoneChild ? 1 : 0) + (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? childOverlapTopValue : (data.childIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1)));\n this.x2 = data.parentLeft - data.childLeft + 21;\n this.y2 = this.y1 + this.point1 + (this.parent.renderBaseline ? (data.milestoneChild && !(data.milestoneParent) ? -11 : data.milestoneParent && !(data.milestoneChild) ? 10 : 0) : 0);\n this.connectorLinePath = \"M \" + (this.x1 + 12) + \" \" + (this.y1) + \" L \" + this.x1 + \" \" + (this.y1) +\n \" L \" + this.x1 + \" \" + this.y2 + \" L \" + (this.x1 + this.x2) + \" \" + this.y2;\n this.arrowPath = \"M \" + (this.x1 + 20) + \" \" + (this.y1) +\n \" L \" + (this.x1 + 12) + \" \" + (this.y1 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + 12) + \" \" + (this.y1 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'SSType2') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : data.milestoneChild ? 1 : 0;\n this.point1 = heightValue + this.taskLineValue + borderTopWidth - this.lineStroke;\n this.x1 = setInnerElementLeftSSType2;\n this.x2 = setInnerChildWidthSSType2 + 1;\n this.y1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? parentOverlapTopValue : (data.parentIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1)));\n this.y2 = this.y1 + this.point1;\n this.connectorLinePath = \"M \" + (this.x1 + this.x2) + \" \" + (this.y1) + \" L \" + this.x1 + \" \" + (this.y1) + \" L \" + this.x1 + \" \" + this.y2 +\n \" L \" + (this.x1 + setInnerElementWidthSSType2) + \" \" + this.y2;\n this.arrowPath = \"M \" + (this.x1 + setInnerElementWidthSSType2 + 8) + \" \" + (this.y2) +\n \" L \" + (this.x1 + setInnerElementWidthSSType2) + \" \" + (this.y2 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + setInnerElementWidthSSType2) + \" \" + (this.y2 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'SSType1') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : data.milestoneChild ? 1 : 0;\n this.point1 = heightValue + this.taskLineValue + borderTopWidth - this.lineStroke;\n this.x1 = data.childLeft - 20;\n this.x2 = data.parentLeft - data.childLeft + 21;\n this.y1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? parentOverlapTopValue : (data.parentIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1)));\n this.y2 = this.y1 + this.point1;\n this.connectorLinePath = \"M \" + (this.x1 + this.x2) + \" \" + (this.y1) + \" L \" + this.x1 + \" \" + (this.y1) + \" L \" + this.x1 + \" \" + this.y2 +\n \" L \" + (this.x1 + 12) + \" \" + this.y2;\n this.arrowPath = \"M \" + (this.x1 + 20) + \" \" + (this.y2) +\n \" L \" + (this.x1 + 12) + \" \" + (this.y2 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + 12) + \" \" + (this.y2 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'FFType1') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : (data.milestoneChild ? 1 : 0);\n this.x1 = data.childEndPoint;\n this.x2 = data.parentEndPoint + (data.milestoneParent ? -1 : 0);\n this.x3 = data.milestoneParent ? 22 : 21;\n this.x4 = data.milestoneChild ? 4 : 8;\n this.y1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? parentOverlapTopValue : (data.parentIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1)));\n this.y2 = heightValue + this.taskLineValue + borderTopWidth - this.lineStroke;\n this.connectorLinePath = \"M \" + this.x2 + \" \" + (this.y1) + \" L \" + (this.x2 + this.x3) + \" \" + (this.y1) + \" L \" + (this.x2 + this.x3) + \" \" + (this.y1 + this.y2) +\n \" L \" + (this.x1 + this.x4) + \" \" + (this.y1 + this.y2);\n this.arrowPath = \"M \" + this.x1 + \" \" + (this.y1 + this.y2) +\n \" L \" + (this.x1 + 8) + \" \" + (this.y1 + this.y2 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + 8) + \" \" + (this.y1 + this.y2 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'FFType2') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : (data.milestoneChild ? 1 : 0);\n this.x1 = data.parentEndPoint;\n this.x2 = data.childEndPoint + (data.milestoneParent ? 22 : 21);\n this.x3 = data.childEndPoint + (data.milestoneChild ? 9 : 8);\n this.y1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? parentOverlapTopValue : (data.parentIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(data.milestoneParent) - (this.lineStroke - 1)));\n this.y2 = heightValue + this.taskLineValue + borderTopWidth - this.lineStroke;\n this.connectorLinePath = \"M \" + this.x1 + \" \" + (this.y1) + \" L \" + this.x2 + \" \" + (this.y1) + \" L \" + this.x2 + \" \" + (this.y1 + this.y2) +\n \" L \" + this.x3 + \" \" + (this.y1 + this.y2);\n this.arrowPath = \"M \" + (this.x3 - 8) + \" \" + (this.y1 + this.y2) +\n \" L \" + this.x3 + \" \" + (this.y1 + this.y2 - (4 + this.lineStroke)) +\n \" L \" + this.x3 + \" \" + (this.y1 + this.y2 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'FFType3') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : 0;\n this.x1 = data.childEndPoint;\n this.x2 = this.x1 + (data.milestoneChild ? 4 : 8);\n this.x3 = data.parentEndPoint - data.childEndPoint + (data.milestoneChild ? 16 : 10);\n this.x4 = data.parentEndPoint + (data.milestoneParent ? -1 : 0);\n this.y1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? childOverlapTopValue : (data.childIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1)));\n this.y2 = heightValue + this.taskLineValue + borderTopWidth - this.lineStroke + (this.parent.renderBaseline ? (data.milestoneParent && !(data.milestoneChild) ? 10 : data.milestoneChild && !(data.milestoneParent) ? -11 : 0) : 0);\n this.connectorLinePath = \"M \" + this.x2 + \" \" + (this.y1) + \" L \" + (this.x2 + this.x3) + \" \" + (this.y1) + \" L \" + (this.x2 + this.x3) + \" \" + (this.y1 + this.y2) +\n \" L \" + this.x4 + \" \" + (this.y1 + this.y2);\n this.arrowPath = \"M \" + this.x1 + \" \" + (this.y1) +\n \" L \" + (this.x1 + 8) + \" \" + (this.y1 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + 8) + \" \" + (this.y1 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'FFType4') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : 0;\n this.x1 = data.parentEndPoint;\n this.x2 = data.childEndPoint + (data.milestoneChild ? 7 : 8);\n this.x3 = this.x2 + (data.milestoneChild ? 12 : 11);\n this.y1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? childOverlapTopValue : (data.childIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1)));\n this.y2 = heightValue + this.taskLineValue + borderTopWidth + (this.parent.renderBaseline ? (data.milestoneParent && !(data.milestoneChild) ? 10 : data.milestoneChild && !(data.milestoneParent) ? -12 : 0) : 0) - this.lineStroke + 1;\n this.connectorLinePath = \"M \" + this.x2 + \" \" + (this.y1) + \" L \" + this.x3 + \" \" + (this.y1) + \" L \" + this.x3 + \" \" + (this.y1 + this.y2) +\n \" L \" + this.x1 + \" \" + (this.y1 + this.y2);\n this.arrowPath = \"M \" + (this.x2 - 8) + \" \" + (this.y1) +\n \" L \" + this.x2 + \" \" + (this.y1 - (4 + this.lineStroke)) +\n \" L \" + this.x2 + \" \" + (this.y1 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'SFType4') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : (data.milestoneChild ? -1 : 0);\n this.point1 = (this.taskLineValue + heightValue + borderTopWidth - this.getconnectorLineGap(data) - (this.lineStroke - 1));\n this.point2 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? childOverlapTopValue : (data.childIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue));\n this.x1 = data.parentLeft - 10;\n this.x2 = this.x1 + ((data.childEndPoint - data.parentLeft) + 18);\n this.x3 = this.x2 + (data.milestoneChild ? 16 : 11);\n this.y1 = this.point2 + (data.milestoneChild ? 2 : 0) + (this.parent.renderBaseline ? (data.milestoneParent ? -5 : 0) : 0);\n this.y2 = this.y1 + this.point1 + (this.parent.renderBaseline ? (data.milestoneChild && !(data.milestoneParent) ? -9 : data.milestoneParent && !(data.milestoneChild) ? 9 : 0) : 0);\n this.y3 = this.getconnectorLineGap(data);\n this.y4 = this.y2 - (this.y2 % data.rowHeight);\n this.connectorLinePath = \"M \" + this.x2 + \" \" + (this.y1) + \" L \" + this.x3 + \" \" + (this.y1) + \" L \" + this.x3 + \" \" + this.y4 + \" L \" + this.x1 + \" \" + this.y4 +\n \" L \" + this.x1 + \" \" + (this.y2 + this.y3) + \" L \" + (this.x1 + 11) + \" \" + (this.y2 + this.y3);\n this.arrowPath = \"M \" + (this.x2 - 8) + \" \" + (this.y1) +\n \" L \" + this.x2 + \" \" + (this.y1 - (4 + this.lineStroke)) +\n \" L \" + this.x2 + \" \" + (this.y1 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'SFType3') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : 0;\n this.point1 = (data.parentLeft - (data.childEndPoint + (data.milestoneParent ? 23 : 20))) + 1;\n this.point2 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? childOverlapTopValue : (data.childIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1)));\n this.x1 = data.childEndPoint;\n this.x2 = this.x1 + (data.milestoneChild ? 9 : 8);\n this.x3 = this.x2 + (data.milestoneChild ? 17 : 11);\n this.y1 = this.point2;\n this.y2 = this.y1 + heightValue + borderTopWidth - (this.lineStroke - 1) + this.taskLineValue + (this.parent.renderBaseline ? (data.milestoneChild && !(data.milestoneParent) ? -12 : data.milestoneParent && !(data.milestoneChild) ? 10 : 0) : 0);\n this.connectorLinePath = \"M \" + this.x2 + \" \" + (this.y1) + \" L \" + this.x3 + \" \" + (this.y1) +\n \" L \" + this.x3 + \" \" + this.y2 + \" L \" + (this.x3 + this.point1) + \" \" + this.y2;\n this.arrowPath = \"M \" + (this.x2 - 8) + \" \" + (this.y1) +\n \" L \" + this.x2 + \" \" + (this.y1 - (4 + this.lineStroke)) +\n \" L \" + this.x2 + \" \" + (this.y1 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'SFType1') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : data.milestoneChild ? 1 : 0;\n this.point1 = heightValue + borderTopWidth - this.getconnectorLineGap(data) + this.taskLineValue - this.lineStroke;\n this.point2 = this.getconnectorLineGap(data);\n this.x1 = data.parentLeft - 10;\n this.y1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? parentOverlapTopValue : (data.parentIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue));\n this.x2 = (data.childEndPoint - data.parentLeft) + 31;\n this.y2 = this.y1 + this.point1;\n this.x3 = (data.childEndPoint - data.parentLeft) + 18;\n this.y3 = this.y2 - (this.y2 % data.rowHeight);\n this.connectorLinePath = \"M \" + (this.x1 + 11) + \" \" + (this.y1) + \" L \" + this.x1 + \" \" + (this.y1) + \" L \" + this.x1 + \" \" + this.y3 +\n \" L \" + (this.x1 + this.x2) + \" \" + this.y3 + \" L \" + (this.x1 + this.x2) + \" \" + (this.y2 + this.point2) + \" L \" + (this.x1 + this.x3) + \" \" + (this.y2 + this.point2);\n this.arrowPath = \"M \" + (this.x1 + this.x3 - 8) + \" \" + (this.y2 + this.point2) +\n \" L \" + (this.x1 + this.x3) + \" \" + (this.y2 + this.point2 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + this.x3) + \" \" + (this.y2 + this.point2 + 4 + this.lineStroke) + \" Z\";\n }\n if (this.getParentPosition(data) === 'SFType2') {\n this.taskLineValue = this.parent.renderBaseline ? this.taskLineValue : 0;\n this.x1 = data.childEndPoint;\n this.y1 = (this.parent.enableVirtualization ? rowPositionHeight : ((!this.parent.allowTaskbarOverlap ? parentOverlapTopValue : (data.parentIndex * data.rowHeight)) + addTop + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1)));\n this.x2 = (data.parentLeft - data.childEndPoint);\n this.y2 = this.y1 + heightValue + this.taskLineValue + borderTopWidth - this.lineStroke;\n this.connectorLinePath = \"M \" + (this.x1 + this.x2 + 1) + \" \" + (this.y1) + \" L \" + (this.x1 + this.x2 - 10) + \" \" + (this.y1) +\n \" L \" + (this.x1 + this.x2 - 10) + \" \" + this.y2 + \" L \" + (this.x1 + 8) + \" \" + this.y2;\n this.arrowPath = \"M \" + this.x1 + \" \" + (this.y2) +\n \" L \" + (this.x1 + 8) + \" \" + (this.y2 - (4 + this.lineStroke)) +\n \" L \" + (this.x1 + 8) + \" \" + (this.y2 + 4 + this.lineStroke) + \" Z\";\n }\n this.connectorPath.setAttribute(\"d\", this.connectorLinePath);\n this.arrowlinePath.setAttribute(\"d\", this.arrowPath);\n }\n return this.groupObject.outerHTML;\n };\n /**\n * @param {IConnectorLineObject} data .\n * @param {string} type .\n * @param {number} heightValue .\n * @returns {number} .\n * @private\n */\n ConnectorLine.prototype.getPosition = function (data, type, heightValue) {\n var topPosition = 0;\n var lineHeight = 0;\n if (this.parent.virtualScrollModule && this.parent.enableVirtualization) {\n var isMilestoneParent = data.milestoneParent ? true : false;\n var isMilestone = data.milestoneChild ? true : false;\n var midPointParent = this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1);\n var midPoint = this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1);\n var isParentIndex = data.parentIndexInCurrentView !== -1;\n var isChildIndex = data.childIndexInCurrentView !== -1;\n var lastRowIndex = this.parent.currentViewData.length - 1;\n if (type === 'SSType1' || type === 'SSType2' || type === 'FFType1' || type === 'FFType2' || type === 'SFType2') {\n topPosition = isParentIndex ? (data.parentIndexInCurrentView * data.rowHeight) + midPointParent : 0;\n lineHeight = (isParentIndex && isChildIndex) ? heightValue : isChildIndex ?\n (data.childIndexInCurrentView * data.rowHeight) + midPointParent : (lastRowIndex * data.rowHeight) + midPointParent;\n }\n else if (type === 'SSType3' || type === 'SSType4' || type === 'FSType4' || type === 'FFType3' ||\n type === 'FFType4' || type === 'SFType4' || type === 'SFType3') {\n topPosition = isChildIndex ? (data.childIndexInCurrentView * data.rowHeight) + midPoint : 0;\n lineHeight = (isParentIndex && isChildIndex) ? heightValue : isParentIndex ?\n (data.parentIndexInCurrentView * data.rowHeight) + midPoint :\n (lastRowIndex * data.rowHeight) + midPoint;\n }\n else if (type === 'FSType3') {\n topPosition = isChildIndex ? (data.childIndexInCurrentView * data.rowHeight) + midPointParent : 0;\n lineHeight = (isParentIndex && isChildIndex) ? heightValue : isParentIndex ?\n (data.parentIndexInCurrentView * data.rowHeight) + midPoint :\n (lastRowIndex * data.rowHeight) + midPointParent;\n }\n else if (type === 'SFType1' || type === 'FSType1' || type === 'FSType2') {\n topPosition = isParentIndex ? (data.parentIndexInCurrentView * data.rowHeight) + midPoint : 0;\n lineHeight = (isParentIndex && isChildIndex) ? heightValue : isChildIndex ?\n (data.childIndexInCurrentView * data.rowHeight) + midPoint :\n (lastRowIndex * data.rowHeight) + midPoint;\n }\n }\n return { top: topPosition, height: lineHeight };\n };\n /**\n * @returns {void} .\n * @private\n */\n ConnectorLine.prototype.createConnectorLineTooltipTable = function () {\n this.tooltipTable = createElement('table', { className: '.e-tooltiptable', styles: 'margin-top:0px', attrs: { 'cellspacing': '2px', 'cellpadding': '2px' } });\n var tooltipBody = createElement('tbody');\n tooltipBody.innerHTML = '';\n this.tooltipTable.appendChild(tooltipBody);\n };\n /**\n * @param {string} fromTaskName .\n * @param {string} fromPredecessorText .\n * @param {string} toTaskName .\n * @param {string} toPredecessorText .\n * @returns {string} .\n * @private\n */\n ConnectorLine.prototype.getConnectorLineTooltipInnerTd = function (fromTaskName, fromPredecessorText, toTaskName, toPredecessorText) {\n var innerTd = '' + this.parent.localeObj.getConstant('from') + ' ';\n innerTd = innerTd + fromTaskName + ' ' + this.parent.localeObj.getConstant(fromPredecessorText) + ' ';\n innerTd = innerTd + '' + this.parent.localeObj.getConstant('to') + ' ' + toTaskName;\n innerTd = innerTd + ' ' + this.parent.localeObj.getConstant(toPredecessorText) + ' ';\n return innerTd;\n };\n /**\n * Generate aria-label for connectorline\n *\n * @param {IConnectorLineObject} data .\n * @returns {string} .\n * @private\n */\n ConnectorLine.prototype.generateAriaLabel = function (data) {\n var type = data.type;\n var updatedRecords = this.expandedRecords;\n var fromName = updatedRecords[data.parentIndex].ganttProperties.taskName;\n var toName = updatedRecords[data.childIndex].ganttProperties.taskName;\n var start = this.parent.localeObj.getConstant('start');\n var finish = this.parent.localeObj.getConstant('finish');\n var value = '';\n if (type === 'FS') {\n value = fromName + ' ' + finish + ' to ' + toName + ' ' + start;\n }\n else if (type === 'FF') {\n value = fromName + ' ' + finish + ' to ' + toName + ' ' + finish;\n }\n else if (type === 'SS') {\n value = fromName + ' ' + start + ' to ' + toName + ' ' + start;\n }\n else {\n value = fromName + ' ' + start + ' to ' + toName + ' ' + finish;\n }\n return value;\n };\n /**\n * To get the record based on the predecessor value\n *\n * @param {string} id .\n * @returns {IGanttData} .\n * @private\n */\n ConnectorLine.prototype.getRecordByID = function (id) {\n if (isNullOrUndefined(id)) {\n return null;\n }\n return this.parent.viewType === 'ResourceView' ? this.parent.flatData[this.parent.getTaskIds().indexOf('T' + id.toString())] :\n this.parent.flatData[this.parent.ids.indexOf(id.toString())];\n };\n /**\n * Method to remove connector line from DOM\n *\n * @param {IGanttData[] | object} records .\n * @returns {void} .\n * @private\n */\n ConnectorLine.prototype.removePreviousConnectorLines = function (records) {\n var isObjectType;\n if (isObject(records) === true) {\n isObjectType = true;\n }\n else {\n isObjectType = false;\n }\n var length = isObjectType ? Object.keys(records).length : records.length;\n var keys = Object.keys(records);\n for (var i = 0; i < length; i++) {\n var data = void 0;\n if (isObjectType) {\n var uniqueId = keys[i];\n data = records[uniqueId];\n }\n else {\n data = records[i];\n }\n var predecessors = data.ganttProperties && data.ganttProperties.predecessor;\n if (predecessors && predecessors.length > 0) {\n for (var pre = 0; pre < predecessors.length; pre++) {\n var lineId = 'parent' + predecessors[pre].from + 'child' + predecessors[pre].to;\n this.removeConnectorLineById(lineId);\n }\n }\n }\n };\n /**\n * @param {string} id .\n * @returns {void} .\n * @private\n */\n ConnectorLine.prototype.removeConnectorLineById = function (id) {\n var element = this.parent.connectorLineModule.dependencyViewContainer.querySelector('#ConnectorLine' + id);\n if (!isNullOrUndefined(element)) {\n remove(element);\n }\n };\n return ConnectorLine;\n}());\nexport { ConnectorLine };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, setStyleAttribute, ChildProperty, compile } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, addClass, Collection, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, selectAll, removeClass, select, Browser, detach, formatUnit } from '@syncfusion/ej2-base';\nimport { SanitizeHtmlHelper, extend } from '@syncfusion/ej2-base';\nvar ROOT = 'e-splitter';\nvar HORIZONTAL_PANE = 'e-splitter-horizontal';\nvar VERTICAL_PANE = 'e-splitter-vertical';\nvar PANE = 'e-pane';\nvar SPLIT_H_PANE = 'e-pane-horizontal';\nvar SPLIT_V_PANE = 'e-pane-vertical';\nvar SPLIT_BAR = 'e-split-bar';\nvar SPLIT_H_BAR = 'e-split-bar-horizontal';\nvar SPLIT_V_BAR = 'e-split-bar-vertical';\nvar STATIC_PANE = 'e-static-pane';\nvar SCROLL_PANE = 'e-scrollable';\nvar RESIZE_BAR = 'e-resize-handler';\nvar RESIZABLE_BAR = 'e-resizable-split-bar';\nvar SPLIT_BAR_HOVER = 'e-split-bar-hover';\nvar SPLIT_BAR_ACTIVE = 'e-split-bar-active';\nvar HIDE_HANDLER = 'e-hide-handler';\nvar SPLIT_TOUCH = 'e-splitter-touch';\nvar DISABLED = 'e-disabled';\nvar RTL = 'e-rtl';\nvar E_ICONS = 'e-icons';\nvar COLLAPSIBLE = 'e-collapsible';\nvar NAVIGATE_ARROW = 'e-navigate-arrow';\nvar ARROW_RIGHT = 'e-arrow-right';\nvar ARROW_LEFT = 'e-arrow-left';\nvar ARROW_UP = 'e-arrow-up';\nvar ARROW_DOWN = 'e-arrow-down';\nvar HIDE_ICON = 'e-icon-hidden';\nvar EXPAND_PANE = 'e-expanded';\nvar COLLAPSE_PANE = 'e-collapsed';\nvar PANE_HIDDEN = 'e-pane-hidden';\nvar RESIZABLE_PANE = 'e-resizable';\nvar LAST_BAR = 'e-last-bar';\nvar BAR_SIZE_DEFAULT = 1;\n/**\n * Interface to configure pane properties such as its content, size, min, max, resizable, collapsed and collapsible.\n */\nvar PaneProperties = /** @class */ (function (_super) {\n __extends(PaneProperties, _super);\n function PaneProperties() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], PaneProperties.prototype, \"size\", void 0);\n __decorate([\n Property(false)\n ], PaneProperties.prototype, \"collapsible\", void 0);\n __decorate([\n Property(false)\n ], PaneProperties.prototype, \"collapsed\", void 0);\n __decorate([\n Property(true)\n ], PaneProperties.prototype, \"resizable\", void 0);\n __decorate([\n Property(null)\n ], PaneProperties.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], PaneProperties.prototype, \"max\", void 0);\n __decorate([\n Property()\n ], PaneProperties.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], PaneProperties.prototype, \"cssClass\", void 0);\n return PaneProperties;\n}(ChildProperty));\nexport { PaneProperties };\n/**\n * Splitter is a layout user interface (UI) control that has resizable and collapsible split panes.\n * The container can be split into multiple panes, which are oriented horizontally or vertically.\n * The separator (divider) splits the panes and resizes and expands/collapses the panes.\n * The splitter is placed inside the split pane to make a nested layout user interface.\n *\n * ```html\n *
\n *
Left Pane
\n *
Center Pane
\n *
Right Pane
\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Splitter = /** @class */ (function (_super) {\n __extends(Splitter, _super);\n /**\n * Initializes a new instance of the Splitter class.\n *\n * @param options - Specifies Splitter model properties as options.\n * @param element - Specifies the element that is rendered as an Splitter.\n */\n function Splitter(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.needsID = true;\n return _this;\n }\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n *\n * @param {SplitterModel} newProp - specifies the new property\n * @param {SplitterModel} oldProp - specifies the old property\n * @returns {void}\n * @private\n */\n Splitter.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n this.setSplitterSize(this.element, newProp.height, 'height');\n break;\n case 'width':\n this.setSplitterSize(this.element, newProp.width, 'width');\n break;\n case 'cssClass':\n this.setCssClass(this.element, newProp.cssClass);\n break;\n case 'enabled':\n this.isEnabled(this.enabled);\n break;\n case 'enableReversePanes':\n this.setReversePane();\n break;\n case 'separatorSize':\n this.setSeparatorSize(newProp.separatorSize);\n break;\n case 'orientation':\n this.changeOrientation(newProp.orientation);\n break;\n case 'paneSettings': {\n if (!(newProp.paneSettings instanceof Array && oldProp.paneSettings instanceof Array)) {\n var paneCounts = Object.keys(newProp.paneSettings);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var isPaneContentChanged = paneCounts.some(function (count) { return !isNullOrUndefined(newProp.paneSettings[count].content); });\n if (this.isReact && isPaneContentChanged) {\n var cPaneCount = 0;\n for (var k = 0; k < this.paneSettings.length; k++) {\n if (typeof (this.paneSettings[k].content) === 'function') {\n cPaneCount = cPaneCount + 1;\n }\n }\n var hasAllContent = cPaneCount === this.paneSettings.length;\n if (hasAllContent) {\n this.clearTemplate();\n }\n }\n for (var i = 0; i < paneCounts.length; i++) {\n var index = parseInt(Object.keys(newProp.paneSettings)[i], 10);\n var changedPropsCount = Object.keys(newProp.paneSettings[index]).length;\n for (var j = 0; j < changedPropsCount; j++) {\n var property = Object.keys(newProp.paneSettings[index])[j];\n switch (property) {\n case 'content': {\n var newValue = Object(newProp.paneSettings[index])[\"\" + property];\n if (!isNullOrUndefined(newValue)) {\n this.allPanes[index].innerHTML = '';\n this.setTemplate(newValue, this.allPanes[index]);\n }\n break;\n }\n case 'resizable': {\n var newVal = Object(newProp.paneSettings[index])[\"\" + property];\n this.resizableModel(index, newVal);\n break;\n }\n case 'collapsible':\n this.collapsibleModelUpdate(index);\n break;\n case 'collapsed':\n // eslint-disable-next-line\n newProp.paneSettings[index].collapsed ? this.isCollapsed(index) : this.collapsedOnchange(index);\n break;\n case 'cssClass':\n // eslint-disable-next-line max-len\n this.setCssClass(this.allPanes[index], newProp.paneSettings[index].cssClass);\n break;\n case 'size': {\n var newValSize = Object(newProp.paneSettings[index])[\"\" + property];\n if (newValSize !== '' && !isNullOrUndefined(newValSize)) {\n this.updatePaneSize(newValSize, index);\n }\n break;\n }\n }\n }\n }\n }\n else {\n this.destroyPaneSettings();\n this.allBars = [];\n this.allPanes = [];\n this.createSplitPane(this.element);\n this.addSeparator(this.element);\n this.getPanesDimensions();\n this.setRTL(this.enableRtl);\n this.isCollapsed();\n }\n break;\n }\n case 'enableRtl':\n this.setRTL(newProp.enableRtl);\n break;\n }\n }\n };\n Splitter.prototype.updatePaneSize = function (newValSize, index) {\n this.allPanes[index].style.flexBasis = newValSize;\n var flexPaneIndexes = [];\n var staticPaneWidth;\n var flexCount = 0;\n for (var i = 0; i < this.allPanes.length; i++) {\n if (!this.paneSettings[i].size && !(this.allPanes[i].innerText === '')) {\n flexPaneIndexes[flexCount] = i;\n flexCount++;\n }\n else if (this.paneSettings[i].size) {\n staticPaneWidth = this.orientation === 'Horizontal' ? this.allPanes[index].offsetWidth : this.allPanes[index].offsetHeight;\n }\n }\n staticPaneWidth = this.orientation === 'Horizontal' ? (this.allBars[0].offsetWidth * this.allBars.length) + staticPaneWidth :\n (this.allBars[0].offsetHeight * this.allBars.length) + staticPaneWidth;\n var flexPaneWidth = (this.orientation === 'Horizontal' ? this.element.offsetWidth : this.element.offsetHeight)\n - staticPaneWidth - (this.border * 2);\n var avgDiffWidth = flexPaneWidth / flexPaneIndexes.length;\n for (var j = 0; j < flexPaneIndexes.length; j++) {\n this.allPanes[flexPaneIndexes[j]].style.flexBasis = avgDiffWidth + 'px';\n }\n this.allPanes[index].classList.add(STATIC_PANE);\n };\n Splitter.prototype.initializeValues = function () {\n this.allPanes = [];\n this.paneOrder = [];\n this.separatorOrder = [];\n this.allBars = [];\n this.previousCoordinates = {};\n this.currentCoordinates = {};\n this.updatePrePaneInPercentage = false;\n this.updateNextPaneInPercentage = false;\n this.panesDimensions = [];\n this.border = 0;\n this.validDataAttributes = ['data-size', 'data-min', 'data-max', 'data-collapsible',\n 'data-resizable', 'data-content', 'data-collapsed'];\n this.validElementAttributes = ['data-orientation', 'data-width', 'data-height'];\n this.iconsDelay = 300;\n this.templateElement = [];\n this.collapseFlag = false;\n this.expandFlag = true;\n };\n Splitter.prototype.preRender = function () {\n this.initializeValues();\n this.onReportWindowSize = this.reportWindowSize.bind(this);\n this.onMouseMoveHandler = this.onMouseMove.bind(this);\n this.onMouseUpHandler = this.onMouseUp.bind(this);\n this.onTouchMoveHandler = this.onMouseMove.bind(this);\n this.onTouchEndHandler = this.onMouseUp.bind(this);\n this.wrapper = this.element.cloneNode(true);\n this.wrapperParent = this.element.parentElement;\n removeClass([this.wrapper], ['e-control', 'e-lib', ROOT]);\n var orientation = this.orientation === 'Horizontal' ? HORIZONTAL_PANE : VERTICAL_PANE;\n addClass([this.element], orientation);\n var name = Browser.info.name;\n var css = (name === 'msie') ? 'e-ie' : '';\n this.setCssClass(this.element, css);\n if (Browser.isDevice) {\n addClass([this.element], SPLIT_TOUCH);\n }\n };\n Splitter.prototype.getPersistData = function () {\n return this.addOnPersist(['paneSettings']);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - returns the string value\n * @private\n */\n Splitter.prototype.getModuleName = function () {\n return 'splitter';\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Splitter.prototype.render = function () {\n this.checkDataAttributes();\n this.setCssClass(this.element, this.cssClass);\n this.isEnabled(this.enabled);\n this.setDimension(this.getHeight(this.element), this.getWidth(this.element));\n this.createSplitPane(this.element);\n this.addSeparator(this.element);\n this.getPanesDimensions();\n this.setPaneSettings();\n this.setRTL(this.enableRtl);\n if (this.enableReversePanes) {\n this.setReversePane();\n }\n this.collapseFlag = true;\n this.isCollapsed();\n this.collapseFlag = false;\n EventHandler.add(document, 'touchstart click', this.onDocumentClick, this);\n this.renderComplete();\n this.element.ownerDocument.defaultView.addEventListener('resize', this.onReportWindowSize, true);\n EventHandler.add(this.element, 'keydown', this.onMove, this);\n };\n Splitter.prototype.onDocumentClick = function (e) {\n if (!e.target.classList.contains(SPLIT_BAR) && !isNullOrUndefined(this.currentSeparator)) {\n this.currentSeparator.classList.remove(SPLIT_BAR_HOVER);\n this.currentSeparator.classList.remove(SPLIT_BAR_ACTIVE);\n }\n };\n Splitter.prototype.checkPaneSize = function (e) {\n var prePaneSize = this.orientation === 'Horizontal' ? this.previousPane.offsetWidth : this.previousPane.offsetHeight;\n var nextPaneSize = this.orientation === 'Horizontal' ? this.nextPane.offsetWidth : this.nextPane.offsetHeight;\n var splitBarSize = isNullOrUndefined(this.separatorSize) ? BAR_SIZE_DEFAULT : this.separatorSize;\n if ((this.previousPane.style.flexBasis.indexOf('%') > 0 || this.previousPane.style.flexBasis.indexOf('p') > 0 || this.nextPane.style.flexBasis.indexOf('%') > 0)) {\n var previousFlexBasis = this.updatePaneFlexBasis(this.previousPane);\n var nextFlexBasis = this.updatePaneFlexBasis(this.nextPane);\n this.totalPercent = previousFlexBasis + nextFlexBasis;\n this.totalWidth = this.convertPercentageToPixel(this.totalPercent + '%');\n if (e.type === 'keydown' && (!isNullOrUndefined(e.keyCode))) {\n if ((e.keyCode === 39 || (e.keyCode === 40)) && nextPaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.nextPaneIndex].min) <\n this.convertPercentageToPixel((nextFlexBasis - 1) + '%'))) {\n this.previousPane.style.flexBasis = (previousFlexBasis + 1) + '%';\n this.nextPane.style.flexBasis = (nextFlexBasis - 1) + '%';\n }\n else if ((e.keyCode === 37 || (e.keyCode === 38)) && prePaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.prevPaneIndex].min) <\n this.convertPercentageToPixel((previousFlexBasis - 1) + '%'))) {\n this.previousPane.style.flexBasis = (previousFlexBasis - 1) + '%';\n this.nextPane.style.flexBasis = (nextFlexBasis + 1) + '%';\n }\n }\n }\n else {\n this.totalWidth = (this.orientation === 'Horizontal') ? this.previousPane.offsetWidth + this.nextPane.offsetWidth :\n this.previousPane.offsetHeight + this.nextPane.offsetHeight;\n if (e.type === 'keydown' && (!isNullOrUndefined(e.keyCode))) {\n if ((e.keyCode === 39 || (e.keyCode === 40)) && nextPaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.nextPaneIndex].min) < (nextPaneSize + splitBarSize))) {\n this.addStaticPaneClass();\n this.previousPane.style.flexBasis = (prePaneSize + splitBarSize) + 'px';\n this.nextPane.style.flexBasis = (nextPaneSize < splitBarSize) ? '0px' :\n (nextPaneSize - splitBarSize) + 'px';\n }\n else if ((e.keyCode === 37 || (e.keyCode === 38)) && prePaneSize > 0 &&\n (this.getMinInPixel(this.paneSettings[this.prevPaneIndex].min) < (prePaneSize - splitBarSize))) {\n this.addStaticPaneClass();\n this.previousPane.style.flexBasis = (prePaneSize < splitBarSize) ? '0px' :\n (prePaneSize - splitBarSize) + 'px';\n this.nextPane.style.flexBasis = (nextPaneSize + splitBarSize) + 'px';\n }\n }\n }\n };\n Splitter.prototype.onMove = function (event) {\n if (this.allPanes.length > 1) {\n var index = this.getSeparatorIndex(this.currentSeparator);\n var isPrevpaneCollapsed = this.previousPane.classList.contains(COLLAPSE_PANE);\n var isPrevpaneExpanded = this.previousPane.classList.contains(EXPAND_PANE);\n var isNextpaneCollapsed = this.nextPane.classList.contains(COLLAPSE_PANE);\n if (((this.orientation !== 'Horizontal' && event.keyCode === 38) || (this.orientation === 'Horizontal' &&\n event.keyCode === 39) ||\n (this.orientation === 'Horizontal' && event.keyCode === 37) || (this.orientation !== 'Horizontal' && event.keyCode === 40))\n && (!isPrevpaneExpanded && !isNextpaneCollapsed && !isPrevpaneCollapsed || (isPrevpaneExpanded) && !isNextpaneCollapsed) &&\n document.activeElement.classList.contains(SPLIT_BAR) && (this.paneSettings[index].resizable &&\n this.paneSettings[index + 1].resizable)) {\n event.preventDefault();\n this.checkPaneSize(event);\n this.triggerResizing(event);\n }\n else if (event.keyCode === 13 && this.paneSettings[index].collapsible &&\n document.activeElement.classList.contains(SPLIT_BAR) && this.currentSeparator.classList.contains(SPLIT_BAR_ACTIVE)) {\n if (!this.previousPane.classList.contains(COLLAPSE_PANE)) {\n this.collapse(index);\n addClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n }\n else {\n this.expand(index);\n addClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n }\n }\n }\n };\n Splitter.prototype.getMinInPixel = function (minValue) {\n if (isNullOrUndefined(minValue)) {\n return 0;\n }\n var paneMinRange = this.convertPixelToNumber(minValue.toString());\n if (minValue.indexOf('%') > 0) {\n paneMinRange = this.convertPercentageToPixel(minValue);\n }\n var min = this.convertPixelToNumber((paneMinRange).toString());\n return min;\n };\n /**\n * @param {string} value - specifies the string value\n * @returns {string} returns the string\n * @hidden\n */\n Splitter.prototype.sanitizeHelper = function (value) {\n if (this.enableHtmlSanitizer) {\n var item = SanitizeHtmlHelper.beforeSanitize();\n var beforeEvent = {\n cancel: false,\n helper: null\n };\n extend(item, item, beforeEvent);\n this.trigger('beforeSanitizeHtml', item);\n if (item.cancel && !isNullOrUndefined(item.helper)) {\n value = item.helper(value);\n }\n else if (!item.cancel) {\n value = SanitizeHtmlHelper.serializeValue(item, value);\n }\n }\n return value;\n };\n Splitter.prototype.checkDataAttributes = function () {\n var api;\n var value;\n // Element values\n for (var dataIndex = 0; dataIndex < this.validElementAttributes.length; dataIndex++) {\n value = this.element.getAttribute(this.validElementAttributes[dataIndex]);\n if (!isNullOrUndefined(value)) {\n api = this.removeDataPrefix(this.validElementAttributes[dataIndex]);\n // eslint-disable-next-line\n this[api] = value;\n }\n }\n // Pane values\n for (var paneIndex = 0; paneIndex < this.element.children.length; paneIndex++) {\n for (var dataAttr = 0; dataAttr < this.validDataAttributes.length; dataAttr++) {\n value = this.element.children[paneIndex].getAttribute(this.validDataAttributes[dataAttr]);\n if (!isNullOrUndefined(value)) {\n api = this.removeDataPrefix(this.validDataAttributes[dataAttr]);\n value = (api === 'collapsible' || api === 'resizable') ? (value === 'true') : value;\n if (isNullOrUndefined(this.paneSettings[paneIndex])) {\n this.paneSettings[paneIndex] = {\n size: '',\n min: null,\n max: null,\n content: '',\n resizable: true,\n collapsible: false,\n collapsed: false\n };\n }\n // eslint-disable-next-line\n var paneAPI = this.paneSettings[paneIndex][api];\n if (api === 'resizable' || api === 'collapsible' || api === 'collapsed') {\n // eslint-disable-next-line\n this.paneSettings[paneIndex][api] = value;\n }\n if (isNullOrUndefined(paneAPI) || paneAPI === '') {\n // eslint-disable-next-line\n this.paneSettings[paneIndex][api] = value;\n }\n }\n }\n }\n };\n Splitter.prototype.destroyPaneSettings = function () {\n [].slice.call(this.element.children).forEach(function (el) {\n detach(el);\n });\n this.restoreElem();\n };\n Splitter.prototype.setPaneSettings = function () {\n var childCount = this.allPanes.length;\n var paneCollection = [];\n var paneValue = {\n size: '',\n min: null,\n max: null,\n content: '',\n resizable: true,\n collapsed: false,\n collapsible: false,\n cssClass: ''\n };\n for (var i = 0; i < childCount; i++) {\n if (isNullOrUndefined(this.paneSettings[i])) {\n paneCollection[i] = paneValue;\n }\n else {\n paneCollection[i] = this.paneSettings[i];\n }\n }\n this.setProperties({ 'paneSettings': paneCollection }, true);\n };\n Splitter.prototype.checkArrow = function (paneIndex, targetArrow) {\n return (this.allBars[paneIndex].querySelector('.' + NAVIGATE_ARROW + '.' + targetArrow));\n };\n Splitter.prototype.removeDataPrefix = function (attribute) {\n return attribute.slice(attribute.lastIndexOf('-') + 1);\n };\n Splitter.prototype.setRTL = function (rtl) {\n // eslint-disable-next-line\n rtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n Splitter.prototype.setReversePane = function () {\n this.allPanes = this.allPanes.reverse();\n this.allBars = this.allBars.reverse();\n addClass([this.allBars[this.allBars.length - 1]], LAST_BAR);\n removeClass([this.allBars[0]], LAST_BAR);\n this.setProperties({ 'paneSettings': this.paneSettings.reverse() }, true);\n if (this.enableReversePanes) {\n this.element.setAttribute('dir', 'rtl');\n }\n else {\n this.element.removeAttribute('dir');\n }\n };\n Splitter.prototype.setSplitterSize = function (element, size, property) {\n var style = property === 'width' ? { 'width': formatUnit(size) } : { 'height': formatUnit(size) };\n setStyleAttribute(element, style);\n };\n Splitter.prototype.getPanesDimensions = function () {\n for (var index = 0; index < this.allPanes.length; index++) {\n // eslint-disable-next-line\n this.orientation === 'Horizontal' ? this.panesDimensions.push(this.allPanes[index].getBoundingClientRect().width) :\n this.panesDimensions.push(this.allPanes[index].getBoundingClientRect().height);\n }\n };\n Splitter.prototype.setCssClass = function (element, className) {\n if (className) {\n addClass([element], className.split(className.indexOf(',') > -1 ? ',' : ' '));\n }\n };\n Splitter.prototype.hideResizer = function (target) {\n addClass([select('.' + RESIZE_BAR, target)], HIDE_HANDLER);\n };\n Splitter.prototype.showResizer = function (target) {\n if (!isNullOrUndefined(this.previousPane) && this.previousPane.classList.contains(RESIZABLE_PANE) &&\n !isNullOrUndefined(this.nextPane) && this.nextPane.classList.contains(RESIZABLE_PANE)) {\n removeClass([select('.' + RESIZE_BAR, target)], HIDE_HANDLER);\n }\n };\n Splitter.prototype.resizableModel = function (index, newVal) {\n var paneIndex = (index === (this.allBars.length)) ? (index - 1) : index;\n var i = index;\n EventHandler.remove(this.allBars[paneIndex], 'mousedown', this.onMouseDown);\n if (newVal) {\n EventHandler.add(this.allBars[paneIndex], 'mousedown', this.onMouseDown, this);\n if (this.isResizable()) {\n this.showResizer(this.allBars[paneIndex]);\n removeClass([select('.' + RESIZE_BAR, this.allBars[paneIndex])], HIDE_HANDLER);\n this.allBars[paneIndex].classList.add(RESIZABLE_BAR);\n // eslint-disable-next-line\n (index === (this.allBars.length)) ? this.allPanes[index].classList.add(RESIZABLE_PANE) :\n this.allPanes[paneIndex].classList.add(RESIZABLE_PANE);\n this.updateResizablePanes(i);\n }\n }\n else {\n this.updateResizablePanes(i);\n this.hideResizer(this.allBars[paneIndex]);\n this.allBars[paneIndex].classList.remove(RESIZABLE_BAR);\n // eslint-disable-next-line\n (index === (this.allBars.length)) ? this.allPanes[index].classList.remove(RESIZABLE_PANE) :\n this.allPanes[paneIndex].classList.remove(RESIZABLE_PANE);\n }\n };\n Splitter.prototype.collapsibleModelUpdate = function (index) {\n var paneIndex = index === (this.allBars.length) ? (index - 1) : index;\n var arrow2 = (this.orientation === 'Horizontal')\n ? this.checkArrow(paneIndex, ARROW_LEFT) : this.checkArrow(paneIndex, ARROW_UP);\n var arrow1 = (this.orientation === 'Horizontal')\n ? this.checkArrow(paneIndex, ARROW_RIGHT) : this.checkArrow(paneIndex, ARROW_DOWN);\n this.paneCollapsible(this.allPanes[index], index);\n this.updateCollapseIcons(paneIndex, arrow1, arrow2);\n };\n Splitter.prototype.collapseArrow = function (barIndex, arrow) {\n return selectAll('.' + arrow, this.allBars[barIndex])[0];\n };\n Splitter.prototype.updateIsCollapsed = function (index, collapseArrow, lastBarArrow) {\n if (!isNullOrUndefined(index)) {\n var targetEle = void 0;\n var lastBarIndex = (index === this.allBars.length);\n var barIndex = lastBarIndex ? index - 1 : index;\n if (!lastBarIndex && this.allPanes[index + 1].classList.contains(COLLAPSE_PANE) && index !== 0) {\n targetEle = this.collapseArrow(barIndex - 1, lastBarArrow);\n }\n else {\n targetEle = (lastBarIndex) ? this.collapseArrow(barIndex, lastBarArrow) : this.collapseArrow(barIndex, collapseArrow);\n }\n targetEle.click();\n }\n };\n Splitter.prototype.isCollapsed = function (index) {\n var _this = this;\n if (!isNullOrUndefined(index) && this.paneSettings[index].collapsed\n && isNullOrUndefined(this.allPanes[index].classList.contains(COLLAPSE_PANE))) {\n return;\n }\n this.expandFlag = false;\n if (!isNullOrUndefined(index)) {\n this.collapseFlag = true;\n var targetEle = void 0;\n var lastBarIndex = (index === this.allBars.length);\n var barIndex = lastBarIndex ? index - 1 : index;\n if (!lastBarIndex && this.allPanes[index + 1].classList.contains(COLLAPSE_PANE) && index !== 0) {\n targetEle = this.collapseArrow(barIndex - 1, this.targetArrows().lastBarArrow);\n }\n else {\n targetEle = (lastBarIndex) ? this.collapseArrow(barIndex, this.targetArrows().lastBarArrow) :\n this.collapseArrow(barIndex, this.targetArrows().collapseArrow);\n }\n var event_1 = { target: targetEle };\n var eventArgs = this.beforeAction(event_1);\n this.trigger('beforeCollapse', eventArgs, function (beforeCollapseArgs) {\n if (!beforeCollapseArgs.cancel) {\n var collapsedindex = [];\n collapsedindex[0] = index;\n var j = 1;\n for (var i = 0; i < _this.allPanes.length; i++) {\n if (_this.allPanes[i].classList.contains(COLLAPSE_PANE)) {\n collapsedindex[j] = i;\n j++;\n }\n }\n collapsedindex = collapsedindex.sort();\n _this.updateIsCollapsed(index, _this.targetArrows().collapseArrow, _this.targetArrows().lastBarArrow);\n for (var i = 0; i < collapsedindex.length; i++) {\n if (!_this.allPanes[collapsedindex[i]].classList.contains(COLLAPSE_PANE)) {\n // eslint-disable-next-line max-len\n _this.updateIsCollapsed(collapsedindex[i], _this.targetArrows().collapseArrow, _this.targetArrows().lastBarArrow);\n }\n }\n for (var i = collapsedindex.length; i > 0; i--) {\n if (!_this.allPanes[collapsedindex[i - 1]].classList.contains(COLLAPSE_PANE)) {\n var targetArrow = _this.targetArrows();\n _this.updateIsCollapsed(collapsedindex[i - 1], targetArrow.collapseArrow, targetArrow.lastBarArrow);\n }\n }\n var collapseEventArgs = _this.afterAction(event_1);\n _this.trigger('collapsed', collapseEventArgs);\n _this.collapseFlag = false;\n }\n });\n }\n else {\n for (var m = 0; m < this.allPanes.length; m++) {\n if (!isNullOrUndefined(this.paneSettings[m]) && this.paneSettings[m].collapsed) {\n this.updateIsCollapsed(m, this.targetArrows().collapseArrow, this.targetArrows().lastBarArrow);\n }\n }\n for (var m = this.allPanes.length - 1; m >= 0; m--) {\n if (!isNullOrUndefined(this.paneSettings[m]) && this.paneSettings[m].collapsed &&\n !this.allPanes[m].classList.contains(COLLAPSE_PANE)) {\n var collapseArrow = this.orientation === 'Horizontal' ? ARROW_RIGHT : ARROW_DOWN;\n if (m !== 0) {\n var targetEle = this.collapseArrow(m - 1, collapseArrow);\n targetEle.click();\n }\n if (!this.nextPane.classList.contains(COLLAPSE_PANE)) {\n var targetEle = this.collapseArrow(m - 1, collapseArrow);\n targetEle.click();\n }\n }\n }\n }\n this.expandFlag = true;\n };\n Splitter.prototype.targetArrows = function () {\n this.splitterProperty();\n return {\n collapseArrow: (this.orientation === 'Horizontal') ? ARROW_LEFT : ARROW_UP,\n lastBarArrow: (this.orientation === 'Vertical') ? ARROW_DOWN : ARROW_RIGHT\n };\n };\n Splitter.prototype.collapsedOnchange = function (index) {\n if (!isNullOrUndefined(this.paneSettings[index]) && !isNullOrUndefined(this.paneSettings[index].collapsed)\n && this.allPanes[index].classList.contains(COLLAPSE_PANE)) {\n this.updateIsCollapsed(index, this.targetArrows().lastBarArrow, this.targetArrows().collapseArrow);\n }\n };\n Splitter.prototype.isEnabled = function (enabled) {\n // eslint-disable-next-line\n enabled ? removeClass([this.element], DISABLED) : addClass([this.element], DISABLED);\n };\n Splitter.prototype.setSeparatorSize = function (size) {\n var sizeValue = isNullOrUndefined(size) ? 'auto' : size + 'px';\n var separator = this.orientation === 'Horizontal' ? SPLIT_H_BAR : SPLIT_V_BAR;\n for (var index = 0; index < this.allBars.length; index++) {\n var splitBar = selectAll('.' + separator, this.element)[index];\n var resizeBar = selectAll('.' + RESIZE_BAR, splitBar)[0];\n if (this.orientation === 'Horizontal') {\n splitBar.style.width = sizeValue;\n if (!isNullOrUndefined(resizeBar)) {\n resizeBar.style.width = sizeValue;\n }\n }\n else {\n splitBar.style.height = sizeValue;\n if (!isNullOrUndefined(resizeBar)) {\n resizeBar.style.height = sizeValue;\n }\n }\n }\n };\n Splitter.prototype.changeOrientation = function (orientation) {\n var isVertical = orientation === 'Vertical';\n this.element.classList.remove(isVertical ? HORIZONTAL_PANE : VERTICAL_PANE);\n this.element.classList.add(isVertical ? VERTICAL_PANE : HORIZONTAL_PANE);\n for (var index = 0; index < this.allPanes.length; index++) {\n this.allPanes[index].classList.remove(isVertical ? SPLIT_H_PANE : SPLIT_V_PANE);\n this.allPanes[index].classList.add(isVertical ? SPLIT_V_PANE : SPLIT_H_PANE);\n }\n for (var index = 0; index < this.allBars.length; index++) {\n detach(this.allBars[index]);\n }\n this.allBars = [];\n this.addSeparator(this.element);\n };\n Splitter.prototype.checkSplitPane = function (currentBar, elementIndex) {\n var paneEle = this.collectPanes(currentBar.parentElement.children)[elementIndex];\n return paneEle;\n };\n Splitter.prototype.collectPanes = function (childNodes) {\n var elements = [];\n for (var i = 0; i < childNodes.length; i++) {\n if (childNodes[i].classList.contains(PANE)) {\n elements.push(childNodes[i]);\n }\n }\n return elements;\n };\n Splitter.prototype.getPrevPane = function (order) {\n return this.enableReversePanes ? this.getOrderPane(order + 1) : this.getOrderPane(order - 1);\n };\n Splitter.prototype.getNextPane = function (order) {\n return this.enableReversePanes ? this.getOrderPane(order - 1) : this.getOrderPane(order + 1);\n };\n Splitter.prototype.getOrderPane = function (order) {\n var pane;\n for (var i = 0; i < this.element.children.length; i++) {\n if (parseInt(this.element.children[i].style.order, 10) === order) {\n pane = this.element.children[i];\n }\n }\n return pane;\n };\n Splitter.prototype.getOrderIndex = function (order, type) {\n var index;\n var panes;\n if (type === 'pane') {\n panes = this.allPanes;\n }\n else {\n panes = this.allBars;\n }\n for (var i = 0; i < panes.length; i++) {\n if (parseInt(panes[i].style.order, 10) === order) {\n index = i;\n }\n }\n return index;\n };\n Splitter.prototype.updateSeparatorSize = function (resizeHanlder) {\n var sizeValue = isNullOrUndefined(this.separatorSize) ? '1px' : this.separatorSize + 'px';\n // eslint-disable-next-line\n this.orientation === 'Horizontal' ? (resizeHanlder.style.width = sizeValue) : resizeHanlder.style.height = sizeValue;\n };\n Splitter.prototype.addResizeHandler = function (currentBar) {\n var resizeHanlder = this.createElement('div');\n addClass([resizeHanlder], [RESIZE_BAR, E_ICONS]);\n this.updateSeparatorSize(resizeHanlder);\n currentBar.appendChild(resizeHanlder);\n };\n Splitter.prototype.getHeight = function (target) {\n var height = this.height;\n height = target.style.height !== '' && this.height === '100%' ? target.style.height : this.height;\n return height;\n };\n Splitter.prototype.getWidth = function (target) {\n var width = this.width;\n width = target.style.width !== '' && this.width === '100%' ? target.style.width : this.width;\n return width;\n };\n Splitter.prototype.setDimension = function (height, width) {\n setStyleAttribute(this.element, { 'height': height, 'width': width });\n };\n Splitter.prototype.updateCollapseIcons = function (index, arrow1, arrow2) {\n if (!isNullOrUndefined(this.paneSettings[index])) {\n if (!isNullOrUndefined(this.paneSettings[index].collapsible)) {\n // eslint-disable-next-line\n this.paneSettings[index].collapsible ? removeClass([arrow2], [HIDE_ICON]) : addClass([arrow2], [HIDE_ICON]);\n if (!isNullOrUndefined(this.paneSettings[index + 1])) {\n // eslint-disable-next-line\n this.paneSettings[index + 1].collapsible ? removeClass([arrow1], [HIDE_ICON]) : addClass([arrow1], [HIDE_ICON]);\n }\n if (!isNullOrUndefined(this.paneSettings[index + 1])) {\n if ((this.paneSettings[index + 1].collapsible)) {\n // eslint-disable-next-line\n this.paneSettings[index + 1].collapsible ? removeClass([arrow1], [HIDE_ICON]) : addClass([arrow1], [HIDE_ICON]);\n }\n }\n }\n }\n };\n Splitter.prototype.updateIconClass = function () {\n if (this.orientation === 'Horizontal') {\n this.leftArrow = ARROW_LEFT;\n this.rightArrow = ARROW_RIGHT;\n }\n else {\n this.leftArrow = ARROW_UP;\n this.rightArrow = ARROW_DOWN;\n }\n };\n Splitter.prototype.createSeparator = function (i) {\n var separator = this.createElement('div');\n this.allBars.push(separator);\n var arrow1 = this.createElement('button');\n var arrow2 = this.createElement('button');\n arrow1.setAttribute('tabindex', '-1');\n arrow2.setAttribute('tabindex', '-1');\n arrow1.setAttribute('aria-label', 'Toggle navigation');\n arrow2.setAttribute('aria-label', 'Toggle navigation');\n arrow1.setAttribute('type', 'button');\n arrow2.setAttribute('type', 'button');\n var size = isNullOrUndefined(this.separatorSize) ? '1px' : this.separatorSize + 'px';\n // eslint-disable-next-line\n var proxy = this;\n if (this.orientation === 'Horizontal') {\n this.updateIconClass();\n addClass([arrow2], [NAVIGATE_ARROW, ARROW_LEFT, HIDE_ICON]);\n addClass([arrow1], [NAVIGATE_ARROW, ARROW_RIGHT, HIDE_ICON]);\n addClass([separator], [SPLIT_BAR, SPLIT_H_BAR]);\n separator.style.width = size;\n }\n else {\n addClass([arrow1], [NAVIGATE_ARROW, ARROW_DOWN, HIDE_ICON]);\n addClass([arrow2], [NAVIGATE_ARROW, ARROW_UP, HIDE_ICON]);\n addClass([separator], [SPLIT_BAR, SPLIT_V_BAR]);\n this.updateIconClass();\n separator.style.height = size;\n }\n this.addMouseActions(separator);\n separator.appendChild(arrow2);\n this.addResizeHandler(separator);\n separator.appendChild(arrow1);\n this.updateCollapseIcons(i, arrow1, arrow2);\n separator.setAttribute('tabindex', '0');\n if (this.enableReversePanes) {\n separator.setAttribute('dir', 'ltr');\n }\n else {\n separator.removeAttribute('dir');\n }\n separator.addEventListener('focus', function () {\n separator.classList.add(SPLIT_BAR_ACTIVE);\n proxy.currentSeparator = separator;\n proxy.getPaneDetails();\n });\n separator.addEventListener('blur', function () {\n separator.classList.remove(SPLIT_BAR_ACTIVE);\n });\n return separator;\n };\n Splitter.prototype.updateResizablePanes = function (index) {\n this.getPaneDetails();\n // eslint-disable-next-line\n this.isResizable() ? this.allPanes[index].classList.add(RESIZABLE_PANE) : this.allPanes[index].classList.remove(RESIZABLE_PANE);\n };\n Splitter.prototype.addSeparator = function (target) {\n var childCount = this.allPanes.length;\n var clonedEle = target.children;\n var separator;\n for (var i = 0; i < childCount; i++) {\n if (i < childCount - 1) {\n separator = this.createSeparator(i);\n setStyleAttribute(separator, { 'order': (i * 2) + 1 });\n this.separatorOrder.push((i * 2) + 1);\n clonedEle[i].parentNode.appendChild(separator);\n this.currentSeparator = separator;\n separator.setAttribute('role', 'separator');\n separator.setAttribute('aria-orientation', this.orientation.toLowerCase());\n this.wireClickEvents();\n if (!isNullOrUndefined(separator)) {\n if (this.isResizable()) {\n EventHandler.add(separator, 'mousedown', this.onMouseDown, this);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(separator, eventName, this.onMouseDown, this);\n separator.classList.add(RESIZABLE_BAR);\n this.updateResizablePanes(i);\n }\n else {\n addClass([select('.' + RESIZE_BAR, separator)], HIDE_HANDLER);\n }\n }\n }\n else {\n if (separator) {\n addClass([separator], LAST_BAR);\n }\n if (childCount > 1) {\n this.updateResizablePanes(i);\n }\n }\n }\n if (Browser.info.name === 'msie') {\n var allBar = this.element.querySelectorAll('.e-splitter .e-resize-handler');\n for (var i = 0; i < allBar.length; i++) {\n var sepSize = isNullOrUndefined(this.separatorSize) ? 1 : this.separatorSize;\n allBar[i].style.paddingLeft = sepSize / 2 + 'px';\n allBar[i].style.paddingRight = sepSize / 2 + 'px';\n }\n }\n };\n Splitter.prototype.isResizable = function () {\n var resizable = false;\n if ((!isNullOrUndefined(this.paneSettings[this.getPreviousPaneIndex()]) &&\n this.paneSettings[this.getPreviousPaneIndex()].resizable &&\n !isNullOrUndefined(this.paneSettings[this.getNextPaneIndex()]) &&\n this.paneSettings[this.getNextPaneIndex()].resizable) ||\n isNullOrUndefined(this.paneSettings[this.getNextPaneIndex()])) {\n resizable = true;\n }\n return resizable;\n };\n Splitter.prototype.addMouseActions = function (separator) {\n var _this = this;\n var sTout;\n var hoverTimeOut;\n separator.addEventListener('mouseenter', function () {\n /* istanbul ignore next */\n sTout = setTimeout(function () {\n addClass([separator], [SPLIT_BAR_HOVER]);\n }, _this.iconsDelay);\n });\n separator.addEventListener('mouseleave', function () {\n clearTimeout(sTout);\n removeClass([separator], [SPLIT_BAR_HOVER]);\n });\n separator.addEventListener('mouseout', function () {\n clearTimeout(hoverTimeOut);\n });\n separator.addEventListener('mouseover', function () {\n /* istanbul ignore next */\n hoverTimeOut = setTimeout(function () {\n addClass([separator], [SPLIT_BAR_HOVER]);\n });\n });\n };\n Splitter.prototype.getEventType = function (e) {\n return (e.indexOf('mouse') > -1) ? 'mouse' : 'touch';\n };\n Splitter.prototype.updateCurrentSeparator = function (target) {\n this.currentSeparator = this.isSeparator(target) ? target.parentElement : target;\n };\n Splitter.prototype.isSeparator = function (target) {\n return (target.classList.contains(SPLIT_BAR) ? false : true);\n };\n Splitter.prototype.isMouseEvent = function (e) {\n var isMouse = false;\n if (this.getEventType(e.type) === 'mouse' || (!isNullOrUndefined(e.pointerType) &&\n this.getEventType(e.pointerType) === 'mouse')) {\n isMouse = true;\n }\n return isMouse;\n };\n Splitter.prototype.updateCursorPosition = function (e, type) {\n if (this.isMouseEvent(e)) {\n this.changeCoordinates({ x: e.pageX, y: e.pageY }, type);\n }\n else {\n var eventType = Browser.info.name !== 'msie' ? e.touches[0] : e;\n this.changeCoordinates({ x: eventType.pageX, y: eventType.pageY }, type);\n }\n };\n Splitter.prototype.changeCoordinates = function (coordinates, type) {\n if (type === 'previous') {\n this.previousCoordinates = coordinates;\n }\n else {\n this.currentCoordinates = coordinates;\n }\n };\n Splitter.prototype.reportWindowSize = function () {\n var _this = this;\n var paneCount = this.allPanes.length;\n if (!document.body.contains(this.element)) {\n document.defaultView.removeEventListener('resize', this.onReportWindowSize);\n return;\n }\n for (var i = 0; i < paneCount; i++) {\n if (isNullOrUndefined(this.paneSettings[i].size)) {\n this.allPanes[i].classList.remove(STATIC_PANE);\n }\n if (paneCount - 1 === i) {\n var staticPaneCount = this.element.querySelectorAll('.' + STATIC_PANE).length;\n if (staticPaneCount === paneCount) {\n removeClass([this.allPanes[i]], STATIC_PANE);\n }\n }\n }\n if (paneCount > 0) {\n setTimeout(function () {\n _this.updateSplitterSize(true);\n }, 200);\n }\n };\n Splitter.prototype.updateSplitterSize = function (iswindowResize) {\n var totalWidth = 0;\n var flexPaneIndexes = [];\n var flexCount = 0;\n var children = this.element.children;\n for (var i = 0, len = children.length; i < len; i++) {\n totalWidth += this.orientation === 'Horizontal' ? children[i].offsetWidth :\n children[i].offsetHeight;\n }\n for (var j = 0, len = this.allBars.length; j < len; j++) {\n totalWidth += this.orientation === 'Horizontal' ? parseInt(getComputedStyle(this.allBars[j]).marginLeft, 10) +\n // eslint-disable-next-line max-len\n parseInt(getComputedStyle(this.allBars[j]).marginLeft, 10) : parseInt(getComputedStyle(this.allBars[j]).marginTop, 10) +\n parseInt(getComputedStyle(this.allBars[j]).marginBottom, 10);\n }\n var diff = this.orientation === 'Horizontal' ? this.element.offsetWidth -\n ((this.border * 2) + totalWidth) :\n this.element.offsetHeight - ((this.border * 2) + totalWidth);\n for (var i = 0, len = this.allPanes.length; i < len; i++) {\n if (this.allPanes[i].innerText === '' ? !(this.paneSettings[i].size) || !(this.allPanes[i].innerText === '')\n : !(this.paneSettings[i].size) && !(this.allPanes[i].innerText === '')) {\n flexPaneIndexes[flexCount] = i;\n flexCount++;\n }\n }\n var avgDiffWidth = diff / flexPaneIndexes.length;\n for (var j = 0, len = flexPaneIndexes.length; j < len; j++) {\n if (this.allPanes[flexPaneIndexes[j]].style.flexBasis !== '') {\n this.allPanes[flexPaneIndexes[j]].style.flexBasis = this.orientation === 'Horizontal' ?\n (this.allPanes[flexPaneIndexes[j]].offsetWidth + avgDiffWidth) + 'px' :\n (this.allPanes[flexPaneIndexes[j]].offsetHeight + avgDiffWidth) + 'px';\n }\n }\n if (this.allPanes.length === 2 && iswindowResize) {\n var paneCount = this.allPanes.length;\n var minValue = void 0;\n var paneMinRange = void 0;\n var paneIndex = 0;\n var updatePane = void 0;\n var flexPane = void 0;\n for (var i = 0; i < paneCount; i++) {\n if (!isNullOrUndefined(this.paneSettings[i].min)) {\n paneMinRange = this.convertPixelToNumber((this.paneSettings[i].min).toString());\n if (this.paneSettings[i].min.indexOf('%') > 0) {\n paneMinRange = this.convertPercentageToPixel(this.paneSettings[i].min);\n }\n minValue = this.convertPixelToNumber((paneMinRange).toString());\n if ((this.orientation === 'Horizontal' ? this.allPanes[i].offsetWidth : this.allPanes[i].offsetHeight) < minValue) {\n if (i === paneIndex) {\n updatePane = this.allPanes[i];\n flexPane = this.allPanes[i + 1];\n }\n else {\n updatePane = this.allPanes[i];\n flexPane = this.allPanes[i - 1];\n }\n var sizeDiff = minValue - (this.orientation === 'Horizontal' ?\n this.allPanes[i].offsetWidth : this.allPanes[i].offsetHeight);\n var isPercent = updatePane.style.flexBasis.indexOf('%') > -1;\n var updatePaneOffset = this.orientation === 'Horizontal' ? updatePane.offsetWidth : updatePane.offsetHeight;\n if (!isNullOrUndefined(updatePane) && updatePane.style.flexBasis !== '' && updatePane.classList.contains(STATIC_PANE)) {\n updatePane.style.flexBasis = isPercent ? this.convertPixelToPercentage(updatePaneOffset + sizeDiff) + '%'\n : (updatePaneOffset + sizeDiff) + 'px';\n }\n var flexPaneOffset = this.orientation === 'Horizontal' ? flexPane.offsetWidth : flexPane.offsetHeight;\n if (!isNullOrUndefined(flexPane) && flexPane.style.flexBasis !== '' && !flexPane.classList.contains(STATIC_PANE)) {\n flexPane.style.flexBasis = flexPane.style.flexBasis.indexOf('%') > -1 ?\n this.convertPixelToPercentage(flexPaneOffset - sizeDiff) + '%' : (flexPaneOffset - sizeDiff) + 'px';\n }\n }\n }\n }\n }\n };\n Splitter.prototype.wireResizeEvents = function () {\n document.addEventListener('mousemove', this.onMouseMoveHandler, true);\n document.addEventListener('mouseup', this.onMouseUpHandler, true);\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n document.addEventListener(touchMoveEvent, this.onTouchMoveHandler, true);\n document.addEventListener(touchEndEvent, this.onTouchEndHandler, true);\n };\n Splitter.prototype.unwireResizeEvents = function () {\n this.element.ownerDocument.defaultView.removeEventListener('resize', this.onReportWindowSize);\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n document.removeEventListener('mousemove', this.onMouseMoveHandler, true);\n document.removeEventListener('mouseup', this.onMouseUpHandler, true);\n document.removeEventListener(touchMoveEvent, this.onTouchMoveHandler, true);\n document.removeEventListener(touchEndEvent, this.onTouchEndHandler, true);\n };\n Splitter.prototype.wireClickEvents = function () {\n EventHandler.add(this.currentSeparator, 'touchstart click', this.clickHandler, this);\n };\n Splitter.prototype.clickHandler = function (e) {\n if (!e.target.classList.contains(NAVIGATE_ARROW)) {\n var hoverBars = selectAll('.' + ROOT + ' > .' + SPLIT_BAR + '.' + SPLIT_BAR_HOVER);\n if (hoverBars.length > 0) {\n removeClass(hoverBars, SPLIT_BAR_HOVER);\n }\n e.target.classList.add(SPLIT_BAR_HOVER);\n }\n this.splitterDetails(e);\n var icon = e.target;\n if (icon.classList.contains(ARROW_LEFT) || icon.classList.contains(ARROW_RIGHT) ||\n icon.classList.contains(ARROW_DOWN) || icon.classList.contains(ARROW_UP)) {\n if (!this.nextPane.classList.contains(PANE_HIDDEN) && !this.previousPane.classList.contains(PANE_HIDDEN)) {\n this.collapseAction(e);\n }\n else {\n this.expandAction(e);\n }\n this.updateSplitterSize();\n }\n };\n Splitter.prototype.expandAction = function (e) {\n var _this = this;\n var eventArgs = this.beforeAction(e);\n if (this.expandFlag) {\n this.trigger('beforeExpand', eventArgs, function (beforeExpandArgs) {\n if (!beforeExpandArgs.cancel) {\n _this.expandPane(e);\n }\n var expandEventArgs = _this.afterAction(e);\n _this.trigger('expanded', expandEventArgs);\n });\n }\n else {\n this.expandPane(e);\n }\n };\n Splitter.prototype.getIcon = function (e) {\n var targetClass = e.target.className.split(' ').filter(function (className) {\n return className !== NAVIGATE_ARROW && className !== HIDE_ICON;\n });\n return targetClass[0];\n };\n Splitter.prototype.expandPane = function (e) {\n this.removeStaticPanes();\n var collapseCount = this.element.querySelectorAll('.' + COLLAPSE_PANE).length;\n var flexStatus = (!this.previousPane.classList.contains(COLLAPSE_PANE) &&\n this.previousPane.classList.contains(STATIC_PANE) && !this.nextPane.classList.contains(COLLAPSE_PANE) &&\n !this.nextPane.classList.contains(EXPAND_PANE) && this.nextPane.nextElementSibling.classList.contains(PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(STATIC_PANE) && !(collapseCount === this.allPanes.length - 2));\n var collapseClass = [COLLAPSE_PANE, PANE_HIDDEN];\n var icon = this.getIcon(e);\n var isLeftOrUp = icon === ARROW_LEFT || icon === ARROW_UP;\n var collapsePane = isLeftOrUp ? this.nextPane : this.previousPane;\n var expandPane = isLeftOrUp ? this.previousPane : this.nextPane;\n var expandPaneIndex = isLeftOrUp ? this.nextPaneIndex : this.prevPaneIndex;\n removeClass([collapsePane], collapseClass);\n collapsePane.setAttribute('aria-hidden', 'false');\n // cCount is calculated after removing the COLLAPSE_PANE\n var cCount = this.element.querySelectorAll('.' + COLLAPSE_PANE).length;\n if (cCount > 0) {\n if (!expandPane.classList.contains(COLLAPSE_PANE)) {\n addClass([expandPane], EXPAND_PANE);\n expandPane.setAttribute('aria-expanded', 'true');\n }\n }\n else if (cCount === 0) {\n for (var i = 0; i < this.allPanes.length; i++) {\n if (!this.allPanes[i].classList.contains(COLLAPSE_PANE)) {\n removeClass([this.allPanes[i]], EXPAND_PANE);\n this.allPanes[i].setAttribute('aria-expanded', 'false');\n }\n }\n }\n if (this.expandFlag) {\n this.updatePaneSettings(expandPaneIndex, false);\n }\n this.updateIconsOnExpand(e, icon);\n this.updateFlexGrow();\n if (flexStatus) {\n this.previousPane.classList.remove(EXPAND_PANE);\n this.previousPane.setAttribute('aria-expanded', 'false');\n this.previousPane.style.flexGrow = '';\n }\n };\n Splitter.prototype.updateFlexGrow = function () {\n var collapseCount = 0;\n for (var j = 0; j < this.element.children.length; j++) {\n if (this.element.children[j].classList.contains(COLLAPSE_PANE)) {\n collapseCount = collapseCount + 1;\n }\n }\n var visiblePane = collapseCount === this.allPanes.length - 2;\n var panes = this.allPanes;\n for (var i = 0; i < panes.length; i++) {\n panes[i].style.flexGrow = '';\n if (visiblePane && this.allPanes[i].classList.contains(COLLAPSE_PANE) && this.paneSettings[i].size &&\n i !== this.allPanes.length - 1) {\n panes[i].style.flexGrow = '';\n }\n if (panes[i].classList.contains(EXPAND_PANE)) {\n panes[i].style.flexGrow = '1';\n }\n else if (panes[i].classList.contains(COLLAPSE_PANE)) {\n panes[i].style.flexGrow = '0';\n }\n }\n };\n Splitter.prototype.hideTargetBarIcon = function (targetBar, targetArrow) {\n addClass([select('.' + targetArrow, targetBar)], HIDE_ICON);\n };\n Splitter.prototype.showTargetBarIcon = function (targetBar, targetArrow) {\n removeClass([select('.' + targetArrow, targetBar)], HIDE_ICON);\n };\n Splitter.prototype.updateIconsOnCollapse = function (e, targetIcon) {\n this.splitterProperty();\n var removeIcon = this.arrow;\n var otherBar = this.currentBarIndex === (this.allBars.length - 1) ? this.prevBar : this.nextBar;\n var otherBarIndex = this.currentBarIndex === (this.allBars.length - 1) ? this.currentBarIndex - 1\n : this.currentBarIndex + 1;\n if (!e.target.classList.contains(HIDE_ICON)) {\n if (this.splitInstance.prevPaneCollapsed || this.splitInstance.nextPaneCollapsed) {\n if (this.paneSettings[this.prevPaneIndex].collapsible && this.paneSettings[this.nextPaneIndex].collapsible) {\n this.resizableModel(this.currentBarIndex, false);\n this.hideTargetBarIcon(this.currentSeparator, targetIcon);\n if (!isNullOrUndefined(otherBar)) {\n var otherPrevPaneIndex = otherBarIndex;\n var otherNextPaneIndex = otherBarIndex + 1;\n var collapsecount = this.getCollapseCount(otherPrevPaneIndex, otherNextPaneIndex);\n if (this.paneSettings[otherPrevPaneIndex].collapsible &&\n this.paneSettings[otherNextPaneIndex].collapsible) {\n if (collapsecount === 1) {\n this.hideTargetBarIcon(otherBar, removeIcon);\n this.resizableModel(otherBarIndex, false);\n }\n else if (collapsecount === 2) {\n this.hideBarIcons(otherBar);\n this.resizableModel(otherBarIndex, false);\n }\n if (!this.paneSettings[otherPrevPaneIndex].collapsible ||\n !this.paneSettings[otherNextPaneIndex].collapsible) {\n this.hideTargetBarIcon(otherBar, targetIcon);\n }\n }\n }\n }\n else {\n this.showTargetBarIcon(this.currentSeparator, removeIcon);\n this.hideTargetBarIcon(this.currentSeparator, targetIcon);\n this.resizableModel(this.currentBarIndex, false);\n }\n }\n }\n else {\n this.resizableModel(this.currentBarIndex, false);\n if (!isNullOrUndefined(otherBar)) {\n this.resizableModel(otherBarIndex, false);\n }\n if (!this.paneSettings[this.prevPaneIndex].collapsible || !this.paneSettings[this.nextPaneIndex].collapsible) {\n if (!isNullOrUndefined(otherBar)) {\n this.hideTargetBarIcon(otherBar, targetIcon);\n }\n this.hideTargetBarIcon(this.currentSeparator, removeIcon);\n }\n else {\n if (!isNullOrUndefined(otherBar)) {\n this.hideTargetBarIcon(otherBar, removeIcon);\n }\n this.showTargetBarIcon(this.currentSeparator, removeIcon);\n }\n }\n };\n Splitter.prototype.collapseAction = function (e) {\n var _this = this;\n var eventArgs = this.beforeAction(e);\n if (this.collapseFlag) {\n this.collapsePane(e);\n }\n else {\n this.trigger('beforeCollapse', eventArgs, function (beforeCollapseArgs) {\n if (!beforeCollapseArgs.cancel) {\n _this.collapsePane(e);\n var collapseEventArgs = _this.afterAction(e);\n _this.trigger('collapsed', collapseEventArgs);\n }\n });\n }\n };\n Splitter.prototype.collapsePane = function (e) {\n this.removeStaticPanes();\n var collapseCount = this.element.querySelectorAll('.' + COLLAPSE_PANE).length;\n var flexStatus = (this.previousPane.classList.contains(STATIC_PANE) &&\n !this.previousPane.classList.contains(COLLAPSE_PANE) && !this.nextPane.classList.contains(COLLAPSE_PANE) &&\n this.nextPane.nextElementSibling.classList.contains(PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(STATIC_PANE) &&\n !this.nextPane.nextElementSibling.classList.contains(COLLAPSE_PANE) &&\n !(collapseCount === this.allPanes.length - 2)) || (this.nextPane.classList.contains(COLLAPSE_PANE) &&\n !this.previousPane.classList.contains(STATIC_PANE) && this.nextPane.classList.contains(STATIC_PANE));\n var collapseClass = [COLLAPSE_PANE, PANE_HIDDEN];\n var icon = this.getIcon(e);\n var isLeftOrUp = icon === ARROW_LEFT || icon === ARROW_UP;\n var collapsePane = isLeftOrUp ? this.previousPane : this.nextPane;\n var expandPane = isLeftOrUp ? this.nextPane : this.previousPane;\n var collapsePaneIndex = isLeftOrUp ? this.prevPaneIndex : this.nextPaneIndex;\n removeClass([collapsePane], EXPAND_PANE);\n collapsePane.setAttribute('aria-expanded', 'false');\n addClass([collapsePane], collapseClass);\n collapsePane.setAttribute('aria-hidden', 'true');\n var isFlexPane = collapsePane.style.flexBasis === '';\n if (isFlexPane) {\n addClass([expandPane], EXPAND_PANE);\n expandPane.setAttribute('aria-expanded', 'true');\n }\n else {\n var isFlexPaneHidden = true;\n for (var i = 0; i < this.allPanes.length; i++) {\n if (!this.allPanes[i].classList.contains(COLLAPSE_PANE)) {\n if (this.allPanes[i].style.flexBasis === '' && !this.allPanes[i].classList.contains(COLLAPSE_PANE)\n && !this.allPanes[i].classList.contains(EXPAND_PANE)) {\n addClass([this.allPanes[i]], EXPAND_PANE);\n this.allPanes[i].setAttribute('aria-expanded', 'true');\n isFlexPaneHidden = false;\n break;\n }\n }\n }\n if (isFlexPaneHidden) {\n addClass([expandPane], EXPAND_PANE);\n expandPane.setAttribute('aria-expanded', 'true');\n }\n }\n if (!this.collapseFlag) {\n this.updatePaneSettings(collapsePaneIndex, true);\n }\n this.updateIconsOnCollapse(e, icon);\n this.updateFlexGrow();\n if (flexStatus) {\n this.nextPane.classList.remove(EXPAND_PANE);\n this.nextPane.style.flexGrow = '';\n }\n };\n Splitter.prototype.removeStaticPanes = function () {\n for (var i = 0; i < this.allPanes.length; i++) {\n if (isNullOrUndefined(this.paneSettings[i].size)) {\n this.allPanes[i].classList.remove(STATIC_PANE);\n }\n }\n };\n Splitter.prototype.beforeAction = function (e) {\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n separator: this.currentSeparator,\n cancel: false\n };\n return eventArgs;\n };\n Splitter.prototype.updatePaneSettings = function (index, collapsed) {\n var paneValues = this.paneSettings;\n paneValues[index].collapsed = collapsed;\n this.setProperties({ 'paneSettings': paneValues }, true);\n };\n Splitter.prototype.splitterProperty = function () {\n this.splitInstance = {\n currentBarIndex: this.currentBarIndex,\n nextPaneCollapsible: this.nextPane.classList.contains(COLLAPSIBLE),\n prevPaneCollapsible: this.previousPane.classList.contains(COLLAPSIBLE),\n prevPaneExpanded: this.previousPane.classList.contains(EXPAND_PANE),\n nextPaneExpanded: this.nextPane.classList.contains(EXPAND_PANE),\n nextPaneCollapsed: this.nextPane.classList.contains(COLLAPSE_PANE),\n prevPaneCollapsed: this.previousPane.classList.contains(COLLAPSE_PANE),\n nextPaneIndex: this.getNextPaneIndex(),\n prevPaneIndex: this.getPreviousPaneIndex(),\n nextPaneNextEle: this.nextPane.nextElementSibling,\n prevPanePreEle: this.previousPane.previousElementSibling\n };\n };\n Splitter.prototype.showCurrentBarIcons = function () {\n removeClass([select('.' + this.arrow, this.currentSeparator)], HIDE_ICON);\n };\n Splitter.prototype.hideBarIcons = function (bar) {\n addClass([select('.' + this.arrow, bar)], HIDE_ICON);\n };\n Splitter.prototype.getCollapseCount = function (prevPaneIndex, nextPaneIndex) {\n var collapsecount = 0;\n if (this.allPanes[prevPaneIndex].classList.contains(COLLAPSE_PANE)) {\n collapsecount = collapsecount + 1;\n }\n if (this.allPanes[nextPaneIndex].classList.contains(COLLAPSE_PANE)) {\n collapsecount = collapsecount + 1;\n }\n return collapsecount;\n };\n Splitter.prototype.checkResizableProp = function (prevPaneIndex, nextPaneIndex) {\n if (this.paneSettings[prevPaneIndex].resizable && this.paneSettings[nextPaneIndex].resizable) {\n return true;\n }\n else {\n return false;\n }\n };\n Splitter.prototype.updateIconsOnExpand = function (e, targetIcon) {\n this.splitterProperty();\n var showIcon = this.arrow;\n var otherBar = this.currentBarIndex === (this.allBars.length - 1) ? this.prevBar : this.nextBar;\n var otherBarIndex = this.currentBarIndex === (this.allBars.length - 1) ?\n this.currentBarIndex - 1 : this.currentBarIndex + 1;\n if (!e.target.classList.contains(HIDE_ICON)) {\n // prevPane ! collapsed && nextPane ! collapsed\n if (!this.splitInstance.prevPaneCollapsed && !this.splitInstance.nextPaneCollapsed) {\n if (this.paneSettings[this.prevPaneIndex].collapsible && this.paneSettings[this.nextPaneIndex].collapsible) {\n this.showCurrentBarIcons();\n if (this.checkResizableProp(this.prevPaneIndex, this.nextPaneIndex)) {\n this.resizableModel(this.currentBarIndex, true);\n }\n else {\n this.resizableModel(this.currentBarIndex, false);\n }\n if (!isNullOrUndefined(otherBar)) {\n var otherPrevPaneIndex = otherBarIndex;\n var otherNextPaneIndex = otherBarIndex + 1;\n var collapsecount = this.getCollapseCount(otherPrevPaneIndex, otherNextPaneIndex);\n if (this.paneSettings[otherPrevPaneIndex].collapsible &&\n this.paneSettings[otherNextPaneIndex].collapsible) {\n if (collapsecount === 0) {\n this.showTargetBarIcon(otherBar, targetIcon);\n this.showTargetBarIcon(otherBar, showIcon);\n if (this.checkResizableProp(otherPrevPaneIndex, otherNextPaneIndex)) {\n this.resizableModel(otherBarIndex, true);\n }\n }\n else if (collapsecount === 1) {\n this.hideBarIcons(otherBar);\n // If condition Edge case in flexible cases\n if (this.allPanes[otherPrevPaneIndex].classList.contains(EXPAND_PANE) ||\n this.allPanes[otherNextPaneIndex].classList.contains(EXPAND_PANE)) {\n this.showTargetBarIcon(otherBar, showIcon);\n }\n else {\n // Common case\n this.showTargetBarIcon(otherBar, targetIcon);\n }\n this.resizableModel(otherBarIndex, false);\n }\n }\n }\n }\n else {\n this.hideTargetBarIcon(this.currentSeparator, targetIcon);\n this.showTargetBarIcon(this.currentSeparator, showIcon);\n if (!this.splitInstance.prevPaneCollapsed && !this.splitInstance.nextPaneCollapsed) {\n if (this.checkResizableProp(this.prevPaneIndex, this.nextPaneIndex)) {\n this.resizableModel(this.currentBarIndex, true);\n }\n }\n else {\n this.resizableModel(this.currentBarIndex, false);\n }\n }\n }\n }\n else {\n if (!this.paneSettings[this.prevPaneIndex].collapsible && !this.paneSettings[this.nextPaneIndex].collapsible) {\n if (this.checkResizableProp(this.prevPaneIndex, this.nextPaneIndex)) {\n this.resizableModel(this.currentBarIndex, true);\n }\n }\n }\n };\n Splitter.prototype.afterAction = function (e) {\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n separator: this.currentSeparator\n };\n return eventArgs;\n };\n Splitter.prototype.currentIndex = function (e) {\n this.currentBarIndex = this.getOrderIndex(parseInt(e.target.parentElement.style.order, 10), 'splitbar');\n };\n Splitter.prototype.getSeparatorIndex = function (target) {\n var array = [].slice.call(this.allBars);\n array = this.enableReversePanes ? array.reverse() : array;\n return array.indexOf(target);\n };\n Splitter.prototype.getPrevBar = function (currentBar) {\n var prevbar = this.allBars[(currentBar - 1)];\n return prevbar;\n };\n Splitter.prototype.getNextBar = function (currentBar) {\n var prevbar = this.allBars[(currentBar + 1)];\n return prevbar;\n };\n Splitter.prototype.updateBars = function (index) {\n this.prevBar = this.getPrevBar(index);\n this.nextBar = this.getNextBar(index);\n };\n Splitter.prototype.splitterDetails = function (e) {\n if (this.orientation === 'Horizontal') {\n this.arrow = e.target.classList.contains(ARROW_LEFT) ? ARROW_RIGHT : ARROW_LEFT;\n }\n else {\n this.arrow = e.target.classList.contains(ARROW_UP) ? ARROW_DOWN : ARROW_UP;\n }\n this.updateCurrentSeparator(e.target);\n this.currentIndex(e);\n this.updateBars(this.currentBarIndex);\n this.getPaneDetails();\n };\n Splitter.prototype.triggerResizing = function (e) {\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n paneSize: [this.prePaneDimenson, this.nextPaneDimension],\n separator: this.currentSeparator\n };\n this.trigger('resizing', eventArgs);\n };\n Splitter.prototype.onMouseDown = function (e) {\n var _this = this;\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(NAVIGATE_ARROW)) {\n return;\n }\n this.updateCurrentSeparator(target);\n addClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n this.updateCursorPosition(e, 'previous');\n this.getPaneDetails();\n var eventArgs = {\n element: this.element,\n event: e,\n pane: [this.previousPane, this.nextPane],\n index: [this.getPreviousPaneIndex(), this.getNextPaneIndex()],\n separator: this.currentSeparator,\n cancel: false\n };\n for (var i = 0; i < this.element.querySelectorAll('iframe').length; i++) {\n this.element.querySelectorAll('iframe')[i].style.pointerEvents = 'none';\n }\n this.trigger('resizeStart', eventArgs, function (resizeStartArgs) {\n if (!resizeStartArgs.cancel) {\n _this.wireResizeEvents();\n _this.checkPaneSize(e);\n }\n });\n };\n Splitter.prototype.updatePaneFlexBasis = function (pane) {\n var previous;\n if (pane.style.flexBasis.indexOf('%') > 0) {\n previous = this.removePercentageUnit(pane.style.flexBasis);\n }\n else {\n if (pane.style.flexBasis !== '') {\n previous = this.convertPixelToPercentage(this.convertPixelToNumber(pane.style.flexBasis));\n }\n else {\n var offset = (this.orientation === 'Horizontal') ? (pane.offsetWidth) : (pane.offsetHeight);\n previous = this.convertPixelToPercentage(offset);\n }\n }\n return previous;\n };\n Splitter.prototype.removePercentageUnit = function (value) {\n return parseFloat(value.slice(0, value.indexOf('%')));\n };\n Splitter.prototype.convertPercentageToPixel = function (value, targetElement) {\n var percentage = value.toString();\n var convertedValue;\n if (percentage.indexOf('%') > -1) {\n convertedValue = parseFloat(percentage.slice(0, percentage.indexOf('%')));\n var offsetValue = void 0;\n if (!isNullOrUndefined(targetElement)) {\n offsetValue = this.panesDimensions[this.allPanes.indexOf(targetElement)];\n }\n else {\n offsetValue = (this.orientation === 'Horizontal') ? this.element.offsetWidth : this.element.offsetHeight;\n }\n convertedValue = Math.ceil(offsetValue * (convertedValue / 100));\n }\n else {\n convertedValue = parseInt(percentage, 10);\n }\n return convertedValue;\n };\n Splitter.prototype.convertPixelToPercentage = function (value) {\n var offsetValue = (this.orientation === 'Horizontal') ? this.element.offsetWidth : this.element.offsetHeight;\n return (value / offsetValue) * 100;\n };\n Splitter.prototype.convertPixelToNumber = function (value) {\n value = value.toString();\n if (value.indexOf('p') > -1) {\n return parseFloat(value.slice(0, value.indexOf('p')));\n }\n else {\n return parseFloat(value);\n }\n };\n Splitter.prototype.calcDragPosition = function (rectValue, offsetValue) {\n var separatorPosition = this.orientation === 'Horizontal' ? (this.currentCoordinates.x - rectValue) :\n (this.currentCoordinates.y - rectValue);\n var separator;\n separator = separatorPosition / offsetValue;\n separator = (separator > 1) ? 1 : (separator < 0) ? 0 : separator;\n return separator * offsetValue;\n };\n Splitter.prototype.getSeparatorPosition = function (e) {\n this.updateCursorPosition(e, 'current');\n var rectBound = (this.orientation === 'Horizontal') ? this.element.getBoundingClientRect().left + window.scrollX :\n this.element.getBoundingClientRect().top + window.scrollY;\n var offSet = (this.orientation === 'Horizontal') ? this.element.offsetWidth : this.element.offsetHeight;\n return this.calcDragPosition(rectBound, offSet);\n };\n Splitter.prototype.getMinMax = function (paneIndex, target, selection) {\n var defaultVal = selection === 'min' ? 0 : null;\n // eslint-disable-next-line\n var paneValue = null;\n if (selection === 'min') {\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(this.paneSettings[paneIndex].min)) {\n paneValue = this.paneSettings[paneIndex].min;\n }\n }\n else {\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(this.paneSettings[paneIndex].max)) {\n paneValue = this.paneSettings[paneIndex].max;\n }\n }\n if (this.paneSettings.length > 0 && !isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(paneValue)) {\n if (paneValue.indexOf('%') > 0) {\n paneValue = this.convertPercentageToPixel(paneValue).toString();\n }\n return this.convertPixelToNumber(paneValue);\n }\n else {\n return defaultVal;\n }\n };\n Splitter.prototype.getPreviousPaneIndex = function () {\n var separatorIndex = this.enableReversePanes ? parseInt(this.currentSeparator.style.order, 10) + 1 :\n parseInt(this.currentSeparator.style.order, 10) - 1;\n return this.getOrderIndex(separatorIndex, 'pane');\n };\n Splitter.prototype.getNextPaneIndex = function () {\n var separatorIndex = this.enableReversePanes ? parseInt(this.currentSeparator.style.order, 10) - 1 :\n parseInt(this.currentSeparator.style.order, 10) + 1;\n return this.getOrderIndex(separatorIndex, 'pane');\n };\n Splitter.prototype.getPaneDetails = function () {\n var prevPane = null;\n var nextPane = null;\n this.order = parseInt(this.currentSeparator.style.order, 10);\n if (this.allPanes.length > 1) {\n prevPane = this.getPrevPane(this.order);\n nextPane = this.getNextPane(this.order);\n }\n if (prevPane && nextPane) {\n this.previousPane = prevPane;\n this.nextPane = nextPane;\n this.prevPaneIndex = this.getPreviousPaneIndex();\n this.nextPaneIndex = this.getNextPaneIndex();\n }\n else {\n return;\n }\n };\n Splitter.prototype.getPaneHeight = function (pane) {\n return ((this.orientation === 'Horizontal') ? pane.offsetWidth.toString() :\n pane.offsetHeight.toString());\n };\n Splitter.prototype.isValidSize = function (paneIndex) {\n var isValid = false;\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) &&\n !isNullOrUndefined(this.paneSettings[paneIndex].size) &&\n this.paneSettings[paneIndex].size.indexOf('%') > -1) {\n isValid = true;\n }\n return isValid;\n };\n Splitter.prototype.getPaneDimensions = function () {\n this.previousPaneHeightWidth = (this.previousPane.style.flexBasis === '') ? this.getPaneHeight(this.previousPane) :\n this.previousPane.style.flexBasis;\n this.nextPaneHeightWidth = (this.nextPane.style.flexBasis === '') ? this.getPaneHeight(this.nextPane) :\n this.nextPane.style.flexBasis;\n if (this.isValidSize(this.prevPaneIndex)) {\n this.previousPaneHeightWidth = this.convertPercentageToPixel(this.previousPaneHeightWidth).toString();\n this.updatePrePaneInPercentage = true;\n }\n if (this.isValidSize(this.nextPaneIndex)) {\n this.nextPaneHeightWidth = this.convertPercentageToPixel(this.nextPaneHeightWidth).toString();\n this.updateNextPaneInPercentage = true;\n }\n this.prePaneDimenson = this.convertPixelToNumber(this.previousPaneHeightWidth.toString());\n this.nextPaneDimension = this.convertPixelToNumber(this.nextPaneHeightWidth.toString());\n };\n Splitter.prototype.checkCoordinates = function (pageX, pageY) {\n var coordinatesChanged = true;\n if ((pageX === this.previousCoordinates.x && pageY === this.previousCoordinates.y)) {\n coordinatesChanged = false;\n }\n return coordinatesChanged;\n };\n Splitter.prototype.isCursorMoved = function (e) {\n var cursorMoved = true;\n if (this.getEventType(e.type) === 'mouse' || (!isNullOrUndefined(e.pointerType)) &&\n this.getEventType(e.pointerType) === 'mouse') {\n cursorMoved = this.checkCoordinates(e.pageX, e.pageY);\n }\n else {\n cursorMoved = (Browser.info.name !== 'msie') ?\n this.checkCoordinates(e.touches[0].pageX, e.touches[0].pageY) :\n this.checkCoordinates(e.pageX, e.pageY);\n }\n return cursorMoved;\n };\n Splitter.prototype.getBorder = function () {\n this.border = 0;\n var border = this.orientation === 'Horizontal' ? ((this.element.offsetWidth - this.element.clientWidth) / 2) :\n (this.element.offsetHeight - this.element.clientHeight) / 2;\n this.border = Browser.info.name !== 'chrome' ? this.border : border;\n };\n Splitter.prototype.onMouseMove = function (e) {\n if (!this.isCursorMoved(e)) {\n return;\n }\n this.getPaneDetails();\n this.getPaneDimensions();\n this.triggerResizing(e);\n var left = this.validateDraggedPosition(this.getSeparatorPosition(e), this.prePaneDimenson, this.nextPaneDimension);\n var separatorNewPosition;\n this.getBorder();\n if (this.orientation === 'Horizontal') {\n separatorNewPosition = (this.element.getBoundingClientRect().left + left) -\n this.currentSeparator.getBoundingClientRect().left + this.border;\n }\n else {\n separatorNewPosition = (this.element.getBoundingClientRect().top + left) -\n this.currentSeparator.getBoundingClientRect().top + this.border;\n }\n this.nextPaneHeightWidth =\n (typeof (this.nextPaneHeightWidth) === 'string' && this.nextPaneHeightWidth.indexOf('p') > -1) ?\n this.convertPixelToNumber(this.nextPaneHeightWidth) : parseInt(this.nextPaneHeightWidth, 10);\n this.previousPaneHeightWidth =\n (typeof (this.previousPaneHeightWidth) === 'string' && this.previousPaneHeightWidth.indexOf('p') > -1) ?\n this.convertPixelToNumber(this.previousPaneHeightWidth) : parseInt(this.previousPaneHeightWidth, 10);\n this.prevPaneCurrentWidth = separatorNewPosition + this.previousPaneHeightWidth;\n this.nextPaneCurrentWidth = this.nextPaneHeightWidth - separatorNewPosition;\n this.validateMinMaxValues();\n if (this.nextPaneCurrentWidth < 0) {\n this.nextPaneCurrentWidth = 0;\n }\n /* istanbul ignore next */\n if (this.prevPaneCurrentWidth < 0) {\n this.prevPaneCurrentWidth = 0;\n }\n if ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth) > this.totalWidth) {\n if (this.nextPaneCurrentWidth < this.prevPaneCurrentWidth) {\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth - ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth)\n - this.totalWidth);\n }\n else {\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth - ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth)\n - this.totalWidth);\n }\n }\n /* istanbul ignore next */\n if ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth) < this.totalWidth) {\n var difference = this.totalWidth - ((this.nextPaneCurrentWidth + this.prevPaneCurrentWidth));\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + difference;\n }\n this.calculateCurrentDimensions();\n this.addStaticPaneClass();\n var flexPaneCount = 0;\n for (var i = 0; i < this.paneSettings.length; i++) {\n if (this.paneSettings[i].size === '') {\n flexPaneCount = flexPaneCount + 1;\n }\n else if (this.allPanes[i].style.flexBasis !== '') {\n this.paneSettings[i].size = this.allPanes[i].style.flexBasis;\n }\n }\n var allFlexiblePanes = flexPaneCount === this.allPanes.length;\n // Two flexible Pane Case.\n if (this.previousPane.style.flexBasis === '' && this.nextPane.style.flexBasis === '' && !allFlexiblePanes) {\n var middlePaneIndex = this.allPanes.length % this.allBars.length;\n if (this.prevPaneIndex === middlePaneIndex) {\n this.nextPane.style.flexBasis = this.nextPaneCurrentWidth;\n addClass([this.nextPane], STATIC_PANE);\n }\n else if (this.nextPaneIndex === middlePaneIndex) {\n this.previousPane.style.flexBasis = this.prevPaneCurrentWidth;\n addClass([this.previousPane], STATIC_PANE);\n }\n else {\n this.nextPane.style.flexBasis = this.nextPaneCurrentWidth;\n addClass([this.nextPane], STATIC_PANE);\n }\n } // All panes are flexible\n else if (allFlexiblePanes) {\n this.previousPane.style.flexBasis = this.prevPaneCurrentWidth;\n addClass([this.previousPane], STATIC_PANE);\n this.nextPane.style.flexBasis = this.nextPaneCurrentWidth;\n addClass([this.nextPane], STATIC_PANE);\n } // Two Panesa are Static Pane\n else {\n if (this.previousPane.style.flexBasis !== '' && this.previousPane.classList.contains(STATIC_PANE)) {\n this.previousPane.style.flexBasis = this.prevPaneCurrentWidth;\n }\n if (this.nextPane.style.flexBasis !== '' && this.nextPane.classList.contains(STATIC_PANE)) {\n this.nextPane.style.flexBasis = this.nextPaneCurrentWidth;\n }\n }\n var isStaticPanes = this.previousPane.style.flexBasis !== '' && this.nextPane.style.flexBasis !== '';\n if (!(this.allPanes.length > 2) && isStaticPanes) {\n this.updateSplitterSize();\n }\n };\n // eslint-disable-next-line\n Splitter.prototype.validateMinRange = function (paneIndex, paneCurrentWidth, pane) {\n var paneMinRange = null;\n var paneMinDimensions;\n var difference = 0;\n var validatedVal;\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) && !isNullOrUndefined(this.paneSettings[paneIndex].min)) {\n paneMinRange = this.paneSettings[paneIndex].min.toString();\n }\n if (!isNullOrUndefined(paneMinRange)) {\n if (paneMinRange.indexOf('%') > 0) {\n paneMinRange = this.convertPercentageToPixel(paneMinRange).toString();\n }\n paneMinDimensions = this.convertPixelToNumber(paneMinRange);\n if (paneCurrentWidth < paneMinDimensions) {\n difference = (paneCurrentWidth - paneMinDimensions) <= 0 ? 0 :\n (paneCurrentWidth - paneMinDimensions);\n this.totalWidth = this.totalWidth - difference;\n this.totalPercent = this.convertPixelToPercentage(this.totalWidth);\n validatedVal = paneMinDimensions;\n }\n }\n return isNullOrUndefined(validatedVal) ? paneCurrentWidth : validatedVal;\n };\n // eslint-disable-next-line\n Splitter.prototype.validateMaxRange = function (paneIndex, paneCurrentWidth, pane) {\n var paneMaxRange = null;\n var paneMaxDimensions;\n var validatedVal;\n if (!isNullOrUndefined(this.paneSettings[paneIndex]) && !isNullOrUndefined(this.paneSettings[paneIndex].max)) {\n paneMaxRange = this.paneSettings[paneIndex].max.toString();\n }\n if (!isNullOrUndefined(paneMaxRange)) {\n if (paneMaxRange.indexOf('%') > 0) {\n paneMaxRange = this.convertPercentageToPixel(paneMaxRange).toString();\n }\n paneMaxDimensions = this.convertPixelToNumber(paneMaxRange);\n if (paneCurrentWidth > paneMaxDimensions) {\n this.totalWidth = this.totalWidth - (paneCurrentWidth - paneMaxDimensions);\n this.totalPercent = this.convertPixelToPercentage(this.totalWidth);\n validatedVal = paneMaxDimensions;\n }\n }\n return isNullOrUndefined(validatedVal) ? paneCurrentWidth : validatedVal;\n };\n Splitter.prototype.validateMinMaxValues = function () {\n //validate previous pane minimum range\n this.prevPaneCurrentWidth = this.validateMinRange(this.prevPaneIndex, this.prevPaneCurrentWidth, this.previousPane);\n // Validate next pane minimum range\n this.nextPaneCurrentWidth = this.validateMinRange(this.nextPaneIndex, this.nextPaneCurrentWidth, this.nextPane);\n // validate previous pane maximum range\n this.prevPaneCurrentWidth = this.validateMaxRange(this.prevPaneIndex, this.prevPaneCurrentWidth, this.previousPane);\n // validate next pane maximum range\n this.nextPaneCurrentWidth = this.validateMaxRange(this.nextPaneIndex, this.nextPaneCurrentWidth, this.nextPane);\n };\n Splitter.prototype.equatePaneWidths = function () {\n var difference;\n if ((this.prevPaneCurrentWidth + this.nextPaneCurrentWidth) > this.totalPercent) {\n difference = (this.prevPaneCurrentWidth + this.nextPaneCurrentWidth) - this.totalPercent;\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth - (difference / 2) + '%';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth - (difference / 2) + '%';\n }\n if ((this.prevPaneCurrentWidth + this.nextPaneCurrentWidth) < this.totalPercent) {\n difference = this.totalPercent - (this.prevPaneCurrentWidth + this.nextPaneCurrentWidth);\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth + (difference / 2) + '%';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + (difference / 2) + '%';\n }\n };\n Splitter.prototype.calculateCurrentDimensions = function () {\n if (this.updatePrePaneInPercentage || this.updateNextPaneInPercentage) {\n this.prevPaneCurrentWidth = Math.round(Number(Math.round(this.convertPixelToPercentage(this.prevPaneCurrentWidth)\n * 10) / 10));\n this.nextPaneCurrentWidth = Math.round(Number(Math.round(this.convertPixelToPercentage(this.nextPaneCurrentWidth)\n * 10) / 10));\n if (this.prevPaneCurrentWidth === 0) {\n this.nextPaneCurrentWidth = this.totalPercent;\n }\n if (this.nextPaneCurrentWidth === 0) {\n this.prevPaneCurrentWidth = this.totalPercent;\n }\n if (this.prevPaneCurrentWidth + this.nextPaneCurrentWidth !== this.totalPercent) {\n this.equatePaneWidths();\n }\n else {\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth + '%';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + '%';\n }\n this.prevPaneCurrentWidth = (this.updatePrePaneInPercentage) ? this.prevPaneCurrentWidth :\n this.convertPercentageToPixel(this.prevPaneCurrentWidth) + 'px';\n this.nextPaneCurrentWidth = (this.updateNextPaneInPercentage) ? this.nextPaneCurrentWidth :\n this.convertPercentageToPixel(this.nextPaneCurrentWidth) + 'px';\n this.updatePrePaneInPercentage = false;\n this.updateNextPaneInPercentage = false;\n }\n else {\n this.prevPaneCurrentWidth = this.prevPaneCurrentWidth + 'px';\n this.nextPaneCurrentWidth = this.nextPaneCurrentWidth + 'px';\n }\n };\n Splitter.prototype.addStaticPaneClass = function () {\n if (!this.previousPane.classList.contains(STATIC_PANE) && !(this.previousPane.style.flexBasis === '') && !this.previousPane.classList.contains(EXPAND_PANE)) {\n this.previousPane.classList.add(STATIC_PANE);\n }\n if (!this.nextPane.classList.contains(STATIC_PANE) && !(this.nextPane.style.flexBasis === '') && !this.nextPane.classList.contains(EXPAND_PANE)) {\n this.nextPane.classList.add(STATIC_PANE);\n }\n };\n Splitter.prototype.validateDraggedPosition = function (draggedPos, prevPaneHeightWidth, nextPaneHeightWidth) {\n var separatorTopLeft = (this.orientation === 'Horizontal') ? this.currentSeparator.offsetLeft :\n this.currentSeparator.offsetTop;\n var prePaneRange = separatorTopLeft - prevPaneHeightWidth;\n var nextPaneRange = nextPaneHeightWidth + separatorTopLeft;\n var pane1MinSize = this.getMinMax(this.prevPaneIndex, this.previousPane, 'min');\n var pane2MinSize = this.getMinMax(this.nextPaneIndex, this.nextPane, 'min');\n var pane1MaxSize = this.getMinMax(this.prevPaneIndex, this.previousPane, 'max');\n var pane2MaxSize = this.getMinMax(this.nextPaneIndex, this.nextPane, 'max');\n var validatedSize = draggedPos;\n if (draggedPos > nextPaneRange - pane2MinSize) {\n validatedSize = nextPaneRange - pane2MinSize;\n }\n else if (draggedPos < prePaneRange + pane1MinSize) {\n validatedSize = prePaneRange + pane1MinSize;\n }\n if (!isNullOrUndefined(pane1MaxSize)) {\n if (draggedPos > prePaneRange + pane1MaxSize) {\n validatedSize = prePaneRange + pane1MaxSize;\n }\n }\n else if (!isNullOrUndefined(pane2MaxSize)) {\n if (draggedPos < nextPaneRange - pane2MaxSize) {\n validatedSize = nextPaneRange - pane2MaxSize;\n }\n }\n return validatedSize;\n };\n Splitter.prototype.onMouseUp = function (e) {\n removeClass([this.currentSeparator], SPLIT_BAR_ACTIVE);\n this.unwireResizeEvents();\n var eventArgs = {\n event: e,\n element: this.element,\n pane: [this.previousPane, this.nextPane],\n index: [this.prevPaneIndex, this.nextPaneIndex],\n separator: this.currentSeparator,\n paneSize: [this.prePaneDimenson, this.nextPaneDimension]\n };\n for (var i = 0; i < this.element.querySelectorAll('iframe').length; i++) {\n this.element.querySelectorAll('iframe')[i].style.pointerEvents = 'auto';\n }\n this.trigger('resizeStop', eventArgs);\n if (this.enablePersistence) {\n var paneValues = this.paneSettings;\n paneValues[this.getPreviousPaneIndex()].size = this.allPanes[this.getPreviousPaneIndex()].style.flexBasis;\n paneValues[this.getNextPaneIndex()].size = this.allPanes[this.getNextPaneIndex()].style.flexBasis;\n this.setProperties({ 'paneSettings': paneValues }, true);\n }\n };\n Splitter.prototype.panesDimension = function (index, child) {\n var childCount = child.length;\n var size;\n parseInt(this.getHeight(this.element), 10);\n if (!isNullOrUndefined(this.paneSettings[index])) {\n if (!isNullOrUndefined(this.paneSettings[index].size)) {\n size = this.paneSettings[index].size;\n if (index < childCount) {\n setStyleAttribute(child[index], { 'flex-basis': size, 'order': index * 2 });\n if (index < childCount - 1 && this.paneSettings[index].size !== '') {\n addClass([child[index]], STATIC_PANE);\n }\n else if (!this.sizeFlag) {\n child[index].style.flexBasis = null;\n }\n if ((index === childCount - 1) && this.sizeFlag && this.paneSettings[index].size !== '') {\n addClass([child[index]], STATIC_PANE);\n }\n }\n }\n else {\n this.sizeFlag = true;\n setStyleAttribute(child[index], { 'order': index * 2 });\n }\n }\n else {\n setStyleAttribute(child[index], { 'order': index * 2 });\n }\n this.paneOrder.push(index * 2);\n };\n Splitter.prototype.setTemplate = function (template, toElement) {\n toElement.innerHTML = '';\n template = typeof (template) === 'string' ? this.sanitizeHelper(template) : template;\n this.templateCompile(toElement, template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n // eslint-disable-next-line\n Splitter.prototype.templateCompile = function (ele, cnt) {\n // eslint-disable-next-line\n var blazorContain = Object.keys(window);\n var tempEle = this.createElement('div');\n this.compileElement(tempEle, cnt, 'content');\n if (tempEle.childNodes.length !== 0) {\n [].slice.call(tempEle.childNodes).forEach(function (childEle) {\n ele.appendChild(childEle);\n });\n }\n };\n Splitter.prototype.compileElement = function (ele, val, prop) {\n // eslint-disable-next-line\n var blazorContain = Object.keys(window);\n if (typeof (val) === 'string') {\n if (val[0] === '.' || val[0] === '#') {\n var eleVal = document.querySelector(val);\n if (!isNullOrUndefined(eleVal)) {\n this.templateElement.push(eleVal);\n if (eleVal.style.display === 'none') {\n eleVal.style.removeProperty('display');\n }\n if (eleVal.getAttribute('style') === '') {\n eleVal.removeAttribute('style');\n }\n ele.appendChild(eleVal);\n return;\n }\n else {\n val = val.trim();\n }\n }\n else {\n val = val.trim();\n }\n }\n var templateFn;\n if (!isNullOrUndefined(val.outerHTML)) {\n templateFn = compile(val.outerHTML);\n }\n else {\n templateFn = compile(val);\n }\n var templateFUN;\n if (!isNullOrUndefined(templateFn)) {\n templateFUN = templateFn({}, this, prop, this.element.id + 'content' + this.allPanes.length.toString(), true);\n }\n if (!isNullOrUndefined(templateFn) && templateFUN && templateFUN.length > 0) {\n [].slice.call(templateFUN).forEach(function (el) {\n ele.appendChild(el);\n });\n }\n };\n Splitter.prototype.paneCollapsible = function (pane, index) {\n // eslint-disable-next-line\n this.paneSettings[index].collapsible ? addClass([pane], COLLAPSIBLE) : removeClass([pane], COLLAPSIBLE);\n };\n Splitter.prototype.createSplitPane = function (target) {\n var childCount = target.children.length;\n for (var i = 0; i < this.paneSettings.length; i++) {\n if (childCount < this.paneSettings.length) {\n var childElement = this.createElement('div');\n this.element.appendChild(childElement);\n childCount = childCount + 1;\n }\n }\n childCount = target.children.length;\n var child = [].slice.call(target.children);\n this.sizeFlag = false;\n if (childCount > 0) {\n for (var i = 0; i < childCount; i++) {\n // To accept only div and span element as pane\n if (child[i].nodeName === 'DIV' || child[i].nodeName === 'SPAN') {\n this.allPanes.push(child[i]);\n if (this.orientation === 'Horizontal') {\n addClass([child[i]], [PANE, SPLIT_H_PANE, SCROLL_PANE]);\n this.panesDimension(i, child);\n }\n else {\n addClass([child[i]], [PANE, SPLIT_V_PANE, SCROLL_PANE]);\n this.panesDimension(i, child);\n }\n if (!isNullOrUndefined(this.paneSettings[i]) && !isNullOrUndefined(this.paneSettings[i].content)) {\n this.setTemplate(this.paneSettings[i].content, child[i]);\n }\n if (!isNullOrUndefined(this.paneSettings[i]) && this.paneSettings[i].cssClass) {\n this.setCssClass(child[i], this.paneSettings[i].cssClass);\n }\n if (!isNullOrUndefined(this.paneSettings[i])) {\n this.paneCollapsible(child[i], i);\n }\n }\n }\n }\n };\n /**\n * expands corresponding pane based on the index is passed.\n *\n * @param { number } index - Specifies the index value of the corresponding pane to be expanded at initial rendering of splitter.\n * @returns {void}\n */\n Splitter.prototype.expand = function (index) {\n this.collapsedOnchange(index);\n this.updatePaneSettings(index, false);\n };\n /**\n * collapses corresponding pane based on the index is passed.\n *\n * @param { number } index - Specifies the index value of the corresponding pane to be collapsed at initial rendering of splitter.\n * @returns {void}\n */\n Splitter.prototype.collapse = function (index) {\n this.isCollapsed(index);\n this.updatePaneSettings(index, true);\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}\n */\n Splitter.prototype.destroy = function () {\n if (!this.isDestroyed) {\n _super.prototype.destroy.call(this);\n EventHandler.remove(document, 'touchstart click', this.onDocumentClick);\n this.element.ownerDocument.defaultView.removeEventListener('resize', this.onReportWindowSize, true);\n while (this.element.attributes.length > 0) {\n this.element.removeAttribute(this.element.attributes[0].name);\n }\n this.element.innerHTML = this.wrapper.innerHTML;\n for (var i = 0; i < this.wrapper.attributes.length; i++) {\n this.element.setAttribute(this.wrapper.attributes[i].name, this.wrapper.attributes[i].value);\n }\n if (this.refreshing) {\n addClass([this.element], ['e-control', 'e-lib', ROOT]);\n this.allBars = [];\n this.allPanes = [];\n }\n this.restoreElem();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate();\n }\n this.allBars = [];\n this.allPanes = [];\n this.previousPane = null;\n this.nextPane = null;\n this.currentSeparator = null;\n }\n };\n Splitter.prototype.restoreElem = function () {\n if (this.templateElement.length > 0) {\n for (var i = 0; i < this.templateElement.length; i++) {\n this.templateElement[i].style.display = 'none';\n document.body.appendChild(this.templateElement[i]);\n }\n }\n };\n Splitter.prototype.addPaneClass = function (pane) {\n // eslint-disable-next-line\n this.orientation === 'Horizontal' ? addClass([pane], [PANE, SPLIT_H_PANE, SCROLL_PANE]) :\n addClass([pane], [PANE, SPLIT_V_PANE, SCROLL_PANE]);\n return pane;\n };\n Splitter.prototype.removePaneOrders = function (paneClass) {\n var childNodes = this.element.childNodes;\n var panes = [];\n for (var i = 0; childNodes.length < 0; i++) {\n if (childNodes[i].classList.contains(paneClass)) {\n panes.push(childNodes[i]);\n }\n }\n for (var i = 0; i < panes.length; i++) {\n panes[i].style.removeProperty('order');\n }\n };\n Splitter.prototype.setPaneOrder = function () {\n for (var i = 0; i < this.allPanes.length; i++) {\n this.panesDimension(i, this.allPanes);\n }\n };\n Splitter.prototype.removeSeparator = function () {\n for (var i = 0; i < this.allBars.length; i++) {\n detach(this.allBars[i]);\n }\n this.allBars = [];\n };\n Splitter.prototype.updatePanes = function () {\n this.setPaneOrder();\n this.removeSeparator();\n this.addSeparator(this.element);\n };\n /**\n * Allows you to add a pane dynamically to the specified index position by passing the pane properties.\n *\n * @param { PanePropertiesModel } paneProperties - Specifies the pane’s properties that apply to new pane.\n * @param { number } index - Specifies the index where the pane will be inserted.\n * @returns {void}\n */\n Splitter.prototype.addPane = function (paneProperties, index) {\n var newPane = this.createElement('div');\n newPane = this.addPaneClass(newPane);\n index = (index > this.allPanes.length + 1) ? this.allPanes.length : index;\n var paneDetails = {\n size: isNullOrUndefined(paneProperties.size) ? '' : paneProperties.size,\n min: isNullOrUndefined(paneProperties.min) ? null : paneProperties.min,\n max: isNullOrUndefined(paneProperties.max) ? null : paneProperties.max,\n content: isNullOrUndefined(paneProperties.content) ? '' : paneProperties.content,\n resizable: isNullOrUndefined(paneProperties.resizable) ? true : paneProperties.resizable,\n collapsible: isNullOrUndefined(paneProperties.collapsible) ? false : paneProperties.collapsible,\n collapsed: isNullOrUndefined(paneProperties.collapsed) ? false : paneProperties.collapsed,\n cssClass: isNullOrUndefined(paneProperties.cssClass) ? '' : paneProperties.cssClass\n };\n this.paneSettings.splice(index, 0, paneDetails);\n this.setProperties({ 'paneSettings': this.paneSettings }, true);\n if (this.orientation === 'Horizontal') {\n this.element.insertBefore(newPane, this.element.querySelectorAll('.' + SPLIT_H_PANE)[index]);\n this.removePaneOrders(SPLIT_H_PANE);\n }\n else {\n this.element.insertBefore(newPane, this.element.querySelectorAll('.' + SPLIT_V_PANE)[index]);\n this.removePaneOrders(SPLIT_V_PANE);\n }\n this.allPanes.splice(index, 0, newPane);\n this.updatePanes();\n this.setTemplate(this.paneSettings[index].content, newPane);\n this.setCssClass(this.allPanes[index], paneProperties.cssClass);\n this.allPanes[this.allPanes.length - 1].classList.remove(STATIC_PANE);\n };\n /**\n * Allows you to remove the specified pane dynamically by passing its index value.\n *\n * @param { number } index - Specifies the index value to remove the corresponding pane.\n * @returns {void}\n */\n Splitter.prototype.removePane = function (index) {\n index = (index > this.allPanes.length + 1) ? this.allPanes.length : index;\n var elementClass = (this.orientation === 'Horizontal') ? SPLIT_H_PANE : SPLIT_V_PANE;\n if (isNullOrUndefined(this.element.querySelectorAll('.' + elementClass)[index])) {\n return;\n }\n detach(this.element.querySelectorAll('.' + elementClass)[index]);\n this.allPanes.splice(index, 1);\n this.removePaneOrders(elementClass);\n this.updatePanes();\n this.paneSettings.splice(index, 1);\n this.setProperties({ 'paneSettings': this.paneSettings }, true);\n if (this.allPanes.length > 0) {\n this.allPanes[this.allPanes.length - 1].classList.remove(STATIC_PANE);\n }\n };\n __decorate([\n Property('100%')\n ], Splitter.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], Splitter.prototype, \"enableReversePanes\", void 0);\n __decorate([\n Property('100%')\n ], Splitter.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], Splitter.prototype, \"enablePersistence\", void 0);\n __decorate([\n Collection([], PaneProperties)\n ], Splitter.prototype, \"paneSettings\", void 0);\n __decorate([\n Property('Horizontal')\n ], Splitter.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Splitter.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Splitter.prototype, \"enabled\", void 0);\n __decorate([\n Property(true)\n ], Splitter.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(null)\n ], Splitter.prototype, \"separatorSize\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"beforeSanitizeHtml\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"beforeCollapse\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"beforeExpand\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], Splitter.prototype, \"expanded\", void 0);\n Splitter = __decorate([\n NotifyPropertyChanges\n ], Splitter);\n return Splitter;\n}(Component));\nexport { Splitter };\n","import { createElement, isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constants';\nimport { Splitter as SplitterLayout } from '@syncfusion/ej2-layouts';\nimport { Deferred } from '@syncfusion/ej2-data';\n/**\n * Splitter module is used to define the splitter position in Gantt layout.\n */\nvar Splitter = /** @class */ (function () {\n function Splitter(ganttObj) {\n this.parent = ganttObj;\n this.parent.on('destroy', this.destroy, this);\n }\n /**\n * @returns {void} .\n * @private\n */\n Splitter.prototype.renderSplitter = function () {\n var _this = this;\n var splitterPosition = this.calculateSplitterPosition(this.parent.splitterSettings);\n this.parent.splitterElement = createElement('div', { className: cls.splitter });\n this.parent.treeGridPane = createElement('div', { className: cls.treeGridPane });\n this.parent.chartPane = createElement('div', { className: cls.ganttChartPane });\n addClass([this.parent.chartPane], 'e-droppable');\n if (this.parent.enableRtl) {\n this.parent.splitterElement.appendChild(this.parent.chartPane);\n this.parent.splitterElement.appendChild(this.parent.treeGridPane);\n }\n else {\n this.parent.splitterElement.appendChild(this.parent.treeGridPane);\n this.parent.splitterElement.appendChild(this.parent.chartPane);\n }\n this.splitterObject = new SplitterLayout({\n height: null,\n width: this.parent.ganttWidth.toString(),\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n separatorSize: this.parent.splitterSettings.separatorSize,\n paneSettings: [\n {\n resizable: true,\n size: splitterPosition,\n min: this.getSpliterPositionInPercentage(this.parent.splitterSettings.minimum)\n },\n {\n resizable: true\n }\n ],\n orientation: 'Horizontal',\n resizeStart: function (args) {\n if (_this.parent.contextMenuModule && _this.parent.contextMenuModule.isOpen) {\n _this.parent.contextMenuModule.contextMenu.close();\n }\n var leftPane = args.pane[0];\n var rightPane = args.pane[1];\n _this.splitterPreviousPositionGrid = leftPane.scrollWidth + 1 + 'px';\n _this.splitterPreviousPositionChart = rightPane.scrollWidth + 1 + 'px';\n var callBackPromise = new Deferred();\n _this.parent.trigger('splitterResizeStart', args, function (resizeStartArgs) {\n callBackPromise.resolve(resizeStartArgs);\n });\n return callBackPromise;\n },\n resizing: function (args) {\n _this.parent.trigger('splitterResizing', args);\n if (_this.parent.timelineModule.isZoomToFit) {\n _this.parent.timelineModule.updateTimelineAfterZooming(_this.parent.timelineModule.timelineEndDate, true);\n }\n },\n resizeStop: function (args) {\n _this.parent['calculateDimensions']();\n var leftPane = args.pane[0];\n _this.splitterPreviousPositionGrid = leftPane.scrollWidth + 1 + 'px';\n _this.splitterObject.paneSettings[0].size = _this.getSpliterPositionInPercentage(_this.splitterPreviousPositionGrid);\n var callBackPromise = new Deferred();\n _this.parent.trigger('splitterResized', args, function (splitterResizedArgs) {\n if (splitterResizedArgs.cancel === true) {\n _this.splitterObject.paneSettings[0].size = null;\n _this.splitterObject.paneSettings[0].size = _this.getSpliterPositionInPercentage(_this.splitterPreviousPositionGrid);\n _this.splitterObject.paneSettings[1].size = null;\n _this.splitterObject.paneSettings[1].size = _this.getSpliterPositionInPercentage(_this.splitterPreviousPositionChart);\n }\n if (isNullOrUndefined(_this.parent.projectEndDate)) {\n _this.parent.timelineModule.updateTimelineAfterZooming(_this.parent.timelineModule.timelineEndDate, true);\n }\n callBackPromise.resolve(splitterResizedArgs);\n });\n return callBackPromise;\n }\n });\n this.parent.element.appendChild(this.parent.splitterElement);\n this.splitterObject.appendTo(this.parent.splitterElement);\n };\n /**\n * @param {SplitterSettingsModel} splitter .\n \n * @returns {string} .\n * @private\n */\n Splitter.prototype.calculateSplitterPosition = function (splitter) {\n if (!isNullOrUndefined(this.splitterObject) && this.parent.enablePersistence) {\n return this.splitterObject.paneSettings[0].size;\n }\n if (splitter.view === 'Grid') {\n return '100%';\n }\n else if (splitter.view === 'Chart') {\n return '0%';\n }\n else {\n if (!isNullOrUndefined(splitter.position) && splitter.position !== '') {\n return this.getSpliterPositionInPercentage(splitter.position);\n }\n else if (!isNullOrUndefined(splitter.columnIndex) && splitter.columnIndex >= 0) {\n if ((splitter.columnIndex * 150) < this.parent.ganttWidth || !this.parent.element.classList.contains('e-device')) {\n return this.getSpliterPositionInPercentage(this.getTotalColumnWidthByIndex(splitter.columnIndex).toString() + 'px');\n }\n else {\n return this.getSpliterPositionInPercentage((splitter.columnIndex * 130) + 'px');\n }\n }\n else {\n return this.getSpliterPositionInPercentage('250px');\n }\n }\n };\n /**\n * @param {string} position .\n * @returns {string} .\n */\n Splitter.prototype.getSpliterPositionInPercentage = function (position) {\n var value = !isNullOrUndefined(position) && position !== '' ? position : null;\n if (!isNullOrUndefined(value)) {\n if (position.indexOf('px') !== -1) {\n var intValue = parseInt(position, 10);\n value = (((intValue / this.parent.ganttWidth) * 100) <= 100 ? ((intValue / this.parent.ganttWidth) * 100) + '%' :\n '25%');\n }\n else {\n value = position.indexOf('%') === -1 ?\n position + '%' : position;\n }\n }\n return value;\n };\n /**\n * @param {number} index .\n * @returns {number} .\n */\n Splitter.prototype.getTotalColumnWidthByIndex = function (index) {\n var width = 0;\n var tr = this.parent.ganttColumns;\n index = tr.length > index ? index : tr.length;\n for (var column = 0; column < index; column++) {\n width = width + parseInt(tr[column].width);\n }\n return width;\n };\n /**\n * @returns {void} .\n * @private\n */\n Splitter.prototype.updateSplitterPosition = function () {\n this.splitterObject.separatorSize = this.parent.splitterSettings.separatorSize >= 4 ?\n this.parent.splitterSettings.separatorSize : 4;\n var splitterPosition = this.calculateSplitterPosition(this.parent.splitterSettings);\n this.splitterObject.paneSettings[0].min = this.getSpliterPositionInPercentage(this.parent.splitterSettings.minimum);\n this.splitterObject.dataBind();\n this.splitterObject.paneSettings[0].size = splitterPosition;\n };\n /**\n * @returns {void} .\n * @private\n */\n Splitter.prototype.triggerCustomResizedEvent = function () {\n var pane1 = this.splitterObject.element.querySelectorAll('.e-pane')[0];\n var pane2 = this.splitterObject.element.querySelectorAll('.e-pane')[1];\n var eventArgs = {\n event: null,\n element: this.splitterObject.element,\n pane: [pane1, pane2],\n index: [0, 1],\n separator: this.splitterObject.element.querySelector('.e-split-bar'),\n paneSize: [pane1.offsetWidth, pane2.offsetWidth]\n };\n this.parent.trigger('splitterResized', eventArgs);\n if (eventArgs.cancel === true) {\n this.splitterObject.paneSettings[0].size = this.getSpliterPositionInPercentage(this.splitterPreviousPositionGrid);\n this.splitterObject.paneSettings[1].size = this.getSpliterPositionInPercentage(this.splitterPreviousPositionChart);\n }\n };\n Splitter.prototype.destroy = function () {\n this.splitterObject.destroy();\n this.parent.off('destroy', this.destroy);\n };\n return Splitter;\n}());\nexport { Splitter };\n","import { Tooltip as TooltipComponent } from '@syncfusion/ej2-popups';\nimport { parentsUntil } from '../base/utils';\nimport * as cls from '../base/css-constants';\nimport { extend, isNullOrUndefined, getValue, EventHandler, closest, SanitizeHtmlHelper, initializeCSPTemplate, append } from '@syncfusion/ej2-base';\nimport { Deferred } from '@syncfusion/ej2-data';\n/**\n * File for handling tooltip in Gantt.\n */\nvar Tooltip = /** @class */ (function () {\n function Tooltip(gantt) {\n this.parent = gantt;\n this.createTooltip();\n this.parent.on('destroy', this.destroy, this);\n }\n /**\n * To create tooltip.\n *\n * @returns {void} .\n * @private\n */\n Tooltip.prototype.createTooltip = function () {\n this.toolTipObj = new TooltipComponent();\n this.toolTipObj.target = '.e-header-cell-label, .e-gantt-child-taskbar,' +\n '.e-gantt-parent-taskbar, .e-gantt-milestone, .e-gantt-unscheduled-taskbar' +\n '.e-event-markers, .e-baseline-bar, .e-event-markers,' +\n '.e-connector-line-container, .e-indicator-span, .e-notes-info, .e-gantt-manualparent-milestone,' +\n '.e-taskbar-left-resizer, .e-taskbar-right-resizer, .e-baseline-gantt-milestone, .e-gantt-manualparenttaskbar';\n this.toolTipObj.position = 'BottomCenter';\n this.toolTipObj.openDelay = 700;\n this.toolTipObj.enableRtl = this.parent.enableRtl;\n this.toolTipObj.enableHtmlSanitizer = this.parent.enableHtmlSanitizer;\n this.toolTipObj.cssClass = cls.ganttTooltip;\n this.toolTipObj.animation = { open: { effect: 'None', delay: 0 }, close: { effect: 'None', delay: 0 } };\n this.toolTipObj.afterOpen = this.updateTooltipPosition.bind(this);\n this.toolTipObj.showTipPointer = false;\n this.toolTipObj.beforeRender = this.tooltipBeforeRender.bind(this);\n this.toolTipObj.afterClose = this.tooltipCloseHandler.bind(this);\n this.toolTipObj.isStringTemplate = true;\n this.toolTipObj.appendTo(this.parent.element);\n };\n Tooltip.prototype.tooltipBeforeRender = function (args) {\n var parent = this.parent;\n if (parent.isOnEdit) {\n args.cancel = true;\n return;\n }\n var element;\n var row = closest(args.target, 'div.' + cls.taskBarMainContainer);\n if (!isNullOrUndefined(row)) {\n element = args.target;\n }\n else {\n element = parentsUntil(args.target, cls.chartRowCell);\n }\n var data;\n var argsData = {\n data: {},\n args: args,\n cancel: false,\n content: ''\n };\n if (args.target.classList.contains('e-header-cell-label')) {\n if (parent.timelineSettings.showTooltip) {\n argsData.content = this.toolTipObj.content = parent.tooltipModule.getTooltipContent('timeline', data, parent, args);\n }\n else {\n args.cancel = true;\n }\n }\n else {\n if (parent.tooltipSettings.showTooltip) {\n if (element) {\n argsData.data = parent.ganttChartModule.getRecordByTaskBar(element);\n data = argsData.data;\n }\n if (args.target.classList.contains('e-gantt-child-taskbar') ||\n args.target.classList.contains('e-gantt-parent-taskbar') ||\n args.target.classList.contains('e-gantt-milestone') ||\n args.target.classList.contains('e-gantt-unscheduled-taskbar') ||\n args.target.classList.contains('e-taskbar-left-resizer') ||\n args.target.classList.contains('e-taskbar-right-resizer') ||\n (args.target.classList.contains('e-gantt-manualparenttaskbar') && parent.tooltipSettings.taskbar)) {\n var taskbarTemplateNode = void 0;\n if (parent.tooltipSettings.taskbar) {\n taskbarTemplateNode = parent.tooltipModule.templateCompiler(parent.tooltipSettings.taskbar, parent, data, 'TooltipTaskbarTemplate');\n }\n var tooltipTemplate = document.createElement('div');\n if (taskbarTemplateNode) {\n append(taskbarTemplateNode, tooltipTemplate);\n }\n argsData.content = this.toolTipObj.content = taskbarTemplateNode ? tooltipTemplate :\n parent.tooltipModule.getTooltipContent((data.ganttProperties.isMilestone ? 'milestone' : 'taskbar'), data, parent, args);\n }\n else if (args.target.classList.contains('e-baseline-bar') ||\n args.target.classList.contains('e-baseline-gantt-milestone')) {\n var baseLineTemplateNode = void 0;\n if ((parent.tooltipSettings.baseline)) {\n baseLineTemplateNode = parent.tooltipModule.templateCompiler(parent.tooltipSettings.baseline, parent, data, 'TooltipBaselineTemplate');\n }\n var baselineTemplate = document.createElement('div');\n if (baseLineTemplateNode) {\n append(baseLineTemplateNode, baselineTemplate);\n }\n argsData.content = this.toolTipObj.content = baseLineTemplateNode ? baselineTemplate :\n parent.tooltipModule.getTooltipContent((data.ganttProperties.isMilestone ? 'milestone' : 'baseline'), data, parent, args);\n }\n else if (args.target.classList.contains('e-event-markers')) {\n argsData.content = this.toolTipObj.content = parent.tooltipModule.getTooltipContent('marker', data, parent, args);\n }\n else if (args.target.classList.contains('e-connector-line-container')) {\n var dependencyLineTemplateNode = void 0;\n parent.tooltipModule.predecessorTooltipData = parent.tooltipModule.getPredecessorTooltipData(args);\n argsData.data = this.predecessorTooltipData;\n if ((parent.tooltipSettings.connectorLine)) {\n dependencyLineTemplateNode = parent.tooltipModule.templateCompiler(parent.tooltipSettings.connectorLine, parent, parent.tooltipModule.predecessorTooltipData, 'TooltipConnectorLineTemplate');\n }\n argsData.content = this.toolTipObj.content = dependencyLineTemplateNode ?\n dependencyLineTemplateNode[0] :\n parent.tooltipModule.getTooltipContent('connectorLine', data, parent, args);\n }\n else if (args.target.classList.contains('e-indicator-span')) {\n argsData.content = this.toolTipObj.content =\n parent.tooltipModule.getTooltipContent('indicator', data, parent, args);\n if (isNullOrUndefined(argsData.content)) {\n args.cancel = true;\n }\n }\n else if (args.target.classList.contains('e-notes-info')) {\n var ganttData = this.parent.ganttChartModule.getRecordByTarget(args.event);\n argsData.content = this.toolTipObj.content = ganttData.ganttProperties.notes;\n if (isNullOrUndefined(argsData.content)) {\n args.cancel = true;\n }\n }\n else if (args.target.classList.contains('e-gantt-manualparenttaskbar')) {\n argsData.content = this.toolTipObj.content = parent.tooltipModule.getTooltipContent('manualtaskbar', data, parent, args);\n if (isNullOrUndefined(argsData.content)) {\n args.cancel = true;\n }\n }\n else if (args.target.classList.contains('e-gantt-manualparent-milestone')) {\n argsData.content = this.toolTipObj.content = parent.tooltipModule.getTooltipContent('manualmilestone', data, parent, args);\n if (isNullOrUndefined(argsData.content)) {\n args.cancel = true;\n }\n }\n }\n else {\n args.cancel = true;\n }\n }\n if (args.cancel === false) {\n var callBackPromise_1 = new Deferred();\n parent.trigger('beforeTooltipRender', argsData, function (argData) {\n callBackPromise_1.resolve(argData);\n if (argData.cancel) {\n args.cancel = true;\n }\n });\n this.toolTipObj.content = argsData.content;\n if (!this.parent.isAdaptive && args.event.type === 'mouseover') {\n this.currentTarget = args.target;\n EventHandler.add(this.currentTarget, 'mousemove', this.mouseMoveHandler.bind(this));\n }\n this.parent.renderTemplates();\n return callBackPromise_1;\n }\n };\n // eslint-disable-next-line\n Tooltip.prototype.tooltipCloseHandler = function (args) {\n this.tooltipMouseEvent = null;\n if (!this.parent.isAdaptive) {\n EventHandler.remove(this.currentTarget, 'mousemove', this.mouseMoveHandler);\n }\n this.currentTarget = null;\n };\n Tooltip.prototype.mouseMoveHandler = function (e) {\n this.tooltipMouseEvent = e;\n };\n /**\n * Method to update tooltip position\n *\n * @param {TooltipEventArgs} args .\n * @returns {void} .\n */\n Tooltip.prototype.updateTooltipPosition = function (args) {\n args.element.style.visibility = 'visible';\n var parentWithZoomStyle = this.parent.element.closest('[style*=\"zoom\"]');\n if (isNullOrUndefined(parentWithZoomStyle)) {\n if (isNullOrUndefined(this.tooltipMouseEvent) || args.target.classList.contains('e-notes-info')) {\n return;\n }\n var postion = this.getPointorPosition(this.tooltipMouseEvent);\n var containerPosition = this.parent.getOffsetRect(this.parent.chartPane);\n var topEnd = containerPosition.top + this.parent.chartPane.offsetHeight;\n var leftEnd = containerPosition.left + this.parent.chartPane.offsetWidth;\n var tooltipPositionX = postion.x;\n var tooltipPositionY = postion.y;\n if (leftEnd < (tooltipPositionX + args.element.offsetWidth + 10)) {\n while (leftEnd < (tooltipPositionX + args.element.offsetWidth + 10)) {\n tooltipPositionX = leftEnd - args.element.offsetWidth - 10;\n args.element.style.left = tooltipPositionX + 'px';\n }\n }\n else {\n tooltipPositionX = tooltipPositionX + 10;\n args.element.style.left = tooltipPositionX + 'px';\n }\n if (window.innerHeight < args.element.offsetHeight + tooltipPositionY) {\n tooltipPositionY = tooltipPositionY - args.element.offsetHeight - 10;\n }\n if ((topEnd < (tooltipPositionY + args.element.offsetHeight + 20))) {\n tooltipPositionY = tooltipPositionY - args.element.offsetHeight - 10;\n }\n else {\n tooltipPositionY = tooltipPositionY + 10;\n }\n args.element.style.top = tooltipPositionY + 'px';\n }\n };\n /**\n * Method to get mouse pointor position\n *\n * @param {Event} e .\n * @returns {number} .\n */\n Tooltip.prototype.getPointorPosition = function (e) {\n var posX;\n var posY;\n if (!isNullOrUndefined(getValue('pageX', e)) || !isNullOrUndefined(getValue('pageY', e))) {\n posX = getValue('pageX', e);\n posY = getValue('pageY', e);\n }\n else if (!isNullOrUndefined(getValue('clientX', e)) || !isNullOrUndefined(getValue('clientY', e))) {\n posX = getValue('clientX', e) + document.body.scrollLeft + document.documentElement.scrollLeft;\n posY = getValue('clientY', e) + document.body.scrollTop + document.documentElement.scrollTop;\n }\n return { x: posX, y: posY };\n };\n /**\n * Getting tooltip content for different elements\n *\n * @param {string} elementType .\n * @param {IGanttData} ganttData .\n * @param {Gantt} parent .\n * @param {TooltipEventArgs} args .\n * @returns {string | Function} .\n */\n Tooltip.prototype.getTooltipContent = function (elementType, ganttData, parent, args) {\n var content;\n var data;\n var taskName;\n if (ganttData) {\n data = ganttData.ganttProperties;\n var taskNameValue = data.taskName;\n if (this.parent.enableHtmlSanitizer && typeof (taskNameValue) === 'string') {\n taskNameValue = SanitizeHtmlHelper.sanitize(taskNameValue);\n }\n taskName = !isNullOrUndefined(taskNameValue) ? '' : '';\n }\n switch (elementType) {\n case 'milestone':\n {\n var milestoneStartDate = void 0;\n if (args.target.className.includes('e-baseline-gantt-milestone') && !isNullOrUndefined(data.baselineStartDate)) {\n milestoneStartDate = data.baselineStartDate;\n }\n else if (!isNullOrUndefined(data.startDate)) {\n milestoneStartDate = data.startDate;\n }\n var sDateValue = this.parent.getFormatedDate(milestoneStartDate, this.parent.getDateFormat());\n if (this.parent.enableHtmlSanitizer && typeof (sDateValue) === 'string') {\n sDateValue = SanitizeHtmlHelper.sanitize(sDateValue);\n }\n var sDate_1 = !isNullOrUndefined(milestoneStartDate) ? '' +\n '' : '';\n var contentTemp_1 = function () {\n return '
' +\n (this.parent.disableHtmlEncode ? taskNameValue.replace(//g, \">\") : taskNameValue) + '
Date:' +\n sDateValue + '
' +\n taskName + sDate_1 + '
';\n };\n content = initializeCSPTemplate(contentTemp_1);\n break;\n }\n case 'taskbar':\n {\n var scheduledTask = !ganttData.hasChildRecords || data.isAutoSchedule ? true : false;\n var startDateValue = this.parent.getFormatedDate(scheduledTask ? data.startDate : data.autoStartDate, this.parent.getDateFormat());\n var endDateValue = this.parent.getFormatedDate(scheduledTask ? data.endDate : data.autoEndDate, this.parent.getDateFormat());\n var durationValue = this.parent.getDurationString((scheduledTask ? data.duration : data.autoDuration), data.durationUnit);\n var progressValue = data.progress;\n if (this.parent.enableHtmlSanitizer) {\n startDateValue = typeof (startDateValue) === 'string' ? SanitizeHtmlHelper.sanitize(startDateValue) : startDateValue;\n endDateValue = typeof (endDateValue) === 'string' ? SanitizeHtmlHelper.sanitize(endDateValue) : endDateValue;\n durationValue = typeof (durationValue) === 'string' ? SanitizeHtmlHelper.sanitize(durationValue) : durationValue;\n progressValue = typeof (progressValue) === 'string' ? SanitizeHtmlHelper.sanitize(progressValue) : progressValue;\n }\n var startDate_1 = data.startDate ? '' +\n this.parent.localeObj.getConstant(scheduledTask ? 'startDate' : 'subTasksStartDate') +\n ':' + ' ' + startDateValue + '' : '';\n var endDate_1 = data.endDate ? '' +\n this.parent.localeObj.getConstant(scheduledTask ? 'endDate' : 'subTasksEndDate') +\n ':' + '' + endDateValue + '' : '';\n var duration_1 = !isNullOrUndefined(data.duration) ? '' +\n this.parent.localeObj.getConstant('duration') + ':' +\n ' ' + durationValue +\n '' : '';\n var progress_1 = !isNullOrUndefined(data.progress) ? '' +\n this.parent.localeObj.getConstant('progress') + ':' + progressValue +\n '' : '';\n var contentTemp_2 = function () {\n return '' +\n taskName + startDate_1 + endDate_1 + duration_1 + progress_1 + '
';\n };\n content = initializeCSPTemplate(contentTemp_2);\n break;\n }\n case 'baseline':\n {\n var baselineStartDateValue_1 = this.parent.getFormatedDate(data.baselineStartDate, this.parent.getDateFormat());\n var baselineEndDateValue_1 = this.parent.getFormatedDate(data.baselineEndDate, this.parent.getDateFormat());\n if (this.parent.enableHtmlSanitizer) {\n baselineStartDateValue_1 = typeof (baselineStartDateValue_1) === 'string' ? SanitizeHtmlHelper.sanitize(baselineStartDateValue_1) : baselineStartDateValue_1;\n baselineEndDateValue_1 = typeof (baselineEndDateValue_1) === 'string' ? SanitizeHtmlHelper.sanitize(baselineEndDateValue_1) : baselineEndDateValue_1;\n }\n var contentTemp_3 = function () {\n return '' +\n taskName + '' + '' +\n '
' +\n this.parent.localeObj.getConstant('baselineStartDate') + ':' +\n baselineStartDateValue_1 + '
' + this.parent.localeObj.getConstant('baselineEndDate') +\n ':' +\n baselineEndDateValue_1 + '
';\n };\n content = initializeCSPTemplate(contentTemp_3, this);\n break;\n }\n case 'marker':\n {\n var markerTooltipElement = parent.tooltipModule.getMarkerTooltipData(args);\n var markerTooltipElementValue_1 = this.parent.getFormatedDate(this.parent.dateValidationModule.getDateFromFormat(markerTooltipElement.day), this.parent.getDateFormat());\n var markerLabel_1 = markerTooltipElement.label ? markerTooltipElement.label : '';\n if (this.parent.enableHtmlSanitizer) {\n markerLabel_1 = typeof (markerLabel_1) === 'string' ? SanitizeHtmlHelper.sanitize(markerLabel_1) : markerLabel_1;\n markerTooltipElementValue_1 = typeof (markerTooltipElementValue_1) === 'string' ? SanitizeHtmlHelper.sanitize(markerTooltipElementValue_1) : markerTooltipElementValue_1;\n }\n var contentTemp_4 = function () {\n return '
' +\n markerTooltipElementValue_1 + '
' + (this.parent.disableHtmlEncode ? markerLabel_1.replace(//g, \">\") : markerLabel_1) + '
';\n };\n content = initializeCSPTemplate(contentTemp_4, this);\n break;\n }\n case 'connectorLine':\n {\n var fromNameValue_1 = parent.tooltipModule.predecessorTooltipData.fromName;\n var fromIdValue_1 = parent.tooltipModule.predecessorTooltipData.fromId;\n var toNameValue_1 = parent.tooltipModule.predecessorTooltipData.toName;\n var toIdValue_1 = parent.tooltipModule.predecessorTooltipData.toId;\n var linkTextValue_1 = parent.tooltipModule.predecessorTooltipData.linkText;\n var offsetStringValue_1 = parent.tooltipModule.predecessorTooltipData.offsetString;\n if (this.parent.enableHtmlSanitizer) {\n fromNameValue_1 = typeof (fromNameValue_1) === 'string' ? SanitizeHtmlHelper.sanitize(fromNameValue_1) : fromNameValue_1;\n fromIdValue_1 = typeof (fromIdValue_1) === 'string' ? SanitizeHtmlHelper.sanitize(fromIdValue_1) : fromIdValue_1;\n toNameValue_1 = typeof (toNameValue_1) === 'string' ? SanitizeHtmlHelper.sanitize(toNameValue_1) : toNameValue_1;\n toIdValue_1 = typeof (toIdValue_1) === 'string' ? SanitizeHtmlHelper.sanitize(toIdValue_1) : toIdValue_1;\n linkTextValue_1 = typeof (linkTextValue_1) === 'string' ? SanitizeHtmlHelper.sanitize(linkTextValue_1) : linkTextValue_1;\n offsetStringValue_1 = typeof (offsetStringValue_1) === 'string' ? SanitizeHtmlHelper.sanitize(offsetStringValue_1) : offsetStringValue_1;\n }\n var contentTemp_5 = function () {\n return '' +\n '' + '
' +\n this.parent.localeObj.getConstant('from') + ':' + (this.parent.disableHtmlEncode ? fromNameValue_1.replace(//g, \">\") : fromNameValue_1) + ' (' +\n (this.parent.disableHtmlEncode ? (typeof (fromIdValue_1) === 'string' ? fromIdValue_1.replace(//g, \">\") : fromIdValue_1) : fromIdValue_1) + ')' + '
' +\n this.parent.localeObj.getConstant('to') + ':' +\n (this.parent.disableHtmlEncode ? toNameValue_1.replace(//g, \">\") : toNameValue_1) + ' (' + toIdValue_1 + ')' + '
' + this.parent.localeObj.getConstant('taskLink') +\n ': ' + linkTextValue_1 +\n '
' + this.parent.localeObj.getConstant('lag') +\n ':' +\n offsetStringValue_1 + '
';\n };\n content = initializeCSPTemplate(contentTemp_5, this);\n break;\n }\n case 'indicator':\n if (args.target.title.length) {\n var titleValue_1 = args.target.title;\n if (this.parent.enableHtmlSanitizer && typeof (titleValue_1) === 'string') {\n titleValue_1 = SanitizeHtmlHelper.sanitize(titleValue_1);\n }\n var contentTemp_6 = function () {\n return '' + titleValue_1 + '
';\n };\n content = initializeCSPTemplate(contentTemp_6);\n }\n break;\n case 'timeline':\n var timlineTitleValue_1 = args.target.title;\n if (this.parent.enableHtmlSanitizer && typeof (timlineTitleValue_1) === 'string') {\n timlineTitleValue_1 = SanitizeHtmlHelper.sanitize(timlineTitleValue_1);\n }\n var contentTemp = function () {\n return '' + timlineTitleValue_1 + '
';\n };\n content = initializeCSPTemplate(contentTemp);\n break;\n case 'manualtaskbar':\n {\n var autoStartDateValue = this.parent.getFormatedDate(data.autoStartDate, this.parent.getDateFormat());\n var autoEndDateValue = this.parent.getFormatedDate(data.autoEndDate, this.parent.getDateFormat());\n var durationUnitValue = this.parent.getDurationString(data.duration, data.durationUnit);\n var manualStartDateValue = this.parent.getFormatedDate(data.startDate, this.parent.getDateFormat());\n var manualEndDateValue = this.parent.getFormatedDate(data.endDate, this.parent.getDateFormat());\n if (this.parent.enableHtmlSanitizer) {\n autoStartDateValue = typeof (autoStartDateValue) === 'string' ? SanitizeHtmlHelper.sanitize(autoStartDateValue) : autoStartDateValue;\n autoEndDateValue = typeof (autoEndDateValue) === 'string' ? SanitizeHtmlHelper.sanitize(autoEndDateValue) : autoEndDateValue;\n durationUnitValue = typeof (durationUnitValue) === 'string' ? SanitizeHtmlHelper.sanitize(durationUnitValue) : durationUnitValue;\n manualStartDateValue = typeof (manualStartDateValue) === 'string' ? SanitizeHtmlHelper.sanitize(manualStartDateValue) : manualStartDateValue;\n manualEndDateValue = typeof (manualEndDateValue) === 'string' ? SanitizeHtmlHelper.sanitize(manualEndDateValue) : manualEndDateValue;\n }\n var autoStartDate_1 = data.autoStartDate ? '' +\n this.parent.localeObj.getConstant('subTasksStartDate') + ':' + ' ' +\n autoStartDateValue + '' : '';\n var autoEndDate_1 = data.autoEndDate ? '' +\n this.parent.localeObj.getConstant('subTasksEndDate') + ':' + '' +\n autoEndDateValue + '' : '';\n var durationValue_1 = !isNullOrUndefined(data.duration) ? '' +\n this.parent.localeObj.getConstant('duration') + ':' +\n ' ' + durationUnitValue +\n '' : '';\n var manualStartDate_1 = data.startDate ? '' +\n this.parent.localeObj.getConstant('startDate') + ':' + ' ' +\n manualStartDateValue + '' : '';\n var manualEndDate_1 = data.endDate ? '' +\n this.parent.localeObj.getConstant('endDate') + ':' + '' +\n manualEndDateValue + '' : '';\n var contentTemp_7 = function () {\n return '' +\n taskName + manualStartDate_1 + autoStartDate_1 + manualEndDate_1 + autoEndDate_1 + durationValue_1 + '
';\n };\n content = initializeCSPTemplate(contentTemp_7);\n break;\n }\n case 'manualmilestone':\n {\n var autoStartValue = this.parent.getFormatedDate(data.autoStartDate, this.parent.getDateFormat());\n var autoEndValue = this.parent.getFormatedDate(data.autoEndDate, this.parent.getDateFormat());\n var dateValue = this.parent.getFormatedDate(data.startDate, this.parent.getDateFormat());\n if (this.parent.enableHtmlSanitizer) {\n autoStartValue = typeof (autoStartValue) === 'string' ? SanitizeHtmlHelper.sanitize(autoStartValue) : autoStartValue;\n autoEndValue = typeof (autoEndValue) === 'string' ? SanitizeHtmlHelper.sanitize(autoEndValue) : autoEndValue;\n dateValue = typeof (dateValue) === 'string' ? SanitizeHtmlHelper.sanitize(dateValue) : dateValue;\n }\n var autoStart_1 = data.autoStartDate ? '' +\n this.parent.localeObj.getConstant('subTasksStartDate') + ':' + ' ' +\n autoStartValue + '' : '';\n var autoEnd_1 = data.autoEndDate ? '' +\n this.parent.localeObj.getConstant('subTasksEndDate') + ':' + '' +\n autoEndValue + '' : '';\n var date_1 = ' Date:' +\n '' +\n dateValue + '';\n var contentTemp_8 = function () {\n return '' +\n taskName + date_1 + autoStart_1 + autoEnd_1 + '
';\n };\n content = initializeCSPTemplate(contentTemp_8);\n break;\n }\n }\n return content;\n };\n /**\n * To get the details of an event marker.\n *\n * @param {TooltipEventArgs} args .\n * @returns {EventMarkerModel} .\n * @private\n */\n Tooltip.prototype.getMarkerTooltipData = function (args) {\n var markerTooltipId = (args.target.id).match(/\\d+/g);\n var markerTooltipElement = this.parent.eventMarkers[Number(markerTooltipId)];\n return markerTooltipElement;\n };\n /**\n * To get the details of a connector line.\n *\n * @param {TooltipEventArgs} args .\n * @returns {PredecessorTooltip} .\n * @private\n */\n Tooltip.prototype.getPredecessorTooltipData = function (args) {\n var predeceesorParent = args.target.id;\n if (this.parent.enableHtmlSanitizer && typeof (predeceesorParent) === 'string') {\n predeceesorParent = SanitizeHtmlHelper.sanitize(predeceesorParent);\n }\n var taskIds = predeceesorParent.match(/ConnectorLineparent(.*)child(.*)/);\n taskIds.shift();\n var fromTask;\n var toTask;\n if (this.parent.viewType === 'ResourceView') {\n fromTask = this.parent.flatData[this.parent.getTaskIds().indexOf('T' + taskIds[0])];\n toTask = this.parent.flatData[this.parent.getTaskIds().indexOf('T' + taskIds[1])];\n }\n else {\n fromTask = this.parent.flatData[this.parent.ids.indexOf(taskIds[0])];\n toTask = this.parent.flatData[this.parent.ids.indexOf(taskIds[1])];\n }\n var predecessor = (fromTask.ganttProperties.predecessor).filter(function (pdc) { return pdc.to === taskIds[1]; });\n var predecessorTooltipData = {\n fromId: this.parent.viewType === 'ResourceView' ? fromTask.ganttProperties.taskId : fromTask.ganttProperties.rowUniqueID,\n toId: this.parent.viewType === 'ResourceView' ? toTask.ganttProperties.taskId : toTask.ganttProperties.rowUniqueID,\n fromName: fromTask.ganttProperties.taskName,\n toName: toTask.ganttProperties.taskName,\n linkType: predecessor[0].type,\n linkText: this.parent.getPredecessorTextValue(predecessor[0].type),\n offset: predecessor[0].offset,\n offsetUnit: predecessor[0].offsetUnit,\n offsetString: this.parent.getDurationString(predecessor[0].offset, predecessor[0].offsetUnit)\n };\n return predecessorTooltipData;\n };\n /**\n * To compile template string.\n *\n * @param {string | Function} template .\n * @param {Gantt} parent .\n * @param {IGanttData|PredecessorTooltip} data .\n * @param {string} propName .\n * @returns {NodeList} .\n * @private\n */\n Tooltip.prototype.templateCompiler = function (template, parent, data, propName) {\n var tooltipFunction = parent.chartRowsModule.templateCompiler(template);\n var templateID = parent.chartRowsModule.getTemplateID(propName);\n var templateNode = tooltipFunction(extend({ index: 0 }, data), parent, propName, templateID, true);\n return templateNode;\n };\n Tooltip.prototype.destroy = function () {\n this.toolTipObj.destroy();\n };\n return Tooltip;\n}());\nexport { Tooltip };\n","import { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\n/**\n * Focus module is used to handle certain action on focus elements in keyboard navigations.\n */\nvar FocusModule = /** @class */ (function () {\n function FocusModule(parent) {\n this.parent = parent;\n this.activeElement = null;\n this.previousActiveElement = null;\n }\n FocusModule.prototype.getActiveElement = function (isPreviousActiveElement) {\n return isPreviousActiveElement ? this.previousActiveElement : this.activeElement;\n };\n FocusModule.prototype.setActiveElement = function (element) {\n this.previousActiveElement = this.activeElement;\n this.activeElement = element;\n };\n /**\n * To perform key interaction in Gantt\n *\n * @param {KeyboardEventArgs} e .\n * @returns {void} .\n * @private\n */\n FocusModule.prototype.onKeyPress = function (e) {\n var ganttObj = this.parent;\n var expandedRecords = ganttObj.getExpandedRecords(ganttObj.currentViewData);\n if (isNullOrUndefined(this.parent.focusModule.getActiveElement()) && (e.action === 'expandAll' || e.action === 'collapseAll')) {\n var focussedElement = this.parent.element.querySelector('.e-treegrid');\n focussedElement.focus();\n }\n var targetElement = this.parent.focusModule.getActiveElement();\n if (e.action === 'home' || e.action === 'end' || e.action === 'downArrow' || e.action === 'upArrow' || e.action === 'delete' ||\n e.action === 'rightArrow' || e.action === 'leftArrow' || e.action === 'focusTask' || e.action === 'focusSearch' ||\n e.action === 'expandAll' || e.action === 'collapseAll') {\n if (!isNullOrUndefined(ganttObj.editModule) && !isNullOrUndefined(ganttObj.editModule.cellEditModule) &&\n ganttObj.editModule.cellEditModule.isCellEdit === true) {\n return;\n }\n }\n if (ganttObj.isAdaptive) {\n if (e.action === 'addRowDialog' || e.action === 'editRowDialog' || e.action === 'delete'\n || e.action === 'addRow') {\n if (ganttObj.selectionModule && ganttObj.selectionSettings.type === 'Multiple') {\n ganttObj.selectionModule.hidePopUp();\n document.getElementsByClassName('e-gridpopup')[0].style.display = 'none';\n }\n }\n }\n switch (e.action) {\n case 'home':\n if (ganttObj.selectionModule && ganttObj.selectionSettings.mode !== 'Cell') {\n if (ganttObj.selectedRowIndex === 0) {\n return;\n }\n ganttObj.selectionModule.selectRow(0, false, true);\n }\n break;\n case 'end':\n if (ganttObj.selectionModule && ganttObj.selectionSettings.mode !== 'Cell') {\n var currentSelectingRecord = expandedRecords[expandedRecords.length - 1];\n if (ganttObj.selectedRowIndex === ganttObj.flatData.indexOf(currentSelectingRecord)) {\n return;\n }\n ganttObj.selectionModule.selectRow(ganttObj.flatData.indexOf(currentSelectingRecord), false, true);\n }\n break;\n case 'downArrow':\n case 'upArrow':\n {\n var searchElement = ganttObj.element.querySelector('#' + ganttObj.element.id + '_searchbar');\n if (searchElement && searchElement.parentElement.classList.contains('e-input-focus')) {\n ganttObj.selectionModule.clearSelection();\n }\n if (!ganttObj.element.classList.contains('e-scroll-disabled')) {\n this.upDownKeyNavigate(e);\n if (!isNullOrUndefined(targetElement) && !isNullOrUndefined(targetElement.closest('.e-chart-row'))) {\n ganttObj.ganttChartModule.manageFocus(this.getActiveElement(), 'remove', true);\n }\n }\n break;\n }\n case 'expandAll':\n ganttObj.ganttChartModule.expandCollapseAll('expand');\n break;\n case 'collapseAll':\n ganttObj.ganttChartModule.expandCollapseAll('collapse');\n break;\n case 'expandRow':\n case 'collapseRow':\n this.expandCollapseKey(e);\n break;\n case 'saveRequest':\n if (!isNullOrUndefined(ganttObj.editModule) && !isNullOrUndefined(ganttObj.editModule.cellEditModule) &&\n ganttObj.editModule.cellEditModule.isCellEdit) {\n var col = ganttObj.editModule.cellEditModule.editedColumn;\n if (col.field === ganttObj.columnMapping.duration && !isNullOrUndefined(col.edit) &&\n !isNullOrUndefined(col.edit.read)) {\n var textBox = e.target.ej2_instances[0];\n var textValue = e.target.value;\n var ganttProp = ganttObj.currentViewData[ganttObj.selectedRowIndex].ganttProperties;\n var tempValue = void 0;\n if (col.field === ganttObj.columnMapping.duration) {\n tempValue = !isNullOrUndefined(col.edit) && !isNullOrUndefined(col.edit.read) ? col.edit.read() :\n // eslint-disable-next-line\n !isNullOrUndefined(col.valueAccessor) ? col.valueAccessor(ganttObj.columnMapping.duration, ganttObj.editedRecords, col) :\n ganttObj.dataOperation.getDurationString(ganttProp.duration, ganttProp.durationUnit);\n if (textValue !== tempValue.toString()) {\n textBox.value = textValue;\n textBox.dataBind();\n }\n }\n }\n if (ganttObj.editModule.dialogModule.dialogObj && getValue('dialogOpen', ganttObj.editModule.dialogModule.dialogObj)) {\n return;\n }\n ganttObj.treeGrid.grid.saveCell();\n var focussedElement = ganttObj.element.querySelector('.e-treegrid');\n focussedElement.focus();\n }\n if (!isNullOrUndefined(this.parent.onTaskbarClick) && !isNullOrUndefined(targetElement)\n && !isNullOrUndefined(targetElement.closest('.e-chart-row'))) {\n var target = e.target;\n var taskbarElement = targetElement.querySelector('.e-gantt-parent-taskbar,' +\n '.e-gantt-child-taskbar,.e-gantt-milestone');\n if (taskbarElement) {\n this.parent.ganttChartModule.onTaskbarClick(e, target, taskbarElement);\n }\n }\n break;\n case 'cancelRequest':\n if (!isNullOrUndefined(ganttObj.editModule) && !isNullOrUndefined(ganttObj.editModule.cellEditModule)) {\n ganttObj.editModule.cellEditModule.isCellEdit = false;\n if (!isNullOrUndefined(ganttObj.toolbarModule)) {\n ganttObj.toolbarModule.refreshToolbarItems();\n }\n }\n break;\n case 'addRow':\n {\n if (ganttObj.editModule && ganttObj.editModule.cellEditModule && ganttObj.editModule.cellEditModule.isCellEdit) {\n e.stopPropagation();\n }\n else if (isNullOrUndefined(document.getElementById(this.parent.element.id + '_dialog'))) {\n e.preventDefault();\n ganttObj.addRecord(undefined, this.parent.editSettings.newRowPosition, this.parent.selectedRowIndex);\n var focussedElement = ganttObj.element;\n focussedElement.focus();\n }\n break;\n }\n case 'addRowDialog':\n e.preventDefault();\n if (ganttObj.editModule && ganttObj.editModule.dialogModule && ganttObj.editSettings.allowAdding) {\n if (ganttObj.editModule.dialogModule.dialogObj && getValue('dialogOpen', ganttObj.editModule.dialogModule.dialogObj)) {\n return;\n }\n ganttObj.editModule.dialogModule.openAddDialog();\n }\n break;\n case 'editRowDialog':\n {\n e.preventDefault();\n var focussedTreeElement = ganttObj.element.querySelector('.e-treegrid');\n focussedTreeElement.focus();\n if (ganttObj.editModule && ganttObj.editModule.dialogModule && ganttObj.editSettings.allowEditing) {\n if (ganttObj.editModule.dialogModule.dialogObj && getValue('dialogOpen', ganttObj.editModule.dialogModule.dialogObj)) {\n return;\n }\n ganttObj.editModule.dialogModule.openToolbarEditDialog();\n }\n break;\n }\n case 'delete':\n if (ganttObj.selectionModule && ganttObj.editModule && ganttObj.editModule.dialogModule &&\n (!ganttObj.editModule.dialogModule.dialogObj || (ganttObj.editModule.dialogModule.dialogObj &&\n !ganttObj.editModule.dialogModule.dialogObj.visible)) && (!ganttObj.editSettings.allowTaskbarEditing\n || (ganttObj.editSettings.allowTaskbarEditing && !ganttObj.editModule.taskbarEditModule.touchEdit))) {\n if ((ganttObj.selectionSettings.mode !== 'Cell' && ganttObj.selectionModule.selectedRowIndexes.length)\n || (ganttObj.selectionSettings.mode === 'Cell' && ganttObj.selectionModule.getSelectedRowCellIndexes().length)) {\n if (!isNullOrUndefined(e.target)) {\n if (e.target['tagName'] !== 'INPUT') {\n ganttObj.editModule.startDeleteAction();\n }\n }\n else {\n ganttObj.editModule.startDeleteAction();\n }\n }\n }\n break;\n case 'focusTask':\n {\n e.preventDefault();\n var selectedId = void 0;\n if (ganttObj.selectionModule) {\n var currentViewData = ganttObj.currentViewData;\n if (ganttObj.selectionSettings.mode !== 'Cell' &&\n !isNullOrUndefined(currentViewData[ganttObj.selectedRowIndex])) {\n selectedId = ganttObj.currentViewData[ganttObj.selectedRowIndex].ganttProperties.rowUniqueID;\n }\n else if (ganttObj.selectionSettings.mode === 'Cell' &&\n ganttObj.selectionModule.getSelectedRowCellIndexes().length > 0) {\n var selectCellIndex = ganttObj.selectionModule.getSelectedRowCellIndexes();\n selectedId = currentViewData[selectCellIndex[selectCellIndex.length - 1].rowIndex].ganttProperties.rowUniqueID;\n }\n }\n if (selectedId) {\n ganttObj.scrollToTask(selectedId.toString());\n }\n break;\n }\n case 'focusSearch':\n {\n if (ganttObj.element.querySelector('#' + ganttObj.element.id + '_searchbar')) {\n var searchElement = ganttObj.element.querySelector('#' + ganttObj.element.id + '_searchbar');\n searchElement.setAttribute('tabIndex', '-1');\n searchElement.focus();\n }\n break;\n }\n case 'tab':\n case 'shiftTab':\n if (!ganttObj.element.classList.contains('e-scroll-disabled')) {\n ganttObj.ganttChartModule.onTabAction(e);\n }\n break;\n case 'contextMenu':\n {\n var contextMenu = document.getElementById(this.parent.element.id +\n '_contextmenu').ej2_instances[0];\n var containerPosition = this.parent.getOffsetRect(e.target);\n var top_1 = containerPosition.top + (containerPosition.height / 2);\n var left = containerPosition.left + (containerPosition.width / 2);\n this.setActiveElement(e.target);\n contextMenu.open(top_1, left);\n e.preventDefault();\n break;\n }\n default:\n {\n var eventArgs = {\n requestType: 'keyPressed',\n action: e.action,\n keyEvent: e\n };\n ganttObj.trigger('actionComplete', eventArgs);\n break;\n }\n }\n };\n FocusModule.prototype.upDownKeyNavigate = function (e) {\n e.preventDefault();\n var ganttObj = this.parent;\n var expandedRecords = ganttObj.getExpandedRecords(ganttObj.currentViewData);\n if (ganttObj.selectionModule) {\n if (ganttObj.selectionSettings.mode !== 'Cell' && ganttObj.selectedRowIndex !== -1) {\n var selectedItem = ganttObj.currentViewData[ganttObj.selectedRowIndex];\n var focusedRowIndex = this.parent.ganttChartModule.focusedRowIndex;\n var selectingRowIndex = expandedRecords.indexOf(selectedItem);\n var currentSelectingRecord = e.action === 'downArrow' ? expandedRecords[selectingRowIndex + 1] :\n expandedRecords[selectingRowIndex - 1];\n ganttObj.selectionModule.selectRow(ganttObj.currentViewData.indexOf(currentSelectingRecord), false, true);\n }\n else if (ganttObj.selectionSettings.mode === 'Cell' && ganttObj.selectionModule.getSelectedRowCellIndexes().length > 0) {\n var selectCellIndex = ganttObj.selectionModule.getSelectedRowCellIndexes();\n var selectedCellItem = selectCellIndex[selectCellIndex.length - 1];\n var currentCellIndex = selectedCellItem.cellIndexes[selectedCellItem.cellIndexes.length - 1];\n var selectedItem = ganttObj.currentViewData[selectedCellItem.rowIndex];\n var selectingRowIndex = expandedRecords.indexOf(selectedItem);\n var currentSelectingRecord = e.action === 'downArrow' ? expandedRecords[selectingRowIndex + 1] :\n expandedRecords[selectingRowIndex - 1];\n var cellInfo = {\n rowIndex: ganttObj.currentViewData.indexOf(currentSelectingRecord),\n cellIndex: currentCellIndex\n };\n ganttObj.selectionModule.selectCell(cellInfo);\n }\n this.parent.ganttChartModule.focusedRowIndex = this.parent.selectedRowIndex;\n }\n };\n FocusModule.prototype.expandCollapseKey = function (e) {\n var ganttObj = this.parent;\n if (ganttObj.selectionModule && ganttObj.selectedRowIndex !== -1) {\n var selectedRowIndex = void 0;\n if (ganttObj.selectionSettings.mode !== 'Cell') {\n selectedRowIndex = ganttObj.selectedRowIndex;\n }\n else if (ganttObj.selectionSettings.mode === 'Cell' && ganttObj.selectionModule.getSelectedRowCellIndexes().length > 0) {\n var selectCellIndex = ganttObj.selectionModule.getSelectedRowCellIndexes();\n selectedRowIndex = selectCellIndex[selectCellIndex.length - 1].rowIndex;\n }\n if (e.action === 'expandRow') {\n ganttObj.expandByIndex(selectedRowIndex);\n }\n else {\n ganttObj.collapseByIndex(selectedRowIndex);\n }\n }\n };\n return FocusModule;\n}());\nexport { FocusModule };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, createElement, Complex, addClass, removeClass, Event, formatUnit, Browser, closest } from '@syncfusion/ej2-base';\nimport { Internationalization, extend, getValue, isObjectArray, isObject, setValue, isUndefined } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, L10n, EventHandler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, KeyboardEvents, Collection, append, remove } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { TaskProcessor } from './task-processor';\nimport { GanttChart } from './gantt-chart';\nimport { Timeline } from '../renderer/timeline';\nimport { GanttTreeGrid } from './tree-grid';\nimport { SortSettings } from '../models/models';\nimport { LoadingIndicator } from '../models/models';\nimport { TaskFields, TimelineSettings, Holiday, EventMarker, DayWorkingTime, EditSettings, SelectionSettings } from '../models/models';\nimport { FilterSettings, SplitterSettings, TooltipSettings, LabelSettings } from '../models/models';\nimport { SearchSettings, ResourceFields } from '../models/models';\nimport { DateProcessor } from './date-processor';\nimport { ChartRows } from '../renderer/chart-rows';\nimport { Dependency } from '../actions/dependency';\nimport * as cls from './css-constants';\nimport { TreeGrid } from '@syncfusion/ej2-treegrid';\nimport { getActualProperties } from '@syncfusion/ej2-grids';\nimport { ConnectorLine } from '../renderer/connector-line';\nimport { Splitter } from './splitter';\nimport { Tooltip } from '../renderer/tooltip';\nimport { FocusModule } from '../actions/keyboard';\nimport { isCountRequired } from './utils';\n/**\n *\n * Represents the Gantt chart component.\n * ```html\n *
\n * \n * ```\n */\nvar Gantt = /** @class */ (function (_super) {\n __extends(Gantt, _super);\n function Gantt(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.showIndicator = true;\n _this.singleTier = 0;\n _this.isLocaleChanged = false;\n /** @hidden */\n _this.isCancelled = false;\n /** @hidden */\n _this.previousRecords = {};\n /** @hidden */\n _this.editedRecords = [];\n /** @hidden */\n _this.modifiedRecords = [];\n /** @hidden */\n _this.isOnEdit = false;\n /** @hidden */\n _this.isOnDelete = false;\n /** @hidden */\n _this.isExpandCollapseLevelMethod = false;\n /** @hidden */\n _this.isDynamicData = false;\n /** @hidden */\n _this.isConnectorLineUpdate = false;\n /** @hidden */\n _this.staticSelectedRowIndex = -1;\n _this.needsID = true;\n /** @hidden */\n _this.showActiveElement = true;\n /** @hidden */\n _this.addDeleteRecord = false;\n /** @hidden */\n _this.enableHeaderFocus = true;\n /** @hidden */\n _this.enableValidation = true;\n /**\n * @private\n */\n _this.isTreeGridRendered = false;\n /**\n * @private\n */\n _this.isFromOnPropertyChange = false;\n /**\n * @private\n */\n _this.isFromRenderBaseline = false;\n /**\n * @private\n */\n _this.isGanttChartRendered = false;\n /**\n * @private\n */\n _this.isEdit = false;\n setValue('mergePersistData', _this.mergePersistGanttData, _this);\n return _this;\n }\n /**\n * To get the module name\n *\n * @returns {string} .\n * @private\n */\n Gantt.prototype.getModuleName = function () {\n return 'gantt';\n };\n /**\n * For internal use only - Initialize the event handler\n *\n * @returns {void} .\n * @private\n */\n Gantt.prototype.preRender = function () {\n this.initProperties();\n };\n Gantt.prototype.initProperties = function () {\n this.globalize = new Internationalization(this.locale);\n this.isAdaptive = Browser.isDevice;\n this.flatData = [];\n this.currentViewData = [];\n this.updatedRecords = [];\n this.ids = [];\n this.ganttColumns = [];\n this.localeObj = new L10n(this.getModuleName(), this.getDefaultLocale(), this.locale);\n this.dataOperation = new TaskProcessor(this);\n this.nonWorkingHours = [];\n this.nonWorkingTimeRanges = [];\n this.workingTimeRanges = [];\n this.defaultEndTime = null;\n this.defaultStartTime = null;\n this.durationUnitTexts = {\n days: 'days',\n hours: 'hours',\n minutes: 'minutes',\n day: 'day',\n hour: 'hour',\n minute: 'minute'\n };\n this.durationUnitEditText = {\n minute: ['m', 'min', 'minute', 'minutes'],\n hour: ['h', 'hr', 'hour', 'hours'],\n day: ['d', 'dy', 'day', 'days']\n };\n this.perDayWidth = null;\n this.isMileStoneEdited = false;\n this.chartVerticalLineContainer = null;\n this.updatedConnectorLineCollection = [];\n this.connectorLineIds = [];\n this.predecessorsCollection = [];\n this.isInPredecessorValidation = this.enablePredecessorValidation;\n this.isValidationEnabled = true;\n this.isLoad = true;\n this.editedTaskBarItem = null;\n this.validationDialogElement = null;\n this.currentEditedArgs = {};\n this.dialogValidateMode = {\n respectLink: false,\n removeLink: false,\n preserveLinkWithEditing: true\n };\n this.secondsPerDay = this.dataOperation.getSecondsPerDay();\n this.nonWorkingDayIndex = [];\n this.dataOperation.getNonWorkingDayIndex();\n this.columnMapping = {};\n this.controlId = this.element.id;\n this.cloneProjectStartDate = this.enablePersistence && this.cloneProjectStartDate ?\n this.cloneProjectStartDate : null;\n this.cloneProjectEndDate = this.enablePersistence && this.cloneProjectEndDate ?\n this.cloneProjectEndDate : null;\n this.totalHolidayDates = this.dataOperation.getHolidayDates();\n this.ganttChartModule = new GanttChart(this);\n this.timelineModule = new Timeline(this);\n this.chartRowsModule = new ChartRows(this);\n this.treeGridModule = new GanttTreeGrid(this);\n this.dateValidationModule = new DateProcessor(this);\n this.predecessorModule = new Dependency(this);\n this.connectorLineModule = new ConnectorLine(this);\n this.splitterModule = new Splitter(this);\n this.tooltipModule = new Tooltip(this);\n this.keyConfig = {\n home: 'home',\n end: 'end',\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n collapseAll: 'ctrl+uparrow',\n expandAll: 'ctrl+downarrow',\n collapseRow: 'ctrl+shift+uparrow',\n expandRow: 'ctrl+shift+downarrow',\n saveRequest: '13',\n cancelRequest: '27',\n addRow: 'insert',\n addRowDialog: 'ctrl+insert',\n editRowDialog: 'ctrl+f2',\n delete: 'delete',\n tab: 'tab',\n shiftTab: 'shift+tab',\n focusTask: 'shift+f5',\n indentLevel: 'shift+leftarrow',\n outdentLevel: 'shift+rightarrow',\n focusSearch: 'ctrl+shift+70',\n contextMenu: 'shift+F10' //F Key\n };\n this.focusModule = new FocusModule(this);\n if (this.zoomingLevels.length === 0) {\n this.setProperties({ zoomingLevels: this.getZoomingLevels() }, true);\n }\n this.resourceFieldsMapping();\n if (isNullOrUndefined(this.resourceFields.unit)) { //set resourceUnit as unit if not mapping\n this.setProperties({ resourceFields: { unit: 'unit' } }, true);\n }\n if (!isNullOrUndefined(this.taskFields.work)) {\n this.setProperties({ taskType: 'FixedWork' }, true);\n }\n this.taskIds = [];\n };\n /**\n * @returns {string} .\n * @private\n */\n Gantt.prototype.getDateFormat = function () {\n if (!isNullOrUndefined(this.dateFormat)) {\n return this.dateFormat;\n }\n else {\n var ganttDateFormat = this.globalize.getDatePattern({ skeleton: 'yMd' });\n return ganttDateFormat;\n }\n };\n /**\n * To get timezone offset.\n *\n * @returns {number} .\n * @private\n */\n Gantt.prototype.getDefaultTZOffset = function () {\n var janMonth = new Date(new Date().getFullYear(), 0, 1);\n var julMonth = new Date(new Date().getFullYear(), 6, 1); //Because there is no reagions DST inbetwwen this range\n return Math.max(janMonth.getTimezoneOffset(), julMonth.getTimezoneOffset());\n };\n /**\n * To check whether the date is in DST.\n *\n * @param {Date} date - Defines the date to check whether it is DST.\n * @returns {boolean} .\n * @private\n */\n Gantt.prototype.isInDst = function (date) {\n return date.getTimezoneOffset() < this.getDefaultTZOffset();\n };\n /**\n * Method to map resource fields.\n *\n * @returns {void} .\n */\n Gantt.prototype.resourceFieldsMapping = function () {\n var resourceSettings = this.resourceFields;\n resourceSettings.id = !isNullOrUndefined(resourceSettings.id) ? resourceSettings.id : this.resourceIDMapping;\n resourceSettings.name = !isNullOrUndefined(resourceSettings.name) ? resourceSettings.name : this.resourceNameMapping;\n };\n /**\n * To validate height and width\n *\n * @param {string | number} value .\n * @returns {string} .\n */\n Gantt.prototype.validateDimentionValue = function (value) {\n if (!isNullOrUndefined(value)) {\n if (typeof (value) === 'string' && value !== 'auto' && value.indexOf('%') === -1) {\n return value.indexOf('px') === -1 ? value + 'px' : value;\n }\n else if (typeof (value) === 'number') {\n return value + 'px';\n }\n else {\n return value.toString();\n }\n }\n else {\n return null;\n }\n };\n /**\n * To calculate dimensions of Gantt control\n *\n * @returns {void} .\n */\n Gantt.prototype.calculateDimensions = function () {\n var settingsHeight = this.validateDimentionValue(this.height);\n var settingsWidth = this.validateDimentionValue(this.width);\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n settingsWidth = this.width;\n }\n var elementStyleHeight = this.element.style.height;\n var elementStyleWidth = this.element.style.width;\n if (settingsWidth) {\n this.element.style.width = settingsWidth;\n }\n if (settingsHeight) {\n this.element.style.height = settingsHeight;\n }\n if (!settingsHeight && !elementStyleHeight) {\n this.element.style.height = 'auto'; // old 450px\n }\n if (!settingsWidth && !elementStyleWidth) {\n this.element.style.width = 'auto';\n }\n this.ganttHeight = this.element.offsetHeight;\n this.ganttWidth = this.element.offsetWidth;\n };\n /**\n * @returns {void} .\n * @private\n */\n Gantt.prototype.render = function () {\n if (this.isReact) {\n this.treeGrid.isReact = true;\n this.treeGrid.grid.isReact = true;\n }\n if (this.isVue) {\n this.treeGrid.isVue = true;\n this.treeGrid.grid.isVue = true;\n this.treeGrid.vueInstance = this.vueInstance;\n this.treeGrid.grid.vueInstance = this.vueInstance;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.trigger('load', {});\n this.element.classList.add(cls.root);\n if (this.isAdaptive) {\n this.element.classList.add(cls.adaptive);\n }\n else {\n this.element.classList.remove(cls.adaptive);\n }\n this.calculateDimensions();\n if (!isNullOrUndefined(this.toolbarModule)) {\n this.renderToolbar();\n }\n this.splitterModule.renderSplitter();\n this.notify('renderPanels', null);\n if (!isNullOrUndefined(this.loadingIndicator) && this.loadingIndicator.indicatorType === \"Shimmer\") {\n this.showMaskRow();\n }\n else {\n this.showSpinner();\n }\n this.dataOperation.checkDataBinding();\n };\n Gantt.prototype.hideMaskRow = function () {\n var isTablePresent = this.element.querySelectorAll('.e-masked-table').length;\n if (!isNullOrUndefined(this.contentMaskTable) && (isTablePresent != 0 || this.contentMaskTable)) {\n var maskTable = this.contentMaskTable;\n remove(maskTable);\n this.contentMaskTable = null;\n }\n isTablePresent = this.element.querySelectorAll('.e-masked-table').length;\n if (!isNullOrUndefined(this.headerMaskTable) && (isTablePresent != 0 || this.headerMaskTable)) {\n var maskTable = this.headerMaskTable;\n remove(maskTable);\n this.headerMaskTable = null;\n }\n while ((this.element.querySelectorAll('.e-table-background')).length != 0) {\n this.element.querySelectorAll('.e-table-background')[0].remove();\n }\n while ((this.element.querySelectorAll('.e-temp-timeline')).length != 0) {\n this.element.querySelectorAll('.e-temp-timeline')[0].remove();\n }\n if (this.element.querySelectorAll('.' + cls.timelineHeaderTableContainer).length != 0) {\n for (var i = 0; i < this.singleTier; i++) {\n if (!isNullOrUndefined(this.element.querySelectorAll('.' + cls.timelineHeaderTableContainer)[parseInt(i.toString(), 10)])) {\n this.element.querySelectorAll('.' + cls.timelineHeaderTableContainer)[parseInt(i.toString(), 10)]['style'].visibility = \"visible\";\n }\n }\n }\n if (!isNullOrUndefined(this.element.querySelector('.' + cls.timelineHeaderContainer))) {\n this.element.querySelector('.' + cls.timelineHeaderContainer)['style'].position = \"relative\";\n }\n if (!isNullOrUndefined(this.element.getElementsByClassName(cls.chartBodyContent)[0])) {\n this.element.getElementsByClassName(cls.chartBodyContent)[0]['style'].visibility = \"visible\";\n }\n };\n Gantt.prototype.showMaskRow = function () {\n var ganttHeader = this.chartPane.childNodes[0].childNodes[0];\n this.scrollLeftValue = this.chartPane.childNodes[0].childNodes[0]['scrollLeft'];\n var ganttContent = this.chartPane.childNodes[0].childNodes[1];\n if (this.treeGrid.element) {\n this.ganttChartModule['setVirtualHeight']();\n }\n if (!this.contentMaskTable) {\n if (ganttContent) {\n var content = ganttContent;\n this.renderBackGround(content);\n if (this.element.querySelectorAll('.' + cls.timelineHeaderTableContainer).length != 0) {\n this.singleTier = this.timelineModule.isSingleTier ? 1 : 2;\n for (var i = 0; i < this.singleTier; i++) {\n this.element.querySelectorAll('.' + cls.timelineHeaderTableContainer)[parseInt(i.toString(), 10)]['style'].visibility = \"hidden\";\n }\n }\n if (this.singleTier === 0) {\n this.singleTier = 2;\n }\n this.element.getElementsByClassName(cls.chartBodyContent)[0]['style'].visibility = \"hidden\";\n this.contentMaskTable = this.contentMaskTable = this.createMaskTable(content);\n }\n if (ganttHeader) {\n this.element.querySelector('.' + cls.timelineHeaderContainer)['style'].position = \"static\";\n var content = ganttHeader;\n this.renderHeaderBackground(content);\n this.headerMaskTable = this.headerMaskTable = this.createMaskTable(content);\n }\n }\n };\n Gantt.prototype.renderHeaderBackground = function (element) {\n var parentElement = element;\n var timelineHeight = element.getBoundingClientRect().height;\n var header = closest(parentElement, '.' + cls.timelineHeaderContainer) ? true : false;\n if (header) {\n var div = this.createElement('div', { className: 'e-table-background' });\n var tempRow = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {\n style: 'height: ' + timelineHeight + 'px;'\n } });\n var backgroundLines = 0;\n var containerWidth = Math.round(element.getBoundingClientRect().width);\n for (var i = 0; i < 3; i++) {\n if (this.enableRtl) {\n div.appendChild(this.createElement('div', { className: 'e-div-background', attrs: {\n style: 'left: ' + (containerWidth -= ((160))) + 'px; top:0px;'\n } }));\n }\n else {\n div.appendChild(this.createElement('div', { className: 'e-div-background', attrs: {\n style: 'left: ' + (backgroundLines += ((160))) + 'px; top:0px;'\n } }));\n }\n }\n parentElement.insertBefore(div, parentElement.firstChild);\n }\n };\n Gantt.prototype.renderBackGround = function (element) {\n var parentElement = element;\n var timelineHeight = element.getBoundingClientRect().height;\n var content = closest(parentElement, '.' + cls.chartBodyContainer) ? true : false;\n if (content) {\n var div = this.createElement('div', { className: 'e-table-background' });\n var tempRow = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {\n style: 'height: ' + timelineHeight + 'px;'\n } });\n var backgroundLines = 0;\n var containerWidth = Math.round(element.getBoundingClientRect().width);\n for (var i = 0; i < 3; i++) {\n if (this.enableRtl) {\n div.appendChild(this.createElement('div', { className: 'e-div-background', attrs: {\n style: 'left: ' + (containerWidth -= (160)) + 'px;z-index:1;'\n } }));\n }\n else {\n div.appendChild(this.createElement('div', { className: 'e-div-background', attrs: {\n style: 'left: ' + (backgroundLines += (160)) + 'px;z-index:1;'\n } }));\n }\n }\n parentElement.insertBefore(div, parentElement.firstChild);\n }\n };\n Gantt.prototype.createMaskTable = function (element) {\n var parentElement = element;\n var shimmerContainerHeight = element.getBoundingClientRect().height;\n var header = closest(parentElement, '.' + cls.timelineHeaderContainer) ? true : false;\n var maskTable;\n if (header) {\n maskTable = this.createEmptyTimeLineTable(shimmerContainerHeight);\n maskTable.style.position = 'sticky';\n maskTable.style.left = 0 + 'px';\n if (this.enableRtl) {\n maskTable.style.removeProperty('left');\n }\n }\n else {\n maskTable = this.createEmptyMaskTable(shimmerContainerHeight);\n maskTable.style.position = 'absolute';\n maskTable.style.zIndex = 1;\n }\n if (!header) {\n maskTable.style.height = element.getBoundingClientRect().height + 'px';\n parentElement.insertBefore(maskTable, parentElement.firstChild);\n }\n else {\n maskTable.style.height = element.getBoundingClientRect().height + 'px';\n var div = this.createElement('div', { className: 'e-temp-timeline' });\n div.style.width = 614 + 'px';\n div.style.position = 'sticky';\n if (this.enableRtl) {\n div.style['margin-right'] = Math.abs(this.scrollLeftValue) + 'px';\n }\n else {\n div.style['margin-left'] = this.scrollLeftValue + 'px';\n }\n div.appendChild(maskTable);\n parentElement.insertBefore(div, parentElement.firstChild);\n }\n return maskTable;\n };\n Gantt.prototype.createEmptyTimeLineTable = function (timelineHeight) {\n var table = this.createElement('table', { className: 'e-table e-masked-table' });\n var tbody = this.createElement('tbody', { className: 'e-masked-tbody' });\n var row = [];\n var duplicateRow = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {\n style: 'height: ' + timelineHeight / 2 + 'px;'\n } });\n for (var i = 0; i < this.singleTier; i++) {\n row.push(duplicateRow.cloneNode(true));\n }\n this.topBottomHeader = 0;\n for (var i = 0; i < row.length; i++) {\n tbody.appendChild(this.applyTimelineMaskRow(row[parseInt(i.toString(), 10)]));\n this.topBottomHeader = this.topBottomHeader + 1;\n }\n table.appendChild(tbody);\n table.style.width = 100 + '%';\n return table;\n };\n Gantt.prototype.applyTimelineMaskRow = function (row) {\n var maskRow = row;\n maskRow.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));\n maskRow.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));\n maskRow.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));\n maskRow.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));\n for (var i = 0; i < maskRow.childNodes.length - 1; i++) {\n maskRow.childNodes[parseInt(i.toString(), 10)]['style']['width'] = 166 + 'px';\n }\n var maskCells = [].slice.call(maskRow.childNodes);\n for (var i = 0; i < maskCells.length; i++) {\n var maskCell = maskCells[parseInt(i.toString(), 10)];\n switch (this.topBottomHeader) {\n case 0:\n if (this.enableRtl) {\n maskCell.innerHTML = '';\n maskCell.children[0]['style'].left = -20 + 'px';\n }\n else {\n maskCell.innerHTML = '';\n }\n break;\n case 1:\n maskCell.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));\n maskCell.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));\n maskCell.appendChild(this.createElement('td', { className: 'e-timeline-masked-top-header-cell' }));\n var innerMaskCells = [].slice.call(maskCell.childNodes);\n for (var i_1 = 0; i_1 < innerMaskCells.length; i_1++) {\n var htmlInner = innerMaskCells[parseInt(i_1.toString(), 10)];\n if (i_1 === 0) {\n if (this.enableRtl) {\n htmlInner.innerHTML = '';\n htmlInner.children[0]['style'].left = -14 + 'px';\n }\n else {\n htmlInner.innerHTML = '';\n }\n }\n else if (i_1 === 1) {\n if (this.enableRtl) {\n htmlInner.innerHTML = '';\n htmlInner.children[0]['style'].left = -30 + 'px';\n }\n else {\n htmlInner.innerHTML = '';\n }\n }\n else {\n if (this.enableRtl) {\n htmlInner.innerHTML = '';\n htmlInner.children[0]['style'].left = -60 + 'px';\n }\n else {\n htmlInner.innerHTML = '';\n }\n }\n }\n break;\n }\n }\n return maskRow;\n };\n Gantt.prototype.createEmptyMaskTable = function (timelineHeight) {\n var table = this.createElement('table', { className: 'e-table e-masked-table' });\n var tbody = this.createElement('tbody', { className: 'e-masked-tbody' });\n var row = [];\n var duplicateRow = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {\n style: 'height: ' + timelineHeight / 7 + 'px;'\n } });\n this.columnLoop = 0;\n for (var i = 0; i < 6; i++) {\n row.push(duplicateRow.cloneNode(true));\n }\n for (var j = 0; j < row.length; j++) {\n if (this.columnLoop < 4) {\n this.columnLoop = this.columnLoop + 1;\n }\n else if (this.columnLoop === 4) {\n this.columnLoop = 1;\n }\n tbody.appendChild(this.applyMaskRow(row[parseInt(j.toString(), 10)]));\n }\n table.appendChild(tbody);\n table.style.width = 100 + '%';\n var div = this.createElement('div', { className: 'e-temp-container' });\n div.style.width = 'calc(100% - ' + 17 + 'px)';\n div.style.overflow = 'hidden';\n div.appendChild(table);\n return div;\n };\n Gantt.prototype.applyMaskRow = function (row) {\n var maskRow = row;\n if (this.columnLoop < 4) {\n maskRow.appendChild(this.createElement('td', { className: 'e-masked-cell e-rowcell' }));\n maskRow.appendChild(this.createElement('td', { className: 'e-masked-cell e-rowcell' }));\n }\n else {\n maskRow.appendChild(this.createElement('td', { className: 'e-masked-cell e-rowcell' }));\n }\n var maskCells = [].slice.call(maskRow.childNodes);\n for (var i = 0; i < maskCells.length; i++) {\n var maskCell = maskCells[parseInt(i.toString(), 10)];\n switch (this.columnLoop) {\n case 1:\n if (i === 0) {\n if (this.enableRtl) {\n maskCell.innerHTML = '';\n maskCell.children[0]['style'].left = -14 + 'px';\n }\n else {\n maskCell.innerHTML = '';\n }\n }\n else {\n maskCell.innerHTML = '';\n }\n break;\n case 2:\n if (i === 0) {\n if (this.enableRtl) {\n maskCell.innerHTML = '';\n maskCell.children[0]['style'].left = -14 + 'px';\n }\n else {\n maskCell.innerHTML = '';\n }\n }\n else {\n maskCell.innerHTML = '';\n }\n break;\n case 3:\n if (i === 0) {\n if (this.enableRtl) {\n maskCell.innerHTML = '';\n maskCell.children[0]['style'].left = -64 + 'px';\n }\n else {\n maskCell.innerHTML = '';\n }\n }\n else {\n if (this.enableRtl) {\n maskCell.innerHTML = '';\n maskCell.children[0]['style'].left = -192 + 'px';\n }\n else {\n maskCell.innerHTML = '';\n }\n }\n break;\n case 4:\n if (this.enableRtl) {\n maskCell.innerHTML = '';\n maskCell.children[0]['style'].left = -388 + 'px';\n }\n else {\n maskCell.innerHTML = '';\n }\n break;\n }\n }\n return maskRow;\n };\n /**\n * Method used to show spinner.\n *\n * @returns {void} .\n */\n Gantt.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Method used to hide spinner.\n *\n * @returns {void} .\n */\n Gantt.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * @returns {void} .\n * @private\n */\n Gantt.prototype.processTimeline = function () {\n this.timelineModule.processTimelineUnit();\n this.timelineModule.calculateZoomingLevelsPerDayWidth(); // To calculate the perDaywidth\n };\n /**\n * @param {boolean} isChange -Defines whether task data is changed.\n * @returns {void} .\n * @private\n */\n Gantt.prototype.renderGantt = function (isChange) {\n if (isChange) {\n this.isFromOnPropertyChange = isChange;\n }\n // predecessor calculation\n if (this.predecessorModule && this.taskFields.dependency) {\n this.predecessorModule['parentIds'] = [];\n this.predecessorModule['parentRecord'] = [];\n this.predecessorModule.updatePredecessors();\n if (this.isInPredecessorValidation && this.enableValidation && this.autoCalculateDateScheduling) {\n this.predecessorModule.updatedRecordsDateByPredecessor();\n }\n }\n if (this.enableValidation) {\n this.dataOperation.calculateProjectDates();\n this.timelineModule.validateTimelineProp();\n }\n if (isChange) {\n if (this.enableValidation) {\n this.dataOperation.updateGanttData();\n }\n if (this.allowParentDependency) {\n this.predecessorModule.updateParentPredecessor();\n }\n if (this.dataSource instanceof Object && isCountRequired(this)) {\n var count = getValue('count', this.dataSource);\n this.treeGrid.dataSource = { result: this.flatData, count: count };\n }\n else {\n this.treeGrid.setProperties({ dataSource: this.flatData }, false);\n }\n }\n else {\n if (this.enableValidation) {\n this.dataOperation.updateGanttData();\n }\n if (this.allowParentDependency) {\n this.predecessorModule.updateParentPredecessor();\n }\n this.treeGridPane.classList.remove('e-temp-content');\n remove(this.treeGridPane.querySelector('.e-gantt-temp-header'));\n this.notify('dataReady', {});\n if (this.enableContextMenu) {\n this.notify('initiate-contextMenu', {});\n }\n this.renderTreeGrid();\n this.wireEvents();\n this.notify('initPredessorDialog', {});\n }\n if (!this.isFromOnPropertyChange) {\n this.splitterModule.updateSplitterPosition();\n }\n // if (this.gridLines === 'Vertical' || this.gridLines === 'Both') {\n // this.renderChartVerticalLines();\n // }\n };\n Gantt.prototype.removeCriticalPathStyles = function () {\n var ganttChartElement = this.ganttChartModule.chartElement;\n removeClass(ganttChartElement.querySelectorAll('.e-gantt-child-taskbar-inner-div'), cls.criticalChildTaskBarInnerDiv);\n removeClass(ganttChartElement.querySelectorAll('.e-gantt-child-progressbar-inner-div'), cls.criticalChildProgressBarInnerDiv);\n removeClass(ganttChartElement.querySelectorAll('.e-critical-milestone'), cls.criticalMilestone);\n removeClass(this.element.querySelectorAll('.e-connector-line'), cls.criticalConnectorLineSVG);\n removeClass(this.element.querySelectorAll('.e-connector-line-arrow'), cls.criticalConnectorArrowSVG);\n var innerDivs = document.querySelector('.e-gantt-child-taskbar-inner-div');\n innerDivs.style.outlineColor = \"\";\n };\n Gantt.prototype.wireEvents = function () {\n if (this.allowKeyboard) {\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfig,\n eventName: 'keydown'\n });\n }\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n EventHandler.add(window, 'resize', this.windowResize, this);\n EventHandler.add(document.body, 'keydown', this.keyDownHandler, this);\n };\n Gantt.prototype.keyDownHandler = function (e) {\n if (e.altKey) {\n if (e.keyCode === 74) { //alt j\n this.ganttChartModule.manageFocus(this.treeGrid.element.childNodes[1], 'remove', false);\n this.ganttChartModule.manageFocus(this.element, 'add', false);\n }\n }\n };\n /**\n * Method trigger while user perform window resize.\n *\n * @returns {void} .\n * @private\n */\n Gantt.prototype.windowResize = function () {\n if (!isNullOrUndefined(this.element)) {\n this.updateContentHeight();\n this.ganttChartModule.updateWidthAndHeight(); // Updating chart scroll conatiner height for row mismatch\n this.treeGridModule.ensureScrollBar();\n if (this.predecessorModule && this.taskFields.dependency) {\n this.updateRowHeightInConnectorLine(this.updatedConnectorLineCollection);\n this.connectorLineModule.renderConnectorLines(this.updatedConnectorLineCollection);\n }\n var criticalModule = this.criticalPathModule;\n if (this.enableCriticalPath && criticalModule && criticalModule.criticalPathCollection) {\n this.criticalPathModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);\n }\n this.calculateDimensions();\n var pane1 = this.splitterModule.splitterObject.element.querySelectorAll('.e-pane')[0];\n var pane2 = this.splitterModule.splitterObject.element.querySelectorAll('.e-pane')[1];\n this.splitterModule.splitterPreviousPositionGrid = pane1.scrollWidth + 1 + 'px';\n this.splitterModule.splitterPreviousPositionChart = pane2.scrollWidth + 1 + 'px';\n this.splitterModule.splitterObject.paneSettings[0].size = this.splitterModule['getSpliterPositionInPercentage'](this.splitterModule.splitterPreviousPositionGrid);\n this.splitterModule.splitterObject.paneSettings[1].size = this.splitterModule.splitterPreviousPositionChart;\n if (this.timelineModule.isZoomToFit) {\n this.timelineModule.processZoomToFit();\n }\n }\n };\n Gantt.prototype.keyActionHandler = function (e) {\n this.focusModule.onKeyPress(e);\n };\n /**\n * Method for updating row height value in connector line collections\n *\n * @param {IConnectorLineObject[]} collection -Defines the CollectorLine collection.\n * @returns {void} .\n * @private\n */\n Gantt.prototype.updateRowHeightInConnectorLine = function (collection) {\n if (collection && collection.length) {\n var rowHeight = this.ganttChartModule.getChartRows()[0]\n && this.ganttChartModule.getChartRows()[0].getBoundingClientRect().height;\n if (rowHeight && !isNaN(rowHeight)) {\n for (var count = 0; count < collection.length; count++) {\n collection[count].rowHeight = rowHeight;\n }\n }\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n Gantt.prototype.renderToolbar = function () {\n if (!isNullOrUndefined(this.toolbarModule)) {\n this.toolbarModule.renderToolbar();\n this.toolbarModule.refreshToolbarItems();\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n Gantt.prototype.renderTreeGrid = function () {\n this.treeGridModule.renderTreeGrid();\n };\n Gantt.prototype.updateCurrentViewData = function () {\n this.currentViewData = this.treeGrid.getCurrentViewRecords().slice();\n };\n /**\n * @param {IGanttData} records -Defines the delete record collections.\n * @returns {IGanttData} .\n * @private\n */\n Gantt.prototype.getRecordFromFlatdata = function (records) {\n var updatedRecord = [];\n for (var i = 0; i < records.length; i++) {\n updatedRecord.push(this.getTaskByUniqueID(records[i].uniqueID));\n }\n return updatedRecord;\n };\n /**\n * @param {object} args -Update the gantt element content height.\n * @returns {void} .\n * @private\n */\n Gantt.prototype.updateContentHeight = function (args) {\n if (!this.allowTaskbarOverlap && this.viewType === 'ResourceView' && !this.isLoad) {\n return;\n }\n else {\n if (this.virtualScrollModule && this.enableVirtualization && !isNullOrUndefined(args)) {\n var length_1 = getValue('result.length', args);\n this.contentHeight = length_1 * this.rowHeight;\n }\n else {\n var expandedRecords = this.virtualScrollModule && this.enableVirtualization ?\n this.currentViewData : this.getExpandedRecords(this.currentViewData);\n var height = void 0;\n var chartRow = !isNullOrUndefined(this.ganttChartModule.getChartRows()) ? this.ganttChartModule.getChartRows()[0] : null;\n if (!isNullOrUndefined(chartRow) && chartRow.getBoundingClientRect().height > 0) {\n height = chartRow.getBoundingClientRect().height;\n }\n else {\n height = this.rowHeight;\n }\n this.contentHeight = expandedRecords.length * height;\n }\n }\n };\n /**\n * To get expand status.\n *\n * @param {IGanttData} data .\n * @returns {boolean} .\n * @private\n */\n Gantt.prototype.getExpandStatus = function (data) {\n var parentRecord = this.getParentTask(data.parentItem);\n if (!isNullOrUndefined(parentRecord)) {\n if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n var parentData = this.getParentTask(parentRecord.parentItem);\n if (parentData.expanded === false) {\n return false;\n }\n else {\n return this.getExpandStatus(this.getParentTask(parentRecord.parentItem));\n }\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n };\n /**\n * Get expanded records from given record collection.\n *\n * @param {IGanttData[]} records - Defines record collection.\n * @returns {IGanttData[]} .\n\n */\n Gantt.prototype.getExpandedRecords = function (records) {\n var _this = this;\n if (isNullOrUndefined(records)) {\n return [];\n }\n var expandedRecords = records.filter(function (record) {\n return _this.getExpandStatus(record) === true;\n });\n return expandedRecords;\n };\n /**\n * Getting the Zooming collections of the Gantt control\n *\n * @returns {ZoomTimelineSettings} .\n * @private\n */\n Gantt.prototype.getZoomingLevels = function () {\n var _WeekStartDay = this.timelineSettings.weekStartDay;\n var zoomingLevels = [\n {\n topTier: { unit: 'Year', format: 'yyyy', count: 50 },\n bottomTier: { unit: 'Year', format: 'yyyy', count: 10 }, timelineUnitSize: 99, level: 0,\n timelineViewMode: 'Year', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Year', format: 'yyyy', count: 20 },\n bottomTier: { unit: 'Year', format: 'yyyy', count: 5 }, timelineUnitSize: 99, level: 1,\n timelineViewMode: 'Year', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Year', format: 'yyyy', count: 5 },\n bottomTier: { unit: 'Year', format: 'yyyy', count: 1 }, timelineUnitSize: 99, level: 2,\n timelineViewMode: 'Year', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Year', format: 'MMM, yy', count: 1 },\n bottomTier: {\n unit: 'Month', formatter: this.displayHalfValue, count: 6\n }, timelineUnitSize: 66, level: 3,\n timelineViewMode: 'Year', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Year', format: 'MMM, yy', count: 1 },\n bottomTier: {\n unit: 'Month', formatter: this.displayHalfValue, count: 6\n }, timelineUnitSize: 99, level: 4,\n timelineViewMode: 'Year', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Year', format: 'MMM, yy', count: 1 },\n bottomTier: {\n unit: 'Month', formatter: this.displayQuarterValue, count: 3\n }, timelineUnitSize: 66, level: 5,\n timelineViewMode: 'Year', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Year', format: 'yyyy', count: 1 },\n bottomTier: {\n unit: 'Month', formatter: this.displayQuarterValue, count: 3\n }, timelineUnitSize: 99, level: 6,\n timelineViewMode: 'Year', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Year', format: 'yyyy', count: 1 },\n bottomTier: { unit: 'Month', format: 'MMM yyyy', count: 1 }, timelineUnitSize: 99, level: 7,\n timelineViewMode: 'Year', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Month', format: 'MMM, yy', count: 1 },\n bottomTier: { unit: 'Week', format: 'dd', count: 1 }, timelineUnitSize: 33, level: 8,\n timelineViewMode: 'Month', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Month', format: 'MMM, yyyy', count: 1 },\n bottomTier: { unit: 'Week', format: 'dd MMM', count: 1 }, timelineUnitSize: 66, level: 9,\n timelineViewMode: 'Month', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Month', format: 'MMM, yyyy', count: 1 },\n bottomTier: { unit: 'Week', format: 'dd MMM', count: 1 }, timelineUnitSize: 99, level: 10,\n timelineViewMode: 'Month', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Week', format: 'MMM dd, yyyy', count: 1 },\n bottomTier: { unit: 'Day', format: 'd', count: 1 }, timelineUnitSize: 33, level: 11,\n timelineViewMode: 'Week', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Week', format: 'MMM dd, yyyy', count: 1 },\n bottomTier: { unit: 'Day', format: 'd', count: 1 }, timelineUnitSize: 66, level: 12,\n timelineViewMode: 'Week', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Week', format: 'MMM dd, yyyy', count: 1 },\n bottomTier: { unit: 'Day', format: 'd', count: 1 }, timelineUnitSize: 99, level: 13,\n timelineViewMode: 'Week', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Day', format: 'E dd yyyy', count: 1 },\n bottomTier: { unit: 'Hour', format: 'hh a', count: 12 }, timelineUnitSize: 66, level: 14,\n timelineViewMode: 'Day', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Day', format: 'E dd yyyy', count: 1 },\n bottomTier: { unit: 'Hour', format: 'hh a', count: 12 }, timelineUnitSize: 99, level: 15,\n timelineViewMode: 'Day', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Day', format: 'E dd yyyy', count: 1 },\n bottomTier: { unit: 'Hour', format: 'hh a', count: 6 }, timelineUnitSize: 66, level: 16,\n timelineViewMode: 'Day', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Day', format: 'E dd yyyy', count: 1 },\n bottomTier: { unit: 'Hour', format: 'hh a', count: 6 }, timelineUnitSize: 99, level: 17,\n timelineViewMode: 'Day', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Day', format: 'E dd yyyy', count: 1 },\n bottomTier: { unit: 'Hour', format: 'hh a', count: 2 }, timelineUnitSize: 66, level: 18,\n timelineViewMode: 'Day', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Day', format: 'E dd yyyy', count: 1 },\n bottomTier: { unit: 'Hour', format: 'hh a', count: 2 }, timelineUnitSize: 99, level: 19,\n timelineViewMode: 'Day', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Day', format: 'E dd yyyy', count: 1 },\n bottomTier: { unit: 'Hour', format: 'hh a', count: 1 }, timelineUnitSize: 66, level: 20,\n timelineViewMode: 'Day', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Day', format: 'E dd yyyy', count: 1 },\n bottomTier: { unit: 'Hour', format: 'hh a', count: 1 }, timelineUnitSize: 99, level: 21,\n timelineViewMode: 'Day', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Hour', format: 'ddd MMM, h a', count: 1 },\n bottomTier: { unit: 'Minutes', format: 'mm', count: 30 }, timelineUnitSize: 66, level: 22,\n timelineViewMode: 'Hour', weekStartDay: 0, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Hour', format: 'ddd MMM, h a', count: 1 },\n bottomTier: { unit: 'Minutes', format: 'mm', count: 15 }, timelineUnitSize: 66, level: 23,\n timelineViewMode: 'Hour', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n },\n {\n topTier: { unit: 'Hour', format: 'ddd MMM, h a', count: 1 },\n bottomTier: { unit: 'Minutes', format: 'mm', count: 1 }, timelineUnitSize: 66, level: 24,\n timelineViewMode: 'Hour', weekStartDay: _WeekStartDay, updateTimescaleView: true, weekendBackground: null, showTooltip: true\n }\n ];\n return zoomingLevels;\n };\n Gantt.prototype.displayQuarterValue = function (date) {\n var month = date.getMonth();\n if (month >= 0 && month <= 2) {\n return 'Q1';\n }\n else if (month >= 3 && month <= 5) {\n return 'Q2';\n }\n else if (month >= 6 && month <= 8) {\n return 'Q3';\n }\n else {\n return 'Q4';\n }\n };\n Gantt.prototype.displayHalfValue = function (date) {\n var month = date.getMonth();\n if (month >= 0 && month <= 5) {\n return 'H1';\n }\n else {\n return 'H2';\n }\n };\n /**\n *\n * @param {Date} date .\n * @param {string} format .\n * @returns {string} .\n */\n Gantt.prototype.getFormatedDate = function (date, format) {\n if (isNullOrUndefined(date)) {\n return null;\n }\n if (isNullOrUndefined(format)) {\n format = this.getDateFormat();\n }\n return this.globalize.formatDate(date, { format: format });\n };\n /**\n * Get duration value as string combined with duration and unit values.\n *\n * @param {number} duration - Defines the duration.\n * @param {string} durationUnit - Defines the duration unit.\n * @returns {string} .\n */\n Gantt.prototype.getDurationString = function (duration, durationUnit) {\n var value = this.dateValidationModule.getDurationString(duration, durationUnit);\n return value;\n };\n /**\n * Get work value as string combined with work and unit values.\n *\n * @param {number} work - Defines the work value.\n * @param {string} workUnit - Defines the work unit.\n * @returns {string} .\n */\n Gantt.prototype.getWorkString = function (work, workUnit) {\n var value = this.dateValidationModule.getWorkString(work, workUnit);\n return value;\n };\n Gantt.prototype.updateTreeColumns = function () {\n var temp;\n var field;\n var gridColumns = this.treeGrid.grid.getColumns();\n if (this.treeColumnIndex !== -1 && this.columns[this.treeColumnIndex] &&\n !isNullOrUndefined(this.columns[this.treeColumnIndex]['template'])) {\n temp = this.columns[this.treeColumnIndex]['template'];\n field = this.columns[this.treeColumnIndex]['field'];\n }\n var gridColumn;\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var j = 0; j < this.columns.length; j++) {\n if (this.columns[j]['field'] == gridColumns[i].field) {\n for (var _i = 0, _a = Object.keys(this.columns[j]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (!isUndefined(this.columns[j][prop])) {\n gridColumn[prop] = gridColumns[i][prop];\n }\n gridColumn.visible = gridColumns[i].visible;\n gridColumn.width = gridColumns[i].width;\n }\n this.columns[j] = (gridColumn);\n if (this.columns[j]['type'] !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columns[j]['template'] = temp;\n }\n }\n }\n }\n if (this.columns.length > 0) {\n this.treeGrid.setProperties({ columns: this.columns }, true);\n }\n };\n /**\n *\n * @param {object} args .\n * @returns {void} .\n * @private\n */\n Gantt.prototype.treeDataBound = function (args) {\n this.element.getElementsByClassName('e-chart-root-container')[0]['style'].height = '100%';\n var gridHeight = this.element.getElementsByClassName('e-gridcontent')[0]['style'].height;\n var timelineContainer = this.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'];\n gridHeight = 'calc(100% - ' + timelineContainer + 'px)';\n // eslint-disable-next-line\n this.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';\n if (!isNullOrUndefined(this.toolbarModule) && !isNullOrUndefined(this.toolbarModule.element)) {\n this.splitterElement.style.height = 'calc(100% - ' + this.toolbarModule.element.offsetHeight + 'px)';\n }\n else {\n this.splitterElement.style.height = '100%';\n }\n if (this.isLoad) {\n if (this.enablePersistence) {\n this.updateTreeColumns();\n }\n this.updateCurrentViewData();\n if (!this.enableVirtualization) {\n this.updateContentHeight();\n }\n if (!this.isTreeGridRendered) {\n this.isTreeGridRendered = true;\n var toolbarHeight = 0;\n if (!isNullOrUndefined(this.toolbarModule) && !isNullOrUndefined(this.toolbarModule.element)) {\n toolbarHeight = this.toolbarModule.element.offsetHeight;\n }\n if (this.timelineModule.isSingleTier) {\n addClass(this.treeGrid.element.querySelectorAll('.e-headercell'), cls.timelineSingleHeaderOuterDiv);\n addClass(this.treeGrid.element.querySelectorAll('.e-columnheader'), cls.timelineSingleHeaderOuterDiv);\n }\n else {\n removeClass(this.treeGrid.element.querySelectorAll('.e-headercell'), cls.timelineSingleHeaderOuterDiv);\n removeClass(this.treeGrid.element.querySelectorAll('.e-columnheader'), cls.timelineSingleHeaderOuterDiv);\n }\n this.treeGrid.height = '100%';\n this.notify('tree-grid-created', {});\n this.createGanttPopUpElement();\n if (!isNullOrUndefined(this.loadingIndicator) && this.loadingIndicator.indicatorType === \"Shimmer\") {\n this.hideMaskRow();\n }\n else {\n this.hideSpinner();\n }\n setValue('isGanttCreated', true, args);\n this.renderComplete();\n }\n }\n else {\n this.getCurrentRecords(args);\n }\n if (this.enableCriticalPath && this.criticalPathModule) {\n this.criticalPathModule.showCriticalPath(this.enableCriticalPath);\n }\n this.notify('recordsUpdated', {});\n for (var i = 0; i < document.getElementsByClassName('e-timeline-header-table-container').length; i++) {\n for (var j = 0; j < document.getElementsByClassName('e-timeline-header-table-container')[i].children[0].children[0].children.length; j++) {\n document.getElementsByClassName('e-timeline-header-table-container')[i].children[0].children[0].children[j].children[0].setAttribute('tabindex', '-1');\n }\n }\n var criticalModule = this.criticalPathModule;\n if (this.enableCriticalPath && criticalModule && criticalModule.criticalPathCollection) {\n this.criticalPathModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);\n }\n this.initialChartRowElements = this.ganttChartModule.getChartRows();\n this.isLoad = false;\n this.trigger('dataBound', args);\n };\n /**\n * @param {object} args .\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n Gantt.prototype.getCurrentRecords = function (args) {\n if (this.predecessorModule && this.taskFields.dependency) {\n this.connectorLineModule.removePreviousConnectorLines(this.currentViewData);\n }\n this.updateCurrentViewData();\n if (!this.enableVirtualization) {\n this.updateContentHeight();\n }\n // this.chartRowsModule.refreshGanttRows();\n if (this.virtualScrollModule && this.enableVirtualization) {\n this.ganttChartModule.virtualRender.adjustTable();\n this.ganttChartModule.scrollObject.updateTopPosition();\n }\n };\n /**\n * Called internally, if any of the property value changed.\n *\n * @param {GanttModel} newProp - Defines the New GanttModel.\n * @param {GanttModel} oldProp - Defines the old GanttModel.\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n Gantt.prototype.onPropertyChanged = function (newProp, oldProp) {\n var isRefresh = false;\n // eslint-disable-next-line\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowSelection':\n case 'allowRowDragAndDrop':\n case 'allowFiltering':\n case 'showColumnMenu':\n case 'allowResizing':\n case 'allowReordering':\n case 'enableImmutableMode':\n this.treeGrid[prop] = this[prop];\n this.treeGrid.dataBind();\n break;\n case 'workWeek':\n this.dataOperation.getNonWorkingDayIndex();\n this.dataOperation.reUpdateGanttData();\n this.chartRowsModule.initiateTemplates();\n if (this.taskFields.dependency) {\n this.predecessorModule.updatedRecordsDateByPredecessor();\n }\n this.chartRowsModule.refreshGanttRows();\n this.treeGrid.refreshColumns();\n this.timelineModule.refreshTimeline();\n break;\n case 'toolbar':\n this.notify('ui-toolbarupdate', { module: 'toolbar', properties: newProp });\n break;\n case 'columnMenuItems':\n this.treeGrid.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'eventMarkers':\n case 'highlightWeekends':\n this.notify('ui-update', { module: 'day-markers', properties: newProp });\n break;\n case 'sortSettings':\n this.treeGrid.sortSettings = getActualProperties(this.sortSettings);\n this.treeGrid.dataBind();\n break;\n case 'timelineSettings':\n this.timelineModule.refreshTimeline();\n break;\n case 'rowHeight':\n case 'taskbarHeight':\n this.treeGrid.rowHeight = this.rowHeight;\n this.treeGrid.dataBind();\n this.chartRowsModule.initiateTemplates();\n this.timelineModule.updateChartByNewTimeline();\n if (this.taskFields.dependency) {\n this.ganttChartModule.reRenderConnectorLines();\n }\n break;\n case 'timezone':\n this.dataOperation.checkDataBinding(true);\n break;\n case 'enableCriticalPath':\n if (!isNullOrUndefined(this.loadingIndicator) && this.loadingIndicator.indicatorType === \"Shimmer\") {\n this.hideMaskRow();\n }\n else {\n this.hideSpinner();\n }\n if (this.enableCriticalPath && this.criticalPathModule) {\n this.criticalPathModule.showCriticalPath(this.enableCriticalPath);\n var criticalModule = this.criticalPathModule;\n if (criticalModule.criticalPathCollection) {\n this.criticalPathModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);\n }\n }\n else {\n this.removeCriticalPathStyles();\n }\n break;\n case 'filterSettings':\n this.treeGrid.filterSettings = getActualProperties(this.filterSettings);\n this.treeGrid.dataBind();\n break;\n case 'gridLines':\n this.treeGrid.gridLines = this.gridLines;\n this.treeGrid.dataBind();\n this.renderChartGridLines();\n break;\n case 'tooltipSettings':\n if (this.tooltipModule.toolTipObj) {\n this.tooltipModule.toolTipObj.destroy();\n }\n this.tooltipModule.createTooltip();\n break;\n case 'splitterSettings':\n this.splitterModule.updateSplitterPosition();\n break;\n case 'selectionSettings':\n this.treeGrid.selectionSettings = getActualProperties(this.selectionSettings);\n this.treeGrid.grid.selectionSettings.enableToggle = this.selectionSettings.enableToggle;\n this.treeGrid.dataBind();\n break;\n case 'searchSettings':\n if (newProp.searchSettings.key !== (\"\" || undefined)) {\n this.treeGrid.grid.searchSettings = getActualProperties(this.searchSettings);\n this.treeGrid.grid.dataBind();\n }\n this.treeGrid.searchSettings = getActualProperties(this.searchSettings);\n this.treeGrid.dataBind();\n if (this.toolbarModule) {\n this.toolbarModule.updateSearchTextBox();\n }\n break;\n case 'labelSettings':\n case 'renderBaseline':\n case 'baselineColor':\n this.isFromRenderBaseline = true;\n this.chartRowsModule.initiateTemplates();\n this.chartRowsModule.refreshGanttRows();\n this.isFromRenderBaseline = false;\n break;\n case 'resourceIDMapping':\n case 'resourceNameMapping':\n case 'resources':\n this.dataOperation.reUpdateResources();\n this.treeGrid.refreshColumns();\n this.chartRowsModule.initiateTemplates();\n this.chartRowsModule.refreshGanttRows();\n break;\n case 'includeWeekend':\n case 'allowUnscheduledTasks':\n case 'holidays':\n this.isLoad = true;\n if (prop === 'holidays') {\n this.totalHolidayDates = this.dataOperation.getHolidayDates();\n this.notify('ui-update', { module: 'day-markers', properties: newProp });\n }\n this.dataOperation.reUpdateGanttData();\n this.treeGrid.refreshColumns();\n this.chartRowsModule.initiateTemplates();\n this.chartRowsModule.refreshGanttRows();\n this.isLoad = false;\n break;\n case 'dayWorkingTime':\n this.isLoad = true;\n this.dataOperation.reUpdateGanttData();\n this.treeGrid.refreshColumns();\n this.chartRowsModule.initiateTemplates();\n this.chartRowsModule.refreshGanttRows();\n this.isLoad = false;\n break;\n case 'addDialogFields':\n case 'editDialogFields':\n if (this.editModule && this.editModule.dialogModule) {\n this.editModule.dialogModule.processDialogFields();\n }\n break;\n case 'columns':\n this.treeGridModule.treeGridColumns = [];\n this.treeGridModule.validateGanttColumns();\n this.treeGrid.columns = this.treeGridModule.treeGridColumns;\n this.chartRowsModule.initiateTemplates();\n this.timelineModule.updateChartByNewTimeline();\n break;\n case 'width':\n case 'height':\n this.reUpdateDimention();\n break;\n case 'editSettings':\n this.treeGrid.editSettings.allowAdding = this.editSettings.allowAdding;\n this.treeGrid.editSettings.allowDeleting = this.editSettings.allowDeleting;\n this.treeGrid.editSettings.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n this.treeGrid.editSettings.allowEditing = this.editSettings.allowEditing;\n this.treeGrid.editSettings.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n if (!isNullOrUndefined(this.editModule)) {\n this.editModule.reUpdateEditModules();\n }\n if (!isNullOrUndefined(this.toolbarModule)) {\n this.toolbarModule.refreshToolbarItems();\n }\n break;\n case 'connectorLineBackground':\n case 'connectorLineWidth':\n if (this.taskFields.dependency) {\n this.connectorLineModule.initPublicProp();\n this.ganttChartModule.reRenderConnectorLines();\n }\n break;\n case 'treeColumnIndex':\n this.treeGrid.treeColumnIndex = this.treeColumnIndex;\n break;\n case 'projectStartDate':\n case 'projectEndDate':\n this.timelineModule.isZoomToFit = false;\n this.dataOperation.calculateProjectDates();\n this.updateProjectDates(this.cloneProjectStartDate, this.cloneProjectEndDate, this.isTimelineRoundOff);\n break;\n case 'selectedRowIndex':\n if (!isNullOrUndefined(this.selectionModule)) {\n this.selectionModule.selectRowByIndex();\n }\n break;\n case 'dataSource':\n this.closeGanttActions();\n if (this.dataSource instanceof Object && isCountRequired(this)) {\n // In order to bind the observable data at load time, hasChildMapping is necessary to be mapped.\n this.treeGrid.hasChildMapping = 'isParent';\n var count = getValue('count', this.dataSource);\n this.treeGrid.dataSource = { result: this.flatData, count: count };\n }\n else {\n this.treeGrid.hasChildMapping = null;\n }\n this.dataOperation.checkDataBinding(true);\n break;\n case 'enableContextMenu':\n case 'contextMenuItems':\n if (this.enableContextMenu || prop === 'contextMenuItems') {\n this.notify('reRender-contextMenu', { module: 'contextMenu', enable: this.contextMenuItems });\n }\n else {\n this.treeGrid.contextMenuItems = [];\n }\n this.treeGrid.dataBind();\n break;\n case 'currencyCode':\n case 'locale':\n case 'enableRtl':\n case 'readOnly':\n case 'viewType':\n case 'taskFields':\n case 'allowTaskbarDragAndDrop':\n case 'allowTaskbarOverlap':\n case 'allowParentDependency':\n if (prop === 'locale') {\n this.isLocaleChanged = true;\n }\n isRefresh = true;\n break;\n case 'validateManualTasksOnLinking':\n this.validateManualTasksOnLinking = newProp.validateManualTasksOnLinking;\n break;\n case 'showOverAllocation':\n this.updateOverAllocationCotainer();\n break;\n }\n }\n if (isRefresh) {\n if (this.isLoad && this.contentMaskTable) {\n this.contentMaskTable = null;\n }\n this.refresh();\n }\n };\n Gantt.prototype.updateOverAllocationCotainer = function () {\n if (this.showOverAllocation && this.viewType === 'ResourceView') {\n this.ganttChartModule.renderOverAllocationContainer();\n }\n else {\n var rangeContainer = this.element.querySelector('.' + cls.rangeContainer);\n if (rangeContainer) {\n rangeContainer.innerHTML = '';\n }\n }\n };\n /**\n * Returns the properties to be maintained in persisted state.\n *\n * @returns {string} .\n * @private\n */\n Gantt.prototype.getPersistData = function () {\n var keyEntity = ['sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex', 'currentZoomingLevel', 'cloneProjectStartDate', 'cloneProjectEndDate'];\n var ignoreOnPersist = {\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[i]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[k];\n delete currentObject[objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n Gantt.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n };\n Gantt.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n Gantt.prototype.destroy = function () {\n this.notify('destroy', {});\n if (!isNullOrUndefined(this.validationDialogElement) && !this.validationDialogElement.isDestroyed) {\n this.validationDialogElement.destroy();\n }\n var modules = ['ganttChartModule', 'timelineModule', 'chartRowsModule',\n 'treeGridModule', 'ganttDataUpdatesModule', 'dateValidationModule', 'tooltipModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n if (this.editModule && this.editModule.dialogModule) {\n this.editModule.dialogModule.destroy();\n }\n _super.prototype.destroy.call(this);\n this.chartVerticalLineContainer = null;\n this.element.innerHTML = '';\n removeClass([this.element], cls.root);\n this.element.innerHTML = '';\n this.isTreeGridRendered = false;\n this.resetTemplates();\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n EventHandler.remove(window, 'resize', this.windowResize);\n };\n /**\n * Method to get taskbarHeight.\n *\n * @returns {number} .\n * @public\n */\n Gantt.prototype.getTaskbarHeight = function () {\n return this.chartRowsModule.taskBarHeight;\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} .\n * @hidden\n */\n Gantt.prototype.requiredModules = function () {\n var modules = [];\n if (this.isDestroyed) {\n return modules;\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.allowFiltering || (this.toolbar && this.toolbar.indexOf('Search') !== -1)) {\n modules.push({\n member: 'filter',\n args: [this]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowExcelExport) {\n modules.push({\n member: 'excelExport',\n args: [this]\n });\n }\n if (this.allowRowDragAndDrop || this.allowTaskbarDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.enableCriticalPath) {\n modules.push({\n member: 'criticalPath',\n args: [this]\n });\n }\n if (this.allowResizing) {\n modules.push({\n member: 'resize',\n args: [this]\n });\n }\n if (this.toolbar && this.toolbar.length > 0) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowEditing || this.editSettings.allowDeleting\n || this.editSettings.allowTaskbarEditing || this.allowRowDragAndDrop) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.tooltipSettings.showTooltip) {\n modules.push({\n member: 'tooltip',\n args: [this]\n });\n }\n if (this.highlightWeekends || (this.holidays && this.holidays.length > 0)\n || (this.eventMarkers && this.eventMarkers.length > 0)) {\n modules.push({\n member: 'dayMarkers',\n args: [this]\n });\n }\n if (this.enableContextMenu) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu',\n args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'pdfExport',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void} .\n */\n Gantt.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule && this.allowSorting) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n Gantt.prototype.mergePersistGanttData = function () {\n if (!this.treeGrid) {\n this.treeGrid = new TreeGrid();\n }\n var persist1 = 'mergePersistGridData';\n this.treeGrid.grid[persist1].apply(this);\n };\n Gantt.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.treeGrid.grid[persist2].apply(this, [storedColumn, columns]);\n };\n /**\n * Clears all the sorted columns of the Gantt.\n *\n * @returns {void} .\n */\n Gantt.prototype.clearSorting = function () {\n this.sortModule.clearSorting();\n };\n /**\n * To validate and render chart horizontal and vertical lines in the Gantt\n *\n * @returns {void} .\n * @hidden\n */\n Gantt.prototype.renderChartGridLines = function () {\n var className = 'e-chart-row-border';\n var verticalLines = this.chartVerticalLineContainer;\n var chartRowsTD = document.getElementById(this.element.id + 'GanttTaskTableBody').querySelectorAll('td');\n if (this.gridLines === 'Vertical') {\n if (isNullOrUndefined(verticalLines)) {\n this.renderChartVerticalLines();\n }\n else {\n if (verticalLines.style.display === 'none') {\n verticalLines.style.display = 'block';\n }\n }\n if (chartRowsTD[0].classList.contains(className)) {\n for (var c = 0; c < chartRowsTD.length; c++) {\n removeClass([chartRowsTD[c]], className);\n }\n }\n }\n else if (this.gridLines === 'Horizontal') {\n if (!isNullOrUndefined(verticalLines)) {\n verticalLines.style.display = 'none';\n }\n if (!chartRowsTD[0].classList.contains(className)) {\n for (var c = 0; c < chartRowsTD.length; c++) {\n addClass([chartRowsTD[c]], className);\n }\n }\n }\n else if (this.gridLines === 'Both') {\n if (isNullOrUndefined(verticalLines)) {\n this.renderChartVerticalLines();\n }\n else {\n if (verticalLines.style.display === 'none') {\n verticalLines.style.display = 'block';\n }\n }\n if (!chartRowsTD[0].classList.contains(className)) {\n for (var c = 0; c < chartRowsTD.length; c++) {\n addClass([chartRowsTD[c]], className);\n }\n }\n }\n else if (this.gridLines === 'None') {\n if (!isNullOrUndefined(verticalLines) && verticalLines.style.display !== 'none') {\n verticalLines.style.display = 'none';\n }\n if (chartRowsTD[0].classList.contains(className)) {\n for (var c = 0; c < chartRowsTD.length; c++) {\n removeClass([chartRowsTD[c]], className);\n }\n }\n }\n };\n /**\n * To update height of the Grid lines in the Gantt chart side.\n *\n * @returns {void} .\n * @private\n */\n Gantt.prototype.updateGridLineContainerHeight = function () {\n if (this.chartVerticalLineContainer) {\n this.chartVerticalLineContainer.style.height = formatUnit(this.getContentHeight());\n }\n };\n /**\n * To get actual height of grid lines, holidays, weekend and event markers.\n *\n * @returns {number} .\n * @private\n */\n Gantt.prototype.getContentHeight = function () {\n var scrollHeight = this.ganttChartModule.scrollElement.offsetHeight - 16; //16 is horizontal scrollbar height\n var contentHeight = this.ganttChartModule.chartBodyContent.offsetHeight;\n var height = contentHeight < scrollHeight ? contentHeight : scrollHeight;\n return height;\n };\n /**\n * To update height of the Grid lines in the Gantt chart side.\n *\n * @returns {void} .\n * @private\n */\n Gantt.prototype.reUpdateDimention = function () {\n var toolbarHeight = 0;\n this.calculateDimensions();\n if (!isNullOrUndefined(this.toolbarModule) && !isNullOrUndefined(this.toolbarModule.element)) {\n this.toolbarModule.toolbar.refresh();\n this.toolbarModule.refreshToolbarItems();\n toolbarHeight = this.toolbarModule.element.offsetHeight;\n }\n this.treeGrid.height = this.ganttHeight - toolbarHeight -\n this.treeGrid.grid.getHeaderContent().offsetHeight;\n this.splitterModule.splitterObject.height = (this.ganttHeight - toolbarHeight).toString();\n if (!isNullOrUndefined(this.chartVerticalLineContainer)) {\n this.chartVerticalLineContainer.style.height = this.ganttHeight + 'px';\n }\n if (!isNullOrUndefined(this.dayMarkersModule)) {\n var holidayContainer = getValue('nonworkingDayRender.holidayContainer', this.dayMarkersModule);\n var weekendContainer = getValue('nonworkingDayRender.weekendContainer', this.dayMarkersModule);\n var eventMarkersContainer = getValue('eventMarkerRender.eventMarkersContainer', this.dayMarkersModule);\n if (holidayContainer) {\n holidayContainer.style.height = this.ganttHeight + 'px';\n }\n if (weekendContainer) {\n weekendContainer.style.height = this.ganttHeight + 'px';\n }\n if (eventMarkersContainer) {\n eventMarkersContainer.style.height = this.ganttHeight + 'px';\n }\n }\n this.splitterModule.splitterObject.width = this.ganttWidth.toString();\n this.ganttChartModule.scrollObject.\n setHeight(this.ganttHeight - this.ganttChartModule.chartTimelineContainer.offsetHeight - toolbarHeight);\n };\n /**\n * To render vertical lines in the Gantt chart side.\n *\n * @returns {void} .\n */\n Gantt.prototype.renderChartVerticalLines = function () {\n if (!this.element.contains(this.chartVerticalLineContainer)) {\n this.chartVerticalLineContainer = createElement('div', {\n id: this.element.id + 'line-container',\n styles: 'position:absolute;height:100%;'\n });\n this.ganttChartModule.chartBodyContent.insertBefore(this.chartVerticalLineContainer, this.ganttChartModule.chartBodyContent.lastChild);\n }\n this.chartVerticalLineContainer.innerHTML = '';\n var headerTable = this.element.getElementsByClassName('e-timeline-header-table-container')[1];\n if (isNullOrUndefined(headerTable)) {\n headerTable = this.element.getElementsByClassName('e-timeline-header-table-container')[0];\n }\n var thElements = headerTable.getElementsByTagName('th');\n var thLength = thElements.length;\n var thWidth;\n var leftPos = 0;\n var containerDiv = createElement('div');\n for (var n = 0; n < thLength; n++) {\n leftPos = n === 0 ? -1 : (leftPos + parseFloat(thWidth));\n thWidth = thElements[n].style.width;\n var divElement = createElement('div', {\n className: 'e-line-container-cell',\n styles: (this.enableRtl ? 'right:' + (leftPos + 1) : 'left:' + leftPos) + 'px'\n });\n containerDiv.appendChild(divElement);\n }\n this.chartVerticalLineContainer.innerHTML = containerDiv.innerHTML;\n };\n /**\n * Method to get default localized text of the Gantt.\n *\n * @returns {void} .\n * @hidden\n */\n Gantt.prototype.getDefaultLocale = function () {\n var ganttLocale = {\n emptyRecord: 'No records to display',\n id: 'ID',\n name: 'Name',\n startDate: 'Start Date',\n endDate: 'End Date',\n duration: 'Duration',\n progress: 'Progress',\n dependency: 'Dependency',\n notes: 'Notes',\n criticalPath: 'Critical Path',\n baselineStartDate: 'Baseline Start Date',\n baselineEndDate: 'Baseline End Date',\n taskMode: 'Task Mode',\n changeScheduleMode: 'Change Schedule Mode',\n subTasksStartDate: 'SubTasks Start Date',\n subTasksEndDate: 'SubTasks End Date',\n scheduleStartDate: 'Schedule Start Date',\n scheduleEndDate: 'Schedule End Date',\n auto: 'Auto',\n manual: 'Manual',\n type: 'Type',\n offset: 'Offset',\n resourceName: 'Resources',\n resourceID: 'Resource ID',\n day: 'day',\n hour: 'hour',\n minute: 'minute',\n days: 'days',\n hours: 'hours',\n minutes: 'minutes',\n generalTab: 'General',\n customTab: 'Custom Columns',\n writeNotes: 'Write Notes',\n addDialogTitle: 'New Task',\n editDialogTitle: 'Task Information',\n add: 'Add',\n edit: 'Edit',\n update: 'Update',\n delete: 'Delete',\n cancel: 'Cancel',\n search: 'Search',\n task: ' task',\n tasks: ' tasks',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n zoomToFit: 'Zoom to fit',\n excelExport: 'Excel export',\n csvExport: 'CSV export',\n pdfExport: 'Pdf export',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n nextTimeSpan: 'Next timespan',\n prevTimeSpan: 'Previous timespan',\n saveButton: 'Save',\n taskBeforePredecessorFS: 'You moved \"{0}\" to start before \"{1}\" finishes and the two tasks are linked.'\n + 'As the result, the links cannot be honored. Select one action below to perform',\n taskAfterPredecessorFS: 'You moved \"{0}\" away from \"{1}\" and the two tasks are linked.'\n + 'As the result, the links cannot be honored. Select one action below to perform',\n taskBeforePredecessorSS: 'You moved \"{0}\" to start before \"{1}\" starts and the two tasks are linked.'\n + 'As the result, the links cannot be honored. Select one action below to perform',\n taskAfterPredecessorSS: 'You moved \"{0}\" to start after \"{1}\" starts and the two tasks are linked.'\n + 'As the result, the links cannot be honored. Select one action below to perform',\n taskBeforePredecessorFF: 'You moved \"{0}\" to finish before \"{1}\" finishes and the two tasks are linked.'\n + 'As the result, the links cannot be honored. Select one action below to perform',\n taskAfterPredecessorFF: 'You moved \"{0}\" to finish after \"{1}\" finishes and the two tasks are linked.'\n + 'As the result, the links cannot be honored. Select one action below to perform',\n taskBeforePredecessorSF: 'You moved \"{0}\" away from \"{1}\" to starts and the two tasks are linked.'\n + 'As the result, the links cannot be honored. Select one action below to perform',\n taskAfterPredecessorSF: 'You moved \"{0}\" to finish after \"{1}\" starts and the two tasks are linked.'\n + 'As the result, the links cannot be honored. Select one action below to perform',\n okText: 'Ok',\n confirmDelete: 'Are you sure you want to Delete Record?',\n from: 'From',\n to: 'To',\n taskLink: 'Task Link',\n lag: 'Lag',\n start: 'Start',\n finish: 'Finish',\n enterValue: 'Enter the value',\n taskInformation: 'Task Information',\n deleteTask: 'Delete Task',\n deleteDependency: 'Delete Dependency',\n convert: 'Convert',\n save: 'Save',\n above: 'Above',\n below: 'Below',\n child: 'Child',\n milestone: 'Milestone',\n toTask: 'To Task',\n toMilestone: 'To Milestone',\n eventMarkers: 'Event markers',\n leftTaskLabel: 'Left task label',\n rightTaskLabel: 'Right task label',\n timelineCell: 'Timeline cell',\n confirmPredecessorDelete: 'Are you sure you want to remove dependency link?',\n unit: 'Unit',\n work: 'Work',\n taskType: 'Task Type',\n unassignedTask: 'Unassigned Task',\n group: 'Group',\n indent: 'Indent',\n outdent: 'Outdent',\n segments: 'Segments',\n splitTask: 'Split Task',\n mergeTask: 'Merge Task',\n left: 'Left',\n right: 'Right'\n };\n return ganttLocale;\n };\n /**\n * To remove sorted records of particular column.\n *\n * @param {string} columnName - Defines the sorted column name.\n * @returns {void} .\n */\n Gantt.prototype.removeSortColumn = function (columnName) {\n this.sortModule.removeSortColumn(columnName);\n };\n /**\n *\n * @param {object} args -Defines the edited event args.\n * @returns {void} .\n * @private\n */\n Gantt.prototype.actionBeginTask = function (args) {\n this.trigger('actionBegin', args);\n if (!isNullOrUndefined(this.loadingIndicator) && this.loadingIndicator.indicatorType === \"Shimmer\") {\n this.showMaskRow();\n }\n else {\n this.showSpinner();\n }\n };\n /**\n * To move horizontal scroll bar of Gantt to specific date.\n *\n * @param {string} date - Defines the task date of data.\n * @returns {void} .\n */\n Gantt.prototype.scrollToDate = function (date) {\n var tempDate = this.dateValidationModule.getDateFromFormat(date);\n var left = this.dataOperation.getTaskLeft(tempDate, false);\n this.ganttChartModule.updateScrollLeft(left);\n };\n /**\n * To move horizontal scroll bar of Gantt to specific task id.\n *\n * @param {string} taskId - Defines the task id of data.\n * @returns {void} .\n */\n Gantt.prototype.scrollToTask = function (taskId) {\n if (this.ids.indexOf(taskId) !== -1) {\n var left = this.flatData[this.ids.indexOf(taskId)].ganttProperties.left;\n this.ganttChartModule.updateScrollLeft(left);\n }\n };\n /**\n * To set scroll left and top in chart side.\n *\n * @param {number} left - Defines the scroll left value of chart side.\n * @param {number} top - Defines the scroll top value of chart side.\n * @returns {void} .\n */\n Gantt.prototype.updateChartScrollOffset = function (left, top) {\n if (!isNullOrUndefined(left)) {\n left = this.ganttChartModule.scrollElement.scrollWidth <= left ?\n this.ganttChartModule.scrollElement.scrollWidth : left;\n this.ganttChartModule.scrollObject.setScrollLeft(left, this.enableRtl ? -1 : 0);\n }\n if (!isNullOrUndefined(top)) {\n top = this.ganttChartModule.scrollElement.scrollHeight <= top ? this.ganttChartModule.scrollElement.scrollHeight : top;\n this.ganttChartModule.scrollObject.setScrollTop(top);\n }\n };\n /**\n * Get parent task by clone parent item.\n *\n * @param {IParent} cloneParent - Defines the clone parent item.\n * @returns {IGanttData} .\n * @hidden\n */\n Gantt.prototype.getParentTask = function (cloneParent) {\n if (!isNullOrUndefined(cloneParent)) {\n var parent_1 = this.flatData.filter(function (val) {\n return cloneParent.uniqueID === val.uniqueID;\n });\n if (parent_1.length > 0) {\n return parent_1[0];\n }\n else {\n return null;\n }\n }\n else {\n return null;\n }\n };\n /**\n * Get parent task by clone parent item.\n *\n * @param {IGanttData} ganttRecord -Defines the Gantt record.\n * @param {number} level -Defines the selected record level.\n * @returns {IGanttData} .\n * @hidden\n */\n Gantt.prototype.getRootParent = function (ganttRecord, level) {\n if (ganttRecord.level === level) {\n return ganttRecord;\n }\n return this.getRootParent(this.getParentTask(ganttRecord.parentItem), level);\n };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean | number[] | string[] | Date[] | boolean[]} filterValue - Defines the value\n * used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, TreeGrid filters the records with exact match.if false, it filters case\n * insensitive records (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true,\n * then filter ignores the diacritic characters or accents while filtering.\n * @returns {void} .\n */\n Gantt.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent) {\n this.treeGrid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent);\n };\n /**\n * Export Gantt data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Gantt.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise} .\n */\n Gantt.prototype.excelExport = function (excelExportProperties, isMultipleExport, \n /* eslint-disable-next-line */\n workbook, isBlob) {\n return this.excelExportModule ? this.treeGrid.excelExport(excelExportProperties, isMultipleExport, workbook, isBlob) : null;\n };\n /**\n * Export Gantt data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Gantt.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise} .\n */\n Gantt.prototype.csvExport = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob) {\n return this.excelExportModule ? this.treeGrid.csvExport(excelExportProperties, isMultipleExport, workbook, isBlob) : null;\n };\n /**\n * Export Gantt data to PDF document.\n *\n * @param {PdfExportProperties} pdfExportProperties - Defines the export properties of the Gantt.\n * @param {isMultipleExport} isMultipleExport - Define to enable multiple export.\n * @param {pdfDoc} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If the 'isBlob' parameter is set to true, the method returns PDF data as a blob instead of exporting it as a down-loadable PDF file. The default value is false.\n * @returns {Promise} .\n */\n Gantt.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule ? this.pdfExportModule.export(pdfExportProperties, isMultipleExport, pdfDoc, isBlob)\n : null;\n };\n /**\n * Clears the filtered columns in Gantt.\n *\n * Can also be used to clear filtering of a specific column in Gantt.\n *\n * @param {string[]} fields - Defines the specific column to remove filter.\n * @returns {void} .\n */\n Gantt.prototype.clearFiltering = function (fields) {\n this.treeGrid.grid.clearFiltering(fields);\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @returns {void} .\n * @hidden\n */\n Gantt.prototype.removeFilteredColsByField = function (field) {\n this.treeGrid.removeFilteredColsByField(field, false);\n };\n /**\n * Method to set holidays and non working days in date time and date picker controls\n *\n * @param {RenderDayCellEventArgs} args .\n * @returns {void} .\n * @private\n */\n Gantt.prototype.renderWorkingDayCell = function (args) {\n var includeWeekend = this.taskMode !== 'Auto' ? true : (this.includeWeekend || !this.autoCalculateDateScheduling) ? true : false;\n var nonWorkingDays = !includeWeekend ? this.nonWorkingDayIndex : [];\n var holidays = this.totalHolidayDates;\n if (nonWorkingDays.length > 0 && nonWorkingDays.indexOf(args.date.getDay()) !== -1) {\n args.isDisabled = true;\n }\n else if (holidays.length > 0) {\n var tempDate = new Date(args.date.getTime());\n tempDate.setHours(0, 0, 0);\n if (holidays.indexOf(tempDate.getTime()) !== -1) {\n if (!this.autoCalculateDateScheduling) {\n args.isDisabled = false;\n }\n else {\n args.isDisabled = true;\n }\n }\n }\n };\n /**\n * To update timeline at start point with one unit.\n *\n * @param {string} mode - Render previous span of Timeline.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.previousTimeSpan = function (mode) {\n this.timelineModule.performTimeSpanAction('prevTimeSpan', 'publicMethod', new Date(this.timelineModule.timelineStartDate.getTime()), new Date(this.timelineModule.timelineEndDate.getTime()), mode);\n };\n /**\n * To update timeline at end point with one unit.\n *\n * @param {string} mode - Render next span of Timeline.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.nextTimeSpan = function (mode) {\n this.timelineModule.performTimeSpanAction('nextTimeSpan', 'publicMethod', new Date(this.timelineModule.timelineStartDate.getTime()), new Date(this.timelineModule.timelineEndDate.getTime()), mode);\n };\n /**\n * To validate project start date and end date.\n *\n * @param {Date} startDate - Defines start date of project.\n * @param {Date} endDate - Defines end date of project.\n * @param {boolean} isTimelineRoundOff - Defines project start date and end date need to be round off or not.\n * @param {string} isFrom .\n * @returns {void} .\n * @public\n */\n Gantt.prototype.updateProjectDates = function (startDate, endDate, isTimelineRoundOff, isFrom) {\n this.timelineModule.totalTimelineWidth = 0;\n this.cloneProjectStartDate = startDate;\n this.cloneProjectEndDate = endDate;\n this.isTimelineRoundOff = isTimelineRoundOff;\n this.timelineModule.refreshTimelineByTimeSpan();\n this.dataOperation.reUpdateGanttDataPosition();\n this.timelineModule.updateChartByNewTimeline();\n this.ganttChartModule.chartBodyContent.style.width = formatUnit(this.timelineModule.totalTimelineWidth);\n this.ganttChartModule.updateLastRowBottomWidth();\n if (this.taskFields.dependency) {\n this.ganttChartModule.reRenderConnectorLines();\n }\n if (isFrom !== 'beforeAdd') {\n this.notify('selectRowByIndex', {});\n }\n };\n /**\n * Split the taskbar into segment by the given date\n *\n * @param {string} taskId - Defines the id of a task to be split.\n * @param {string} splitDate - Defines in which date the taskbar must be split up.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.splitTask = function (taskId, splitDate) {\n this.isEdit = true;\n this.chartRowsModule.splitTask(taskId, splitDate);\n };\n /**\n * merge the split taskbar with the given segment indexes.\n *\n * @param {string} taskId - Defines the id of a task to be split.\n * @param {string} segmentIndexes - Defines the object array of indexes which must be merged.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.mergeTask = function (taskId, segmentIndexes) {\n this.chartRowsModule.mergeTask(taskId, segmentIndexes);\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines origin field name.\n * @param {string} toFName - Defines destination field name.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.reorderColumns = function (fromFName, toFName) {\n this.treeGrid.reorderColumns(fromFName, toFName);\n };\n /**\n * Method to clear edited collections in gantt set edit flag value\n *\n * @param {boolean} isStart -Defines whether to initiate edit action.\n * @returns {void} .\n * @private\n */\n Gantt.prototype.initiateEditAction = function (isStart) {\n this.isOnEdit = isStart;\n this.previousRecords = {};\n this.editedRecords = [];\n };\n /**\n *\n * @param {string} field Method to update value in Gantt record and make clone record for this\n * @param {IGanttData | ITaskData} record .\n * @param {boolean} isTaskData .\n * @returns {void} .\n * @private\n */\n /* eslint-disable-next-line */\n Gantt.prototype.setRecordValue = function (field, value, record, isTaskData) {\n value = isUndefined(value) ? null : value;\n if (this.isOnEdit || this.isOnDelete) {\n this.makeCloneData(field, record, isTaskData);\n var ganttData = isTaskData ? record : record.ganttProperties;\n var id = ganttData.rowUniqueID;\n var task = this.getRecordByID(id);\n var isValid = false;\n if (isNullOrUndefined(value) || (!isNullOrUndefined(value) && !isNullOrUndefined(record[\"\" + field]) && (value instanceof Date ? value.getTime() !==\n record[\"\" + field].getTime() : record[\"\" + field] !== value))) {\n isValid = true;\n }\n if (task && ((this.editedRecords.indexOf(task) === -1 && isValid) || this.editedRecords.length === 0)) {\n if (this.editModule['draggedRecord'] && this.editModule['draggedRecord'].ganttProperties.taskId === ganttData.taskId) {\n this.editedRecords.splice(0, 0, task);\n }\n else {\n this.editedRecords.push(task);\n }\n if (this.enableImmutableMode) {\n this.modifiedRecords.push(task);\n }\n }\n }\n setValue(field, value, record);\n };\n Gantt.prototype.makeCloneData = function (field, record, isTaskData) {\n var cloneData;\n /* eslint-disable-next-line */\n var value = getValue(field, record);\n /* eslint-disable-next-line */\n var prevValue;\n /* eslint-disable-next-line */\n var clonedValue;\n if (isTaskData) {\n field = 'ganttProperties.' + field;\n }\n if (isNullOrUndefined(this.previousRecords[record.uniqueID])) {\n var tempData = {};\n this.previousRecords[record.uniqueID] = tempData;\n }\n /* eslint-disable-next-line */\n cloneData = this.previousRecords[record.uniqueID];\n /* eslint-disable-next-line */\n prevValue = getValue(field, cloneData);\n if (isUndefined(prevValue)) {\n if (value instanceof Date) {\n clonedValue = new Date(value.getTime());\n }\n else if (isObjectArray(value)) {\n clonedValue = extend([], value, [], true);\n }\n else if (isObject(value)) {\n clonedValue = extend({}, {}, value, true);\n }\n else {\n clonedValue = value;\n }\n if (!isUndefined(clonedValue)) {\n setValue(field, clonedValue, cloneData);\n }\n else {\n setValue(field, null, cloneData);\n }\n }\n };\n Gantt.prototype.closeGanttActions = function () {\n if (this.editModule) {\n if (this.editModule.cellEditModule && this.editModule.cellEditModule.isCellEdit) {\n this.treeGrid.closeEdit();\n this.editModule.cellEditModule.isCellEdit = false;\n if (!isNullOrUndefined(this.toolbarModule)) {\n this.toolbarModule.refreshToolbarItems();\n }\n }\n else if (this.editModule.dialogModule && this.editModule.dialogModule.dialogObj &&\n this.editModule.dialogModule.dialogObj.visible) {\n this.editModule.dialogModule.dialogObj.hide();\n this.editModule.dialogModule.dialogClose();\n }\n }\n };\n /**\n * Method to get task by uniqueId value.\n *\n * @param {string} id - Defines the task id.\n * @returns {IGanttData} .\n * @isGenericType true\n */\n Gantt.prototype.getTaskByUniqueID = function (id) {\n var value = this.flatData.filter(function (val) {\n return val.uniqueID === id;\n });\n if (value.length > 0) {\n return value[0];\n }\n else {\n return null;\n }\n };\n /**\n * Method to get record by id value.\n *\n * @param {string} id - Defines the id of record.\n * @returns {IGanttData} .\n * @isGenericType true\n */\n Gantt.prototype.getRecordByID = function (id) {\n if (isNullOrUndefined(id)) {\n return null;\n }\n return this.flatData[this.ids.indexOf(id.toString())];\n };\n /**\n * Method to set splitter position.\n *\n * @param {string|number} value - Define value to splitter settings property.\n * @param {string} type - Defines name of internal splitter settings property.\n * @returns {void} .\n */\n Gantt.prototype.setSplitterPosition = function (value, type) {\n var tempSplitterSettings = {};\n tempSplitterSettings[type] = value;\n var splitterPosition = this.splitterModule.calculateSplitterPosition(tempSplitterSettings);\n var pane1 = this.splitterModule.splitterObject.element.querySelectorAll('.e-pane')[0];\n var pane2 = this.splitterModule.splitterObject.element.querySelectorAll('.e-pane')[1];\n this.splitterModule.splitterPreviousPositionGrid = pane1.scrollWidth + 1 + 'px';\n this.splitterModule.splitterPreviousPositionChart = pane2.scrollWidth + 1 + 'px';\n this.splitterModule.splitterObject.paneSettings[0].size = splitterPosition;\n this.splitterModule.triggerCustomResizedEvent();\n };\n /**\n * Expand the records by index value.\n *\n * @param {number[] | number} index - Defines the index of rows to be expand.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.expandByIndex = function (index) {\n if (typeof index === 'number') {\n var args = this.contructExpandCollapseArgs(null, index);\n this.ganttChartModule.isExpandCollapseFromChart = true;\n this.ganttChartModule.expandGanttRow(args);\n }\n else {\n for (var i = 0; i < index.length; i++) {\n if (typeof index[i] === 'number') {\n var ind = index[i];\n var args = this.contructExpandCollapseArgs(null, ind);\n this.ganttChartModule.isExpandCollapseFromChart = true;\n this.ganttChartModule.expandGanttRow(args);\n }\n }\n }\n };\n /**\n * Expand the record by task id.\n *\n * @param {number} id - Defines the id of task.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.expandByID = function (id) {\n var args = this.contructExpandCollapseArgs(id);\n this.ganttChartModule.isExpandCollapseFromChart = true;\n this.ganttChartModule.expandGanttRow(args);\n };\n /**\n * Collapse the record by index value.\n *\n * @param {number} index - Defines the index of row.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.collapseByIndex = function (index) {\n var args = this.contructExpandCollapseArgs(null, index);\n this.ganttChartModule.isExpandCollapseFromChart = true;\n this.ganttChartModule.collapseGanttRow(args);\n };\n /**\n * Collapse the record by id value.\n *\n * @param {number} id - Defines the id of task.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.collapseByID = function (id) {\n var args = this.contructExpandCollapseArgs(id);\n this.ganttChartModule.isExpandCollapseFromChart = true;\n this.ganttChartModule.collapseGanttRow(args);\n };\n /**\n * Method to add record.\n *\n * @param {Object[] | IGanttData | Object} data - Defines record to add.\n * @param {RowPosition} rowPosition - Defines the position of row.\n * @param {number} rowIndex - Defines the row index.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.addRecord = function (data, rowPosition, rowIndex) {\n if (this.editModule && this.editSettings.allowAdding) {\n if (this.viewType === 'ResourceView') {\n this.editModule.addRowPosition = rowPosition;\n this.editModule.addRowIndex = rowIndex;\n var resources = void 0;\n if (!isNullOrUndefined(data)) {\n resources = data[this.taskFields.resourceInfo];\n }\n var id = void 0;\n var parentTask = void 0;\n if (!isNullOrUndefined(resources) && resources.length) {\n for (var i = 0; i < resources.length; i++) {\n id = (typeof resources[i] === 'object') ? resources[i][this.resourceFields.id] :\n resources[0];\n parentTask = this.flatData[this.getTaskIds().indexOf('R' + id)];\n if (parentTask) {\n break;\n }\n }\n if (parentTask && parentTask.childRecords.length || parentTask.level === 0) {\n var dropChildRecord = parentTask.childRecords[rowIndex];\n if (dropChildRecord) {\n var position = rowPosition === 'Above' || rowPosition === 'Below' ? rowPosition :\n 'Child';\n if (position === 'Child') {\n this.editModule.addRecord(data, position, this.getTaskIds().indexOf('R' + id));\n }\n else {\n this.editModule.addRecord(data, position, this.flatData.indexOf(dropChildRecord));\n }\n }\n else {\n this.editModule.addRecord(data, 'Child', this.getTaskIds().indexOf('R' + id));\n }\n }\n else {\n this.editModule.addRecord(data, 'Bottom');\n }\n }\n else {\n this.editModule.addRecord(data, 'Bottom');\n }\n this.editModule.addRowPosition = null;\n this.editModule.addRowIndex = null;\n }\n else {\n this.editModule.addRecord(data, rowPosition, rowIndex);\n if (rowPosition === 'Bottom') {\n this.selectedRowIndex = rowIndex;\n }\n if (rowPosition === 'Above' || rowPosition === 'Below' || rowPosition === 'Child') {\n this.currentSelection = !isNullOrUndefined(data) ? data : this.currentSelection;\n }\n }\n }\n };\n /**\n * Method to update record by ID.\n *\n * @param {Object} data - Defines the data to modify.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.updateRecordByID = function (data) {\n if (this.editModule && this.editSettings.allowEditing) {\n this.editModule.updateRecordByID(data);\n }\n };\n /**\n * To update existing taskId with new unique Id.\n *\n * @param {number | string} currentId - Defines the current Id of the record.\n * @param {number | string} newId - Defines the new Id of the record.\n * @returns {void} .\n */\n Gantt.prototype.updateTaskId = function (currentId, newId) {\n if (this.editModule && this.editSettings.allowEditing) {\n this.editModule.updateTaskId(currentId, newId);\n }\n };\n /**\n * Public method to expand particular level of rows.\n *\n * @returns {void} .\n * @param {number} level .\n * @private\n */\n Gantt.prototype.expandAtLevel = function (level) {\n if (this.enableVirtualization) {\n this.isExpandCollapseLevelMethod = true;\n }\n this.ganttChartModule.expandAtLevel(level);\n };\n /**\n * To indent the level of selected task to the hierarchical Gantt task.\n *\n * @returns {void} .\n * @public\n */\n Gantt.prototype.indent = function () {\n if (this.editModule && this.editSettings.allowEditing) {\n this.editModule.indent();\n }\n };\n /**\n * To outdent the level of selected task from the hierarchical Gantt task.\n *\n * @returns {void} .\n * @public\n */\n Gantt.prototype.outdent = function () {\n if (this.editModule && this.editSettings.allowEditing) {\n this.editModule.outdent();\n }\n };\n /**\n * To render the critical path tasks in Gantt.\n *\n * @returns {void} .\n * @param {boolean} isCritical- whether to render critical path or not .\n * @public\n */\n Gantt.prototype.showCriticalPath = function (isCritical) {\n if (this.criticalPathModule) {\n this.criticalPathModule.showCriticalPath(isCritical);\n var criticalModule = this.criticalPathModule;\n this.criticalPathModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);\n }\n };\n /**\n * To get all the critical tasks in Gantt.\n *\n * @returns {IGanttData[]} .\n * @public\n */\n Gantt.prototype.getCriticalTasks = function () {\n if (!isNullOrUndefined(this.criticalPathModule) && this.enableCriticalPath) {\n return this.criticalPathModule.getCriticalTasks();\n }\n else {\n return null;\n }\n };\n /**\n * To perform Zoom in action on Gantt timeline.\n *\n * @returns {void} .\n * @public\n */\n Gantt.prototype.zoomIn = function () {\n this.timelineModule.processZooming(true);\n };\n /**\n * To perform zoom out action on Gantt timeline.\n *\n * @returns {void} .\n * @public\n */\n Gantt.prototype.zoomOut = function () {\n this.timelineModule.processZooming(false);\n };\n /**\n * To show all project task in available chart width\n *\n * @returns {void} .\n * @public\n */\n Gantt.prototype.fitToProject = function () {\n this.timelineModule.processZoomToFit();\n this.ganttChartModule.updateScrollLeft(0);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Defines the Dragged record index.\n * @param {number} toIndex - Defines the Dropped record index.\n * @param {string} position -Defines the position of the dropped row.\n * @returns {void} .\n */\n Gantt.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n };\n /**\n * Method to update record by Index.\n *\n * @param {number} index - Defines the index of data to modify.\n * @param {object} data - Defines the data to modify.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.updateRecordByIndex = function (index, data) {\n if (this.editModule && this.editSettings.allowEditing) {\n var tasks = this.taskFields;\n var record = this.updatedRecords.length > 0 ?\n !isNullOrUndefined(this.updatedRecords[index]) ? this.updatedRecords[index] : null : null;\n if (!isNullOrUndefined(record)) {\n data[tasks.id] = record[tasks.id];\n this.editModule.updateRecordByID(data);\n }\n }\n };\n /**\n * To add dependency for Task.\n *\n * @param {number} id - Defines the ID of data to modify.\n * @param {string} predecessorString - Defines the predecessor string to add.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.addPredecessor = function (id, predecessorString) {\n var ganttRecord = this.getRecordByID(id.toString());\n if (this.editModule && !isNullOrUndefined(ganttRecord) && this.editSettings.allowTaskbarEditing) {\n this.connectorLineEditModule.addPredecessor(ganttRecord, predecessorString);\n }\n };\n /**\n * To remove dependency from task.\n *\n * @param {number} id - Defines the ID of task to modify.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.removePredecessor = function (id) {\n var ganttRecord = this.getRecordByID(id.toString());\n if (this.editModule && !isNullOrUndefined(ganttRecord) && this.editSettings.allowTaskbarEditing) {\n this.connectorLineEditModule.removePredecessor(ganttRecord);\n }\n };\n /**\n * To modify current dependency values of Task by task id.\n *\n * @param {number} id - Defines the ID of data to modify.\n * @param {string} predecessorString - Defines the predecessor string to update.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.updatePredecessor = function (id, predecessorString) {\n var ganttRecord = this.getRecordByID(id.toString());\n if (this.editModule && !isNullOrUndefined(ganttRecord) && this.editSettings.allowTaskbarEditing) {\n this.connectorLineEditModule.updatePredecessor(ganttRecord, predecessorString);\n }\n };\n /**\n * Method to open Add dialog.\n *\n * @returns {void} .\n * @public\n */\n Gantt.prototype.openAddDialog = function () {\n if (this.editModule && this.editModule.dialogModule && this.editSettings.allowAdding) {\n this.editModule.dialogModule.openAddDialog();\n }\n };\n /**\n * Method to open Edit dialog.\n *\n * @param {number } taskId - Defines the id of task.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.openEditDialog = function (taskId) {\n if (this.editModule && this.editModule.dialogModule && this.editSettings.allowEditing) {\n this.editModule.dialogModule.openEditDialog(taskId);\n }\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string | number} id .\n * @param {number} index .\n * @returns {void} .\n * @private\n */\n Gantt.prototype.contructExpandCollapseArgs = function (id, index) {\n var chartRow;\n var record;\n var rowIndex;\n if (isNullOrUndefined(index)) {\n record = this.getRecordByID(id.toString());\n chartRow = this.getRowByID(id);\n if (!isNullOrUndefined(chartRow)) {\n rowIndex = getValue('rowIndex', chartRow);\n }\n }\n else if (!isNullOrUndefined(index)) {\n chartRow = this.getRowByIndex(index);\n rowIndex = getValue('rowIndex', chartRow);\n record = this.currentViewData[rowIndex];\n }\n var gridRow = this.treeGrid.getRows()[rowIndex];\n return { data: record, gridRow: gridRow, chartRow: chartRow, cancel: false };\n };\n /**\n * Method to get chart row value by index.\n *\n * @param {number} index - Defines the index of row.\n * @returns {HTMLElement} .\n */\n Gantt.prototype.getRowByIndex = function (index) {\n try {\n var gridRows = this.element.querySelectorAll('.e-chart-row');\n if (!isNullOrUndefined(index)) {\n return gridRows[index];\n }\n else {\n return null;\n }\n }\n catch (e) {\n return null;\n }\n };\n /**\n * Method to get the row element by task id.\n *\n * @param {string | number} id - Defines the id of task.\n * @returns {HTMLElement} .\n */\n Gantt.prototype.getRowByID = function (id) {\n var record = this.getRecordByID(id.toString());\n var index = this.updatedRecords.indexOf(record);\n if (index !== -1) {\n return this.getRowByIndex(index);\n }\n else {\n return null;\n }\n };\n /**\n * Method to get class name for unscheduled tasks\n *\n * @param {ITaskData} ganttProp .\n * @returns {string} .\n * @private\n */\n Gantt.prototype.getUnscheduledTaskClass = function (ganttProp) {\n if (isNullOrUndefined(ganttProp.startDate) && isNullOrUndefined(ganttProp.endDate) &&\n isNullOrUndefined(ganttProp.duration)) {\n return ' ' + cls.traceUnscheduledTask;\n }\n else if (isNullOrUndefined(ganttProp.startDate) || isNullOrUndefined(ganttProp.endDate) ||\n isNullOrUndefined(ganttProp.duration)) {\n return ' ' + cls.traceUnscheduledTask;\n }\n else {\n return '';\n }\n };\n /**\n * Method to get class name for unscheduled tasks\n *\n * @param {ITaskData} ganttProp -Defines the Gantt propertie.\n * @returns {boolean} .\n * @private\n */\n Gantt.prototype.isUnscheduledTask = function (ganttProp) {\n if (isNullOrUndefined(ganttProp.startDate) || isNullOrUndefined(ganttProp.endDate) ||\n isNullOrUndefined(ganttProp.duration)) {\n return true;\n }\n else {\n return false;\n }\n };\n Gantt.prototype.createGanttPopUpElement = function () {\n var popup = this.createElement('div', { className: 'e-ganttpopup', styles: 'display:none;' });\n var content = this.createElement('div', { className: 'e-content', attrs: { tabIndex: '-1' } });\n append([content, this.createElement('div', { className: 'e-uptail e-tail' })], popup);\n content.appendChild(this.createElement('span'));\n append([content, this.createElement('div', { className: 'e-downtail e-tail' })], popup);\n document.getElementById(this.element.id + 'GanttChart').appendChild(popup);\n };\n /**\n * Method to get predecessor value as string.\n *\n * @param {string} type .\n * @returns {HTMLElement} .\n * @private\n */\n Gantt.prototype.getPredecessorTextValue = function (type) {\n var textValue;\n switch (type) {\n case 'SS':\n textValue = this.localeObj.getConstant('start') + '-' + this.localeObj.getConstant('start');\n break;\n case 'FF':\n textValue = this.localeObj.getConstant('finish') + '-' + this.localeObj.getConstant('finish');\n break;\n case 'SF':\n textValue = this.localeObj.getConstant('start') + '-' + this.localeObj.getConstant('finish');\n break;\n case 'FS':\n textValue = this.localeObj.getConstant('finish') + '-' + this.localeObj.getConstant('start');\n break;\n }\n return textValue;\n };\n /**\n * Method to perform search action in Gantt.\n *\n * @param {string} keyVal - Defines key value to search.\n * @returns {void} .\n */\n Gantt.prototype.search = function (keyVal) {\n if (this.filterModule) {\n this.searchSettings.key = keyVal;\n this.dataBind();\n }\n };\n /**\n * Method to get offset rect value\n *\n * @param {HTMLElement} element .\n * @returns {number} .\n * @hidden\n */\n Gantt.prototype.getOffsetRect = function (element) {\n var box = element.getBoundingClientRect();\n var scrollTop = window.pageYOffset || document.documentElement.scrollTop\n || document.body.scrollTop;\n var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft ||\n document.body.scrollLeft;\n var clientTop = document.documentElement.clientTop || document.body.clientTop || 0;\n var clientLeft = document.documentElement.clientLeft || document.body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = this.enableRtl ? box.right + scrollLeft - clientLeft : box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left), width: box.width, height: box.height };\n };\n /**\n * Method to expand all the rows of Gantt.\n *\n * @returns {void} .\n * @public\n */\n Gantt.prototype.expandAll = function () {\n this.ganttChartModule.expandCollapseAll('expand');\n };\n /**\n * Method to update data source.\n *\n * @returns {void} .\n * @param {object[]} dataSource - Defines a collection of data.\n * @param {object} args - Defines the projectStartDate and projectEndDate values.\n * @public\n */\n Gantt.prototype.updateDataSource = function (dataSource, args) {\n this.isDynamicData = true;\n if (!isNullOrUndefined(args)) {\n for (var _i = 0, _a = Object.keys(args); _i < _a.length; _i++) { // eslint-disable-line\n var prop = _a[_i];\n switch (prop) {\n case 'projectStartDate':\n this.setProperties({ projectStartDate: args[prop] }, true);\n break;\n case 'projectEndDate':\n this.setProperties({ projectEndDate: args[prop] }, true);\n break;\n }\n }\n }\n this.dataSource = dataSource;\n };\n /**\n * Method to collapse all the rows of Gantt.\n *\n * @returns {void} .\n * @public\n */\n Gantt.prototype.collapseAll = function () {\n this.ganttChartModule.expandCollapseAll('collapse');\n };\n /**\n * Gets the columns from the TreeGrid.\n *\n * @returns {Column[]} .\n * @public\n */\n Gantt.prototype.getGridColumns = function () {\n return this.treeGrid.getColumns();\n };\n /**\n * Method to column from given column collection based on field value\n *\n * @param {string} field .\n * @param {ColumnModel[]} columns .\n * @returns {ColumnModel} .\n * @private\n */\n Gantt.prototype.getColumnByField = function (field, columns) {\n var column = columns.filter(function (value) {\n return value.field === field;\n });\n return column.length > 0 ? column[0] : null;\n };\n /**\n * Gets the Gantt columns.\n *\n * @returns {ColumnModel[]} .\n * @public\n */\n Gantt.prototype.getGanttColumns = function () {\n return this.ganttColumns;\n };\n /**\n * Shows a column by its column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.showColumn = function (keys, showBy) {\n this.treeGrid.showColumns(keys, showBy);\n this.updateTreeColumns();\n };\n /**\n * Hides a column by column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.hideColumn = function (keys, hideBy) {\n this.treeGrid.hideColumns(keys, hideBy);\n this.updateTreeColumns();\n };\n /**\n * To set scroll top for chart scroll container.\n *\n * @param {number} scrollTop - Defines scroll top value for scroll container.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.setScrollTop = function (scrollTop) {\n this.ganttChartModule.scrollObject.setScrollTop(scrollTop);\n };\n /**\n * Cancels edited state.\n *\n * @returns {void} .\n * @public\n */\n Gantt.prototype.cancelEdit = function () {\n this.isCancelled = true;\n this.closeGanttActions();\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void} .\n */\n Gantt.prototype.selectCell = function (cellIndex, isToggle) {\n if (this.selectionModule) {\n this.selectionModule.selectCell(cellIndex, isToggle);\n }\n };\n /**\n * Selects a collection of cells by row and column indexes.\n *\n * @param {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n * @returns {void} .\n */\n Gantt.prototype.selectCells = function (rowCellIndexes) {\n if (this.selectionModule) {\n this.selectionModule.selectCells(rowCellIndexes);\n }\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void} .\n */\n Gantt.prototype.selectRow = function (index, isToggle) {\n if (this.selectionModule) {\n this.selectionModule.selectRow(index, isToggle);\n }\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} records - Defines the collection of row indexes.\n * @returns {void} .\n */\n Gantt.prototype.selectRows = function (records) {\n if (this.selectionModule) {\n this.selectionModule.selectRows(records);\n }\n };\n /**\n * Method to delete record.\n *\n * @param {number | string } taskDetail - Defines the details of data to delete.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.deleteRecord = function (taskDetail) {\n if (this.editModule) {\n this.editModule.deleteRecord(taskDetail);\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void} .\n */\n Gantt.prototype.enableItems = function (items, isEnable) {\n if (this.toolbarModule) {\n this.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void} .\n */\n Gantt.prototype.clearSelection = function () {\n if (this.selectionModule) {\n this.selectionModule.clearSelection();\n }\n };\n /**\n * @param {ITaskAddedEventArgs | IActionBeginEventArgs} args .\n * @returns {ITaskAddedEventArgs | IActionBeginEventArgs} .\n * @hidden\n */\n Gantt.prototype.updateDataArgs = function (args) {\n if (!Array.isArray(args.data)) {\n var customData = [];\n customData.push(args.data);\n setValue('data', customData, args);\n }\n return args;\n };\n /**\n * Method to convert task data to milestone data.\n *\n * @param {string} id - Defines id of record.\n * @returns {void} .\n * @public\n */\n Gantt.prototype.convertToMilestone = function (id) {\n var rowData = this.getRecordByID(id);\n if (!isNullOrUndefined(rowData)) {\n var data = extend({}, {}, rowData.taskData, true);\n var taskfields = this.taskFields;\n if (data[taskfields.startDate]) {\n this.setRecordValue(taskfields.startDate, rowData.ganttProperties.startDate, data, true);\n }\n if (!isNullOrUndefined(taskfields.duration)) {\n data[taskfields.duration] = 0;\n }\n else {\n data[taskfields.startDate] = new Date(rowData.ganttProperties.startDate);\n data[taskfields.endDate] = new Date(rowData.ganttProperties.endDate);\n }\n if (!isNullOrUndefined(taskfields.milestone)) {\n if (data[taskfields.milestone] === false) {\n data[taskfields.milestone] = true;\n }\n }\n if (!isNullOrUndefined(taskfields.progress)) {\n data[taskfields.progress] = 0;\n }\n if (!isNullOrUndefined(taskfields.child) && data[taskfields.child]) {\n data[taskfields.child] = [];\n }\n if (!isNullOrUndefined(taskfields.parentID) && data[taskfields.parentID]) {\n data[taskfields.parentID] = null;\n }\n if (!isNullOrUndefined(taskfields.segments)) {\n data[taskfields.segments] = null;\n }\n if (!isNullOrUndefined(this.contextMenuModule) &&\n this.contextMenuModule.isOpen &&\n this.contextMenuModule.item === 'Milestone') {\n if (!isNullOrUndefined(taskfields.dependency)) {\n data[taskfields.dependency] = null;\n }\n var position = this.editSettings.newRowPosition;\n this.addRecord(data, position, this.selectedRowIndex);\n }\n else {\n if (!rowData.hasChildRecords && !rowData.ganttProperties.isMilestone) {\n this.updateRecordByID(data);\n }\n }\n }\n };\n /**\n * To change the mode of a record.\n *\n * @param {object} data - Use to change the TaskMode either manual, auto or custom.\n * @returns {void} .\n */\n Gantt.prototype.changeTaskMode = function (data) {\n var tasks = this.taskFields;\n var ganttData = this.getRecordByID(data[tasks.id]);\n var ganttProp = ganttData.ganttProperties;\n this.isOnEdit = true;\n this.setRecordValue('isAutoSchedule', !ganttProp.isAutoSchedule, ganttProp, true);\n if (!isNullOrUndefined(this.taskFields.manual)) {\n this.setRecordValue('taskData.' + tasks.manual, !ganttProp.isAutoSchedule, ganttData);\n this.setRecordValue(tasks.manual, !ganttProp.isAutoSchedule, ganttData);\n }\n this.editModule.updateTaskScheduleModes(ganttData);\n var args = {\n data: ganttData\n };\n this.editModule.initiateUpdateAction(args);\n };\n /**\n * @returns {string[]} .\n * @private\n */\n Gantt.prototype.getTaskIds = function () {\n return this.taskIds;\n };\n /**\n * @param {IGanttData} data .\n * @returns {void} .\n * @private\n */\n Gantt.prototype.setTaskIds = function (data) {\n if (this.viewType !== 'ProjectView') {\n var id = data.ganttProperties.taskId;\n id = data.level === 0 ? 'R' + id : 'T' + id;\n this.taskIds.push(id);\n }\n };\n /**\n * To render the react templates\n *\n * @returns {void} .\n * @hidden\n */\n Gantt.prototype.renderTemplates = function () {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n /**\n * To reset the react templates\n *\n * @returns {void} .\n * @hidden\n */\n Gantt.prototype.resetTemplates = function () {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate();\n }\n };\n __decorate([\n Property(true)\n ], Gantt.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property(true)\n ], Gantt.prototype, \"allowParentDependency\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(true)\n ], Gantt.prototype, \"disableHtmlEncode\", void 0);\n __decorate([\n Complex({}, LoadingIndicator)\n ], Gantt.prototype, \"loadingIndicator\", void 0);\n __decorate([\n Property(true)\n ], Gantt.prototype, \"enableVirtualMaskRow\", void 0);\n __decorate([\n Property(true)\n ], Gantt.prototype, \"UpdateOffsetOnTaskbarEdit\", void 0);\n __decorate([\n Property(true)\n ], Gantt.prototype, \"autoCalculateDateScheduling\", void 0);\n __decorate([\n Property(true)\n ], Gantt.prototype, \"autoFocusTasks\", void 0);\n __decorate([\n Property(true)\n ], Gantt.prototype, \"allowSelection\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Gantt.prototype, \"enablePredecessorValidation\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property()\n ], Gantt.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], Gantt.prototype, \"timezone\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"collapseAllParentTasks\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"highlightWeekends\", void 0);\n __decorate([\n Property(0)\n ], Gantt.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property([])\n ], Gantt.prototype, \"dataSource\", void 0);\n __decorate([\n Property('day')\n ], Gantt.prototype, \"durationUnit\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"dateFormat\", void 0);\n __decorate([\n Property('auto')\n ], Gantt.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"renderBaseline\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"allowTaskbarDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], Gantt.prototype, \"allowTaskbarOverlap\", void 0);\n __decorate([\n Property('Horizontal')\n ], Gantt.prototype, \"gridLines\", void 0);\n __decorate([\n Complex({}, LabelSettings)\n ], Gantt.prototype, \"labelSettings\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"taskbarTemplate\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"parentTaskbarTemplate\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"milestoneTemplate\", void 0);\n __decorate([\n Property()\n ], Gantt.prototype, \"baselineColor\", void 0);\n __decorate([\n Property('auto')\n ], Gantt.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property()\n ], Gantt.prototype, \"toolbar\", void 0);\n __decorate([\n Property(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'])\n ], Gantt.prototype, \"workWeek\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"includeWeekend\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"allowUnscheduledTasks\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"showInlineNotes\", void 0);\n __decorate([\n Property(36)\n ], Gantt.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"taskbarHeight\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"projectStartDate\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"projectEndDate\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"resourceIDMapping\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"resourceNameMapping\", void 0);\n __decorate([\n Property([])\n ], Gantt.prototype, \"resources\", void 0);\n __decorate([\n Property([])\n ], Gantt.prototype, \"segmentData\", void 0);\n __decorate([\n Property(null)\n ], Gantt.prototype, \"connectorLineBackground\", void 0);\n __decorate([\n Property(1)\n ], Gantt.prototype, \"connectorLineWidth\", void 0);\n __decorate([\n Property([])\n ], Gantt.prototype, \"columns\", void 0);\n __decorate([\n Property([])\n ], Gantt.prototype, \"addDialogFields\", void 0);\n __decorate([\n Property([])\n ], Gantt.prototype, \"editDialogFields\", void 0);\n __decorate([\n Property(-1)\n ], Gantt.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Property('hour')\n ], Gantt.prototype, \"workUnit\", void 0);\n __decorate([\n Property('FixedUnit')\n ], Gantt.prototype, \"taskType\", void 0);\n __decorate([\n Property('ProjectView')\n ], Gantt.prototype, \"viewType\", void 0);\n __decorate([\n Collection([{ from: 8, to: 12 }, { from: 13, to: 17 }], DayWorkingTime)\n ], Gantt.prototype, \"dayWorkingTime\", void 0);\n __decorate([\n Collection([], Holiday)\n ], Gantt.prototype, \"holidays\", void 0);\n __decorate([\n Collection([], EventMarker)\n ], Gantt.prototype, \"eventMarkers\", void 0);\n __decorate([\n Complex({}, TaskFields)\n ], Gantt.prototype, \"taskFields\", void 0);\n __decorate([\n Complex({}, ResourceFields)\n ], Gantt.prototype, \"resourceFields\", void 0);\n __decorate([\n Complex({}, TimelineSettings)\n ], Gantt.prototype, \"timelineSettings\", void 0);\n __decorate([\n Property([])\n ], Gantt.prototype, \"zoomingLevels\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], Gantt.prototype, \"sortSettings\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], Gantt.prototype, \"editSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], Gantt.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], Gantt.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"readOnly\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"enableContextMenu\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"enableCriticalPath\", void 0);\n __decorate([\n Property()\n ], Gantt.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"validateManualTasksOnLinking\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"enableMultiTaskbar\", void 0);\n __decorate([\n Property(false)\n ], Gantt.prototype, \"showOverAllocation\", void 0);\n __decorate([\n Property('Auto')\n ], Gantt.prototype, \"taskMode\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], Gantt.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], Gantt.prototype, \"searchSettings\", void 0);\n __decorate([\n Complex({}, SplitterSettings)\n ], Gantt.prototype, \"splitterSettings\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"queryTaskbarInfo\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"rowDrop\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"taskbarEdited\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"endEdit\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"taskbarEditing\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"splitterResizeStart\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"splitterResizing\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"splitterResized\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"beforeTooltipRender\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"onTaskbarClick\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"onMouseMove\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"pdfExportComplete\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"pdfQueryTaskbarInfo\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"pdfQueryTimelineCellInfo\", void 0);\n __decorate([\n Event()\n ], Gantt.prototype, \"pdfColumnHeaderQueryCellInfo\", void 0);\n Gantt = __decorate([\n NotifyPropertyChanges\n ], Gantt);\n return Gantt;\n}(Component));\nexport { Gantt };\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var ColumnsDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-columns';\n }\n }\n});\nexport var ColumnsPlugin = {\n name: 'e-columns',\n install: function (Vue) {\n Vue.component(ColumnsPlugin.name, ColumnsDirective);\n }\n};\n/**\n * `e-column` directive represent a column of the VueJS Gantt.\n * It must be contained in a Gantt component(`ejs-gantt`).\n * ```vue\n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var ColumnDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-column';\n }\n }\n});\nexport var ColumnPlugin = {\n name: 'e-column',\n install: function (Vue) {\n Vue.component(ColumnPlugin.name, ColumnDirective);\n }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var AddDialogFieldsDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-add-dialog-fields';\n }\n }\n});\nexport var AddDialogFieldsPlugin = {\n name: 'e-add-dialog-fields',\n install: function (Vue) {\n Vue.component(AddDialogFieldsPlugin.name, AddDialogFieldsDirective);\n }\n};\n/**\n * `e-add-dialog-fields` directive represent a add dialog fields in VueJS Gantt.\n * It must be contained in a Gantt component(`ejs-gantt`).\n * ```vue\n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var AddDialogFieldDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-add-dialog-field';\n }\n }\n});\nexport var AddDialogFieldPlugin = {\n name: 'e-add-dialog-field',\n install: function (Vue) {\n Vue.component(AddDialogFieldPlugin.name, AddDialogFieldDirective);\n }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var EditDialogFieldsDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-edit-dialog-fields';\n }\n }\n});\nexport var EditDialogFieldsPlugin = {\n name: 'e-edit-dialog-fields',\n install: function (Vue) {\n Vue.component(EditDialogFieldsPlugin.name, EditDialogFieldsDirective);\n }\n};\n/**\n * `e-edit-dialog-fields` directive represent a add dialog fields in VueJS Gantt.\n * It must be contained in a Gantt component(`ejs-gantt`).\n * ```vue\n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var EditDialogFieldDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-edit-dialog-field';\n }\n }\n});\nexport var EditDialogFieldPlugin = {\n name: 'e-edit-dialog-field',\n install: function (Vue) {\n Vue.component(EditDialogFieldPlugin.name, EditDialogFieldDirective);\n }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var DayWorkingTimeCollectionDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-day-working-time-collection';\n }\n }\n});\nexport var DayWorkingTimeCollectionPlugin = {\n name: 'e-day-working-time-collection',\n install: function (Vue) {\n Vue.component(DayWorkingTimeCollectionPlugin.name, DayWorkingTimeCollectionDirective);\n }\n};\n/**\n * `e-day-working-time-collection` directive represent a working time ranges in a day.\n * It must be contained in a Gantt component(`ejs-gantt`).\n * ```vue\n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var DayWorkingTimeDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-day-working-time';\n }\n }\n});\nexport var DayWorkingTimePlugin = {\n name: 'e-day-working-time',\n install: function (Vue) {\n Vue.component(DayWorkingTimePlugin.name, DayWorkingTimeDirective);\n }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var HolidaysDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-holidays';\n }\n }\n});\nexport var HolidaysPlugin = {\n name: 'e-holidays',\n install: function (Vue) {\n Vue.component(HolidaysPlugin.name, HolidaysDirective);\n }\n};\n/**\n * `e-holidays` directive represent a holidays collection in Gantt.\n * It must be contained in a Gantt component(`ejs-gantt`).\n * ```vue\n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var HolidayDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-holidays';\n }\n }\n});\nexport var HolidayPlugin = {\n name: 'e-holidays',\n install: function (Vue) {\n Vue.component(HolidayPlugin.name, HolidayDirective);\n }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var EventMarkersDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-event-markers';\n }\n }\n});\nexport var EventMarkersPlugin = {\n name: 'e-event-markers',\n install: function (Vue) {\n Vue.component(EventMarkersPlugin.name, EventMarkersDirective);\n }\n};\n/**\n * `e-event-markers` directive represent a event marker collection in Gantt\n * It must be contained in a Gantt component(`ejs-gantt`).\n * ```vue\n * \n * \n * \n * \n * \n * ```\n */\nexport var EventMarkerDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-event-marker';\n }\n }\n});\nexport var EventMarkerPlugin = {\n name: 'e-event-marker',\n install: function (Vue) {\n Vue.component(EventMarkerPlugin.name, EventMarkerDirective);\n }\n};\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { isUndefined } from '@syncfusion/ej2-base';\nimport { Gantt } from '@syncfusion/ej2-gantt';\nimport { ColumnsDirective, ColumnDirective, ColumnsPlugin, ColumnPlugin } from './columns.directive';\nimport { AddDialogFieldsDirective, AddDialogFieldDirective, AddDialogFieldsPlugin, AddDialogFieldPlugin } from './adddialogfields.directive';\nimport { EditDialogFieldsDirective, EditDialogFieldDirective, EditDialogFieldsPlugin, EditDialogFieldPlugin } from './editdialogfields.directive';\nimport { DayWorkingTimeCollectionDirective, DayWorkingTimeDirective, DayWorkingTimeCollectionPlugin, DayWorkingTimePlugin } from './dayworkingtime.directive';\nimport { HolidaysDirective, HolidayDirective, HolidaysPlugin, HolidayPlugin } from './holidays.directive';\nimport { EventMarkersDirective, EventMarkerDirective, EventMarkersPlugin, EventMarkerPlugin } from './eventmarkers.directive';\nexport var properties = ['isLazyUpdate', 'plugins', 'UpdateOffsetOnTaskbarEdit', 'addDialogFields', 'allowExcelExport', 'allowFiltering', 'allowKeyboard', 'allowParentDependency', 'allowPdfExport', 'allowReordering', 'allowResizing', 'allowRowDragAndDrop', 'allowSelection', 'allowSorting', 'allowTaskbarDragAndDrop', 'allowTaskbarOverlap', 'allowUnscheduledTasks', 'autoCalculateDateScheduling', 'autoFocusTasks', 'baselineColor', 'collapseAllParentTasks', 'columnMenuItems', 'columns', 'connectorLineBackground', 'connectorLineWidth', 'contextMenuItems', 'dataSource', 'dateFormat', 'dayWorkingTime', 'disableHtmlEncode', 'durationUnit', 'editDialogFields', 'editSettings', 'enableContextMenu', 'enableCriticalPath', 'enableHtmlSanitizer', 'enableImmutableMode', 'enableMultiTaskbar', 'enablePersistence', 'enablePredecessorValidation', 'enableRtl', 'enableVirtualMaskRow', 'enableVirtualization', 'eventMarkers', 'filterSettings', 'gridLines', 'height', 'highlightWeekends', 'holidays', 'includeWeekend', 'labelSettings', 'loadingIndicator', 'locale', 'milestoneTemplate', 'parentTaskbarTemplate', 'projectEndDate', 'projectStartDate', 'query', 'readOnly', 'renderBaseline', 'resourceFields', 'resourceIDMapping', 'resourceNameMapping', 'resources', 'rowHeight', 'searchSettings', 'segmentData', 'selectedRowIndex', 'selectionSettings', 'showColumnMenu', 'showInlineNotes', 'showOverAllocation', 'sortSettings', 'splitterSettings', 'taskFields', 'taskMode', 'taskType', 'taskbarHeight', 'taskbarTemplate', 'timelineSettings', 'timezone', 'toolbar', 'tooltipSettings', 'treeColumnIndex', 'validateManualTasksOnLinking', 'viewType', 'width', 'workUnit', 'workWeek', 'zoomingLevels', 'actionBegin', 'actionComplete', 'actionFailure', 'beforeExcelExport', 'beforePdfExport', 'beforeTooltipRender', 'cellDeselected', 'cellDeselecting', 'cellEdit', 'cellSelected', 'cellSelecting', 'collapsed', 'collapsing', 'columnDrag', 'columnDragStart', 'columnDrop', 'columnMenuClick', 'columnMenuOpen', 'contextMenuClick', 'contextMenuOpen', 'created', 'dataBound', 'dataStateChange', 'destroyed', 'endEdit', 'excelExportComplete', 'excelHeaderQueryCellInfo', 'excelQueryCellInfo', 'expanded', 'expanding', 'headerCellInfo', 'load', 'onMouseMove', 'onTaskbarClick', 'pdfColumnHeaderQueryCellInfo', 'pdfExportComplete', 'pdfQueryCellInfo', 'pdfQueryTaskbarInfo', 'pdfQueryTimelineCellInfo', 'queryCellInfo', 'queryTaskbarInfo', 'recordDoubleClick', 'resizeStart', 'resizeStop', 'resizing', 'rowDataBound', 'rowDeselected', 'rowDeselecting', 'rowDrag', 'rowDragStart', 'rowDragStartHelper', 'rowDrop', 'rowSelected', 'rowSelecting', 'splitterResizeStart', 'splitterResized', 'splitterResizing', 'taskbarEdited', 'taskbarEditing', 'toolbarClick'];\nexport var modelProps = ['dataSource'];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n var props_1 = modelProps_1[_i];\n emitProbs.push('update:' + props_1);\n}\n/**\n * `ejs-gantt` represents the VueJS Gantt Component.\n * ```vue\n * \n * ```\n */\nexport var GanttComponent = vueDefineComponent({\n name: 'GanttComponent',\n mixins: [ComponentBase],\n props: props,\n watch: watch,\n emits: emitProbs,\n model: { event: 'modelchanged' },\n provide: function () { return { custom: this.custom }; },\n data: function () {\n return {\n ej2Instance: new Gantt({}),\n propKeys: properties,\n models: modelProps,\n hasChildDirective: true,\n hasInjectedModules: true,\n tagMapper: { \"e-columns\": \"e-column\", \"e-add-dialog-fields\": \"e-add-dialog-field\", \"e-edit-dialog-fields\": \"e-edit-dialog-field\", \"e-day-working-time-collection\": \"e-day-working-time\", \"e-holidays\": \"e-holidays\", \"e-event-markers\": \"e-event-marker\" },\n tagNameMapper: { \"e-add-dialog-fields\": \"e-addDialogFields\", \"e-edit-dialog-fields\": \"e-editDialogFields\", \"e-day-working-time-collection\": \"e-dayWorkingTime\", \"e-event-markers\": \"e-eventMarkers\" },\n isVue3: !isExecute,\n templateCollection: {},\n };\n },\n created: function () {\n this.ej2Instances._trigger = this.ej2Instances.trigger;\n this.ej2Instances.trigger = this.trigger;\n this.bindProperties();\n this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n this.ej2Instances.setProperties = this.setProperties;\n this.ej2Instances.clearTemplate = this.clearTemplate;\n this.updated = this.updated;\n },\n render: function (createElement) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', slots);\n },\n methods: {\n clearTemplate: function (templateNames) {\n if (!templateNames) {\n templateNames = Object.keys(this.templateCollection || {});\n }\n if (templateNames.length && this.templateCollection) {\n for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n var tempName = templateNames_1[_i];\n var elementCollection = this.templateCollection[tempName];\n if (elementCollection && elementCollection.length) {\n for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n var ele = elementCollection_1[_a];\n var destroy = getValue('__vue__.$destroy', ele);\n if (destroy) {\n ele.__vue__.$destroy();\n }\n if (ele.innerHTML) {\n ele.innerHTML = '';\n }\n }\n delete this.templateCollection[tempName];\n }\n }\n }\n },\n setProperties: function (prop, muteOnChange) {\n var _this = this;\n if (this.isVue3) {\n this.models = !this.models ? this.ej2Instances.referModels : this.models;\n }\n if (this.ej2Instances && this.ej2Instances._setProperties) {\n this.ej2Instances._setProperties(prop, muteOnChange);\n }\n if (prop && this.models && this.models.length) {\n Object.keys(prop).map(function (key) {\n _this.models.map(function (model) {\n if ((key === model) && !(/datasource/i.test(key))) {\n if (_this.isVue3) {\n _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n }\n else {\n _this.$emit('update:' + key, prop[key]);\n _this.$emit('modelchanged', prop[key]);\n }\n }\n });\n });\n }\n },\n trigger: function (eventName, eventProp, successHandler) {\n if (!isExecute) {\n this.models = !this.models ? this.ej2Instances.referModels : this.models;\n }\n if ((eventName === 'change' || eventName === 'input') && this.models && (this.models.length !== 0)) {\n var key = this.models.toString().match(/checked|value/) || [];\n var propKey = key[0];\n if (eventProp && key && !isUndefined(eventProp[propKey])) {\n if (!isExecute) {\n this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('update:modelValue', eventProp[propKey]);\n }\n else {\n if (eventName === 'change' || (this.$props && !this.$props.isLazyUpdate)) {\n this.$emit('update:' + propKey, eventProp[propKey]);\n this.$emit('modelchanged', eventProp[propKey]);\n }\n }\n }\n }\n else if ((eventName === 'actionBegin' && eventProp.requestType === 'dateNavigate') && this.models && (this.models.length !== 0)) {\n var key = this.models.toString().match(/currentView|selectedDate/) || [];\n var propKey = key[0];\n if (eventProp && key && !isUndefined(eventProp[propKey])) {\n if (!isExecute) {\n this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n }\n else {\n this.$emit('update:' + propKey, eventProp[propKey]);\n this.$emit('modelchanged', eventProp[propKey]);\n }\n }\n }\n if ((this.ej2Instances && this.ej2Instances._trigger)) {\n this.ej2Instances._trigger(eventName, eventProp, successHandler);\n }\n },\n custom: function () {\n this.updated();\n },\n addPredecessor: function (id, predecessorString) {\n return this.ej2Instances.addPredecessor(id, predecessorString);\n },\n addRecord: function (data, rowPosition, rowIndex) {\n return this.ej2Instances.addRecord(data, rowPosition, rowIndex);\n },\n cancelEdit: function () {\n return this.ej2Instances.cancelEdit();\n },\n changeTaskMode: function (data) {\n return this.ej2Instances.changeTaskMode(data);\n },\n clearFiltering: function (fields) {\n return this.ej2Instances.clearFiltering(fields);\n },\n clearSelection: function () {\n return this.ej2Instances.clearSelection();\n },\n clearSorting: function () {\n return this.ej2Instances.clearSorting();\n },\n collapseAll: function () {\n return this.ej2Instances.collapseAll();\n },\n collapseByID: function (id) {\n return this.ej2Instances.collapseByID(id);\n },\n collapseByIndex: function (index) {\n return this.ej2Instances.collapseByIndex(index);\n },\n convertToMilestone: function (id) {\n return this.ej2Instances.convertToMilestone(id);\n },\n csvExport: function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n return this.ej2Instances.csvExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n },\n deleteRecord: function (taskDetail) {\n return this.ej2Instances.deleteRecord(taskDetail);\n },\n enableItems: function (items, isEnable) {\n return this.ej2Instances.enableItems(items, isEnable);\n },\n excelExport: function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n return this.ej2Instances.excelExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n },\n expandAll: function () {\n return this.ej2Instances.expandAll();\n },\n expandByID: function (id) {\n return this.ej2Instances.expandByID(id);\n },\n expandByIndex: function (index) {\n return this.ej2Instances.expandByIndex(index);\n },\n filterByColumn: function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent) {\n return this.ej2Instances.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent);\n },\n fitToProject: function () {\n return this.ej2Instances.fitToProject();\n },\n getCriticalTasks: function () {\n return this.ej2Instances.getCriticalTasks();\n },\n getDurationString: function (duration, durationUnit) {\n return this.ej2Instances.getDurationString(duration, durationUnit);\n },\n getExpandedRecords: function (records) {\n return this.ej2Instances.getExpandedRecords(records);\n },\n getFormatedDate: function (date, format) {\n return this.ej2Instances.getFormatedDate(date, format);\n },\n getGanttColumns: function () {\n return this.ej2Instances.getGanttColumns();\n },\n getGridColumns: function () {\n return this.ej2Instances.getGridColumns();\n },\n getRecordByID: function (id) {\n return this.ej2Instances.getRecordByID(id);\n },\n getRowByID: function (id) {\n return this.ej2Instances.getRowByID(id);\n },\n getRowByIndex: function (index) {\n return this.ej2Instances.getRowByIndex(index);\n },\n getTaskByUniqueID: function (id) {\n return this.ej2Instances.getTaskByUniqueID(id);\n },\n getTaskbarHeight: function () {\n return this.ej2Instances.getTaskbarHeight();\n },\n getWorkString: function (work, workUnit) {\n return this.ej2Instances.getWorkString(work, workUnit);\n },\n hideColumn: function (keys, hideBy) {\n return this.ej2Instances.hideColumn(keys, hideBy);\n },\n hideMaskRow: function () {\n return this.ej2Instances.hideMaskRow();\n },\n hideSpinner: function () {\n return this.ej2Instances.hideSpinner();\n },\n indent: function () {\n return this.ej2Instances.indent();\n },\n keyActionHandler: function (e) {\n return this.ej2Instances.keyActionHandler(e);\n },\n mergeTask: function (taskId, segmentIndexes) {\n return this.ej2Instances.mergeTask(taskId, segmentIndexes);\n },\n nextTimeSpan: function (mode) {\n return this.ej2Instances.nextTimeSpan(mode);\n },\n openAddDialog: function () {\n return this.ej2Instances.openAddDialog();\n },\n openEditDialog: function (taskId) {\n return this.ej2Instances.openEditDialog(taskId);\n },\n outdent: function () {\n return this.ej2Instances.outdent();\n },\n pdfExport: function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.ej2Instances.pdfExport(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n },\n previousTimeSpan: function (mode) {\n return this.ej2Instances.previousTimeSpan(mode);\n },\n removeCriticalPathStyles: function () {\n return this.ej2Instances.removeCriticalPathStyles();\n },\n removePredecessor: function (id) {\n return this.ej2Instances.removePredecessor(id);\n },\n removeSortColumn: function (columnName) {\n return this.ej2Instances.removeSortColumn(columnName);\n },\n renderTemplates: function () {\n return this.ej2Instances.renderTemplates();\n },\n reorderColumns: function (fromFName, toFName) {\n return this.ej2Instances.reorderColumns(fromFName, toFName);\n },\n reorderRows: function (fromIndexes, toIndex, position) {\n return this.ej2Instances.reorderRows(fromIndexes, toIndex, position);\n },\n resetTemplates: function () {\n return this.ej2Instances.resetTemplates();\n },\n scrollToDate: function (date) {\n return this.ej2Instances.scrollToDate(date);\n },\n scrollToTask: function (taskId) {\n return this.ej2Instances.scrollToTask(taskId);\n },\n search: function (keyVal) {\n return this.ej2Instances.search(keyVal);\n },\n selectCell: function (cellIndex, isToggle) {\n return this.ej2Instances.selectCell(cellIndex, isToggle);\n },\n selectCells: function (rowCellIndexes) {\n return this.ej2Instances.selectCells(rowCellIndexes);\n },\n selectRow: function (index, isToggle) {\n return this.ej2Instances.selectRow(index, isToggle);\n },\n selectRows: function (records) {\n return this.ej2Instances.selectRows(records);\n },\n setScrollTop: function (scrollTop) {\n return this.ej2Instances.setScrollTop(scrollTop);\n },\n setSplitterPosition: function (value, type) {\n return this.ej2Instances.setSplitterPosition(value, type);\n },\n showColumn: function (keys, showBy) {\n return this.ej2Instances.showColumn(keys, showBy);\n },\n showCriticalPath: function (isCritical) {\n return this.ej2Instances.showCriticalPath(isCritical);\n },\n showMaskRow: function () {\n return this.ej2Instances.showMaskRow();\n },\n showSpinner: function () {\n return this.ej2Instances.showSpinner();\n },\n sortColumn: function (columnName, direction, isMultiSort) {\n return this.ej2Instances.sortColumn(columnName, direction, isMultiSort);\n },\n splitTask: function (taskId, splitDate) {\n return this.ej2Instances.splitTask(taskId, splitDate);\n },\n updateChartScrollOffset: function (left, top) {\n return this.ej2Instances.updateChartScrollOffset(left, top);\n },\n updateDataSource: function (dataSource, args) {\n return this.ej2Instances.updateDataSource(dataSource, args);\n },\n updatePredecessor: function (id, predecessorString) {\n return this.ej2Instances.updatePredecessor(id, predecessorString);\n },\n updateProjectDates: function (startDate, endDate, isTimelineRoundOff, isFrom) {\n return this.ej2Instances.updateProjectDates(startDate, endDate, isTimelineRoundOff, isFrom);\n },\n updateRecordByID: function (data) {\n return this.ej2Instances.updateRecordByID(data);\n },\n updateRecordByIndex: function (index, data) {\n return this.ej2Instances.updateRecordByIndex(index, data);\n },\n updateTaskId: function (currentId, newId) {\n return this.ej2Instances.updateTaskId(currentId, newId);\n },\n zoomIn: function () {\n return this.ej2Instances.zoomIn();\n },\n zoomOut: function () {\n return this.ej2Instances.zoomOut();\n },\n }\n});\nexport var GanttPlugin = {\n name: 'ejs-gantt',\n install: function (Vue) {\n Vue.component(GanttPlugin.name, GanttComponent);\n Vue.component(ColumnPlugin.name, ColumnDirective);\n Vue.component(ColumnsPlugin.name, ColumnsDirective);\n Vue.component(AddDialogFieldPlugin.name, AddDialogFieldDirective);\n Vue.component(AddDialogFieldsPlugin.name, AddDialogFieldsDirective);\n Vue.component(EditDialogFieldPlugin.name, EditDialogFieldDirective);\n Vue.component(EditDialogFieldsPlugin.name, EditDialogFieldsDirective);\n Vue.component(DayWorkingTimePlugin.name, DayWorkingTimeDirective);\n Vue.component(DayWorkingTimeCollectionPlugin.name, DayWorkingTimeCollectionDirective);\n Vue.component(HolidayPlugin.name, HolidayDirective);\n Vue.component(HolidaysPlugin.name, HolidaysDirective);\n Vue.component(EventMarkerPlugin.name, EventMarkerDirective);\n Vue.component(EventMarkersPlugin.name, EventMarkersDirective);\n }\n};\n","import { isNullOrUndefined, addClass, extend, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { appendChildren, alignFrozenEditForm, getMovableTbody, getFrozenRightTbody, setStyleAndAttributes } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar InlineEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IGrid} parent - returns the IGrid\n */\n function InlineEditRender(parent) {\n this.parent = parent;\n }\n InlineEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n var tbody;\n var mTbody = getMovableTbody(this.parent);\n var frTbody = getFrozenRightTbody(this.parent);\n var isFrozenGrid = this.parent.isFrozenGrid();\n var isVirtualFrozen = isFrozenGrid && this.parent.enableColumnVirtualization && args.isScroll;\n if (this.parent.frozenRows && this.parent.editSettings.newRowPosition === 'Top') {\n tbody = isVirtualFrozen ? this.parent.getMovableHeaderTbody() : this.parent.getHeaderTable().querySelector(literals.tbody);\n }\n else {\n tbody = isVirtualFrozen ? this.parent.getMovableContentTbody() : this.parent.getContentTable().querySelector(literals.tbody);\n }\n args.row = this.parent.createElement('tr', { className: 'e-row e-addedrow' });\n if (tbody.querySelector('.e-emptyrow')) {\n var emptyRow = tbody.querySelector('.e-emptyrow');\n emptyRow.parentNode.removeChild(emptyRow);\n if (isFrozenGrid && !isVirtualFrozen) {\n var moveTbody = this.parent.getContent().querySelector('.' + literals.movableContent).querySelector(literals.tbody);\n (moveTbody.firstElementChild).parentNode.removeChild(moveTbody.firstElementChild);\n if (this.parent.getFrozenMode() === literals.leftRight) {\n var frTbody_1 = this.parent.getContent().querySelector('.e-frozen-right-content').querySelector(literals.tbody);\n (frTbody_1.firstElementChild).parentNode.removeChild(frTbody_1.firstElementChild);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Top') {\n tbody.insertBefore(args.row, tbody.firstChild);\n }\n else {\n tbody.appendChild(args.row);\n }\n args.row.appendChild(this.getEditElement(elements, false, undefined, args, true));\n this.parent.editModule.checkLastRow(args.row, args);\n if (isFrozenGrid && !isVirtualFrozen) {\n var mEle = this.renderMovableform(args.row, args);\n if (this.parent.editSettings.newRowPosition === 'Top') {\n mTbody.insertBefore(mEle, mTbody.firstChild);\n }\n else {\n mTbody.appendChild(mEle);\n }\n args.row.querySelector('.e-normaledit').setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');\n mEle.querySelector('.e-normaledit').setAttribute('colspan', '' + (this.parent.getVisibleColumns().length - this.parent.getVisibleFrozenColumns()));\n if (frTbody) {\n var frEle = this.renderFrozenRightForm(args.row, args);\n if (this.parent.editSettings.newRowPosition === 'Top') {\n frTbody.insertBefore(frEle, frTbody.firstChild);\n }\n else {\n frTbody.appendChild(frEle);\n }\n var colSpan = this.parent.getVisibleFrozenColumns() - this.parent.getFrozenRightColumnsCount();\n args.row.querySelector('.e-normaledit').setAttribute('colspan', colSpan + '');\n frEle.querySelector('.e-normaledit').setAttribute('colspan', '' + this.parent.getFrozenRightColumnsCount());\n }\n if (this.parent.height === 'auto') {\n this.parent.notify(events.frozenHeight, {});\n }\n }\n };\n InlineEditRender.prototype.renderFrozenRightForm = function (ele, args) {\n var frEle = ele.cloneNode(true);\n var form = args.frozenRightForm = frEle.querySelector('form');\n if (this.parent.editSettings.template) {\n form.innerHTML = '';\n this.appendChildren(form, args.rowData, false);\n return frEle;\n }\n this.renderRightFrozen(ele, frEle);\n frEle.querySelector(literals.colGroup).innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-frozen-right-header').querySelector(literals.colGroup).innerHTML;\n return frEle;\n };\n InlineEditRender.prototype.renderMovableform = function (ele, args) {\n var mEle = ele.cloneNode(true);\n var form = args.movableForm = mEle.querySelector('form');\n if (this.parent.editSettings.template) {\n form.innerHTML = '';\n this.appendChildren(form, args.rowData, false);\n return mEle;\n }\n this.renderMovable(ele, mEle);\n mEle.querySelector(literals.colGroup).innerHTML = this.parent.getHeaderContent()\n .querySelector('.' + literals.movableHeader).querySelector(literals.colGroup).innerHTML;\n return mEle;\n };\n InlineEditRender.prototype.updateFreezeEdit = function (row, td) {\n td = td.concat([].slice.call(this.getFreezeRow(row).querySelectorAll('td.e-rowcell')));\n if (this.parent.getFrozenMode() === literals.leftRight) {\n td = td.concat([].slice.call(this.getFreezeRightRow(row).querySelectorAll('td.e-rowcell')));\n }\n return td;\n };\n InlineEditRender.prototype.getFreezeRightRow = function (row) {\n var idx = parseInt(row.getAttribute(literals.dataRowIndex), 10);\n var fCont = this.parent.getFrozenLeftContentTbody();\n var fHdr = this.parent.getFrozenHeaderTbody();\n var frHdr = this.parent.getFrozenRightHeaderTbody();\n var frCont = this.parent.getFrozenRightContentTbody();\n if (fCont.contains(row) || fHdr.contains(row)) {\n return this.parent.getFrozenRightRowByIndex(idx);\n }\n else if (frCont.contains(row) || frHdr.contains(row)) {\n return this.parent.getRowByIndex(idx);\n }\n return row;\n };\n InlineEditRender.prototype.getFreezeRow = function (row) {\n if (this.parent.isFrozenGrid()) {\n var idx = parseInt(row.getAttribute(literals.dataRowIndex), 10);\n var fCont = this.parent.getFrozenLeftContentTbody();\n var mCont = this.parent.getMovableContentTbody();\n var fHdr = this.parent.getFrozenHeaderTbody();\n var mHdr = this.parent.getMovableHeaderTbody();\n if (fCont.contains(row) || fHdr.contains(row)) {\n return this.parent.getMovableRowByIndex(idx);\n }\n else if (mCont.contains(row) || mHdr.contains(row)) {\n return this.parent.getRowByIndex(idx);\n }\n }\n return row;\n };\n InlineEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n var isCustomFormValidation = args.isCustomFormValidation;\n var isScroll = args.isScroll;\n if (!isScroll && (closest(args.row, '.' + literals.movableContent) || closest(args.row, '.' + literals.movableHeader))) {\n args.row = this.getFreezeRow(args.row);\n }\n if (closest(args.row, '.e-frozen-right-content') || closest(args.row, '.e-frozen-right-header')) {\n args.row = this.getFreezeRightRow(args.row);\n }\n var isVirtualFrozen = this.parent.isFrozenGrid() && this.parent.enableColumnVirtualization && isScroll;\n var tdElement = [].slice.call(args.row.querySelectorAll('td.e-rowcell'));\n args.row.innerHTML = '';\n if (!isVirtualFrozen && !isCustomFormValidation) {\n tdElement = this.updateFreezeEdit(args.row, tdElement);\n }\n args.row.appendChild(this.getEditElement(elements, true, tdElement, args, true));\n args.row.classList.add(literals.editedRow);\n this.parent.editModule.checkLastRow(args.row, args);\n if (!isVirtualFrozen && !isCustomFormValidation) {\n this.refreshFreezeEdit(args.row, args);\n }\n };\n InlineEditRender.prototype.refreshFreezeEdit = function (row, args) {\n var td = row.firstChild;\n if (this.parent.getVisibleFrozenColumns() && this.parent.editSettings.template) {\n td.querySelector(literals.colGroup).innerHTML = this.parent.getHeaderContent().querySelector('.' + literals.frozenHeader).\n querySelector(literals.colGroup).innerHTML;\n }\n var fCls;\n var cont;\n var idx = parseInt(row.getAttribute(literals.dataRowIndex), 10);\n if (this.parent.isFrozenGrid()) {\n if (idx < this.parent.frozenRows) {\n cont = this.parent.getHeaderContent();\n fCls = '.' + literals.frozenHeader;\n }\n else {\n cont = this.parent.getContent();\n fCls = '.' + literals.frozenContent;\n }\n var mTd = td.cloneNode(true);\n var frTd = td.cloneNode(true);\n var form = args.movableForm = mTd.querySelector('form');\n if (this.parent.editSettings.template) {\n this.refreshEditForm(form, args.rowData);\n }\n var fRows = void 0;\n var frRows = void 0;\n if (cont.querySelector(fCls).contains(row)) {\n fRows = this.parent.getMovableRowByIndex(idx);\n this.updateFrozenCont(fRows, td, mTd);\n if (this.parent.getFrozenMode() === literals.leftRight) {\n args.frozenRightForm = frTd.querySelector('form');\n this.refreshEditForm(args.frozenRightForm, args.rowData);\n frRows = this.parent.getFrozenRightRowByIndex(idx);\n this.updateFrozenRightCont(frRows, td, frTd);\n }\n }\n else {\n fRows = this.parent.getRowByIndex(idx);\n this.updateFrozenCont(fRows, mTd, td);\n if (this.parent.getFrozenMode() === literals.leftRight) {\n args.frozenRightForm = frTd.querySelector('form');\n this.refreshEditForm(args.frozenRightForm, args.rowData);\n frRows = this.parent.getFrozenRightRowByIndex(idx);\n this.updateFrozenRightCont(frRows, frTd, td);\n }\n }\n fRows.appendChild(mTd);\n fRows.classList.add(literals.editedRow);\n if (this.parent.getFrozenMode() === literals.leftRight) {\n frRows.appendChild(frTd);\n frRows.classList.add(literals.editedRow);\n alignFrozenEditForm(args.frozenRightForm.querySelector('td:not(.e-hide)'), args.form.querySelector('td:not(.e-hide)'));\n }\n alignFrozenEditForm(args.movableForm.querySelector('td:not(.e-hide)'), args.form.querySelector('td:not(.e-hide)'));\n }\n };\n InlineEditRender.prototype.refreshEditForm = function (form, data) {\n if (this.parent.editSettings.template) {\n form.innerHTML = '';\n this.appendChildren(form, data, false);\n }\n };\n InlineEditRender.prototype.updateFrozenRightCont = function (row, ele, frEle) {\n row.innerHTML = '';\n this.renderRightFrozen(ele, frEle);\n frEle.querySelector(literals.colGroup).innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-frozen-right-header').querySelector(literals.colGroup).innerHTML;\n ele.setAttribute('colspan', this.parent.getVisibleFrozenColumns() - this.parent.getFrozenRightColumnsCount() + '');\n frEle.setAttribute('colspan', this.parent.getFrozenRightColumnsCount() + '');\n };\n InlineEditRender.prototype.updateFrozenCont = function (row, ele, mEle) {\n row.innerHTML = '';\n this.renderMovable(ele, mEle);\n mEle.querySelector(literals.colGroup).innerHTML = this.parent.getHeaderContent()\n .querySelector('.' + literals.movableHeader).querySelector(literals.colGroup).innerHTML;\n ele.setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');\n mEle.setAttribute('colspan', this.parent.getCurrentVisibleColumns(this.parent.enableColumnVirtualization).length - this.parent.getVisibleFrozenColumns() + '');\n };\n InlineEditRender.prototype.renderRightFrozen = function (ele, frEle) {\n frEle.querySelector('tr').innerHTML = '';\n var cols = this.parent.getColumns();\n var k = 0;\n for (var i = 0; i < cols.length; i++, k++) {\n if (cols[parseInt(i.toString(), 10)].getFreezeTableName() === literals.frozenRight) {\n var index = k - this.parent.getMovableColumnsCount();\n frEle.querySelector('tr').appendChild(ele.querySelector('tr').removeChild(ele.querySelector('tr').children[parseInt(index.toString(), 10)]));\n k--;\n }\n }\n };\n InlineEditRender.prototype.renderMovable = function (ele, mEle) {\n mEle.querySelector('tr').innerHTML = '';\n var cols = this.parent.getColumns();\n var k = this.parent.isRowDragable() ? 1 : 0;\n for (var i = 0; i < cols.length; i++, k++) {\n if (cols[parseInt(i.toString(), 10)].getFreezeTableName() === 'movable') {\n mEle.querySelector('tr').appendChild(ele.querySelector('tr')\n .removeChild(ele.querySelector('tr').children[parseInt(k.toString(), 10)]));\n k--;\n }\n }\n };\n // eslint-disable-next-line max-len\n InlineEditRender.prototype.getEditElement = function (elements, isEdit, tdElement, args, isFrozen) {\n var gObj = this.parent;\n var gLen = 0;\n var isDetail = !isNullOrUndefined(gObj.detailTemplate) || !isNullOrUndefined(gObj.childGrid) ? 1 : 0;\n if (gObj.allowGrouping) {\n gLen = gObj.groupSettings.columns.length;\n }\n var td = this.parent.createElement('td', {\n className: 'e-editcell e-normaledit',\n attrs: {\n colspan: (gObj.getCurrentVisibleColumns(this.parent.enableColumnVirtualization).length - gObj.getVisibleFrozenColumns()\n + this.parent.getIndentCount()).toString()\n }\n });\n var form = args.form =\n this.parent.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n if (this.parent.editSettings.template) {\n this.appendChildren(form, args.rowData, isFrozen);\n td.appendChild(form);\n return td;\n }\n var table = this.parent.createElement('table', { className: 'e-table e-inline-edit', attrs: { cellspacing: '0.25', role: 'grid' } });\n table.appendChild(gObj.getContentTable().querySelector(literals.colGroup).cloneNode(true));\n var tbody = this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n var tr = this.parent.createElement('tr');\n var i = 0;\n if (isDetail) {\n tr.insertBefore(this.parent.createElement('td', { className: 'e-detailrowcollapse' }), tr.firstChild);\n }\n if (gObj.isRowDragable()) {\n tr.appendChild(this.parent.createElement('td', { className: 'e-dragindentcell' }));\n }\n while (i < gLen) {\n tr.appendChild(this.parent.createElement('td', { className: 'e-indentcell' }));\n i++;\n }\n var m = 0;\n i = 0;\n var isVirtualFrozen = gObj.isFrozenGrid() && gObj.enableColumnVirtualization && args.isScroll;\n var cols = args.isCustomFormValidation ? this.parent.columnModel : gObj.getColumns();\n while ((isEdit && m < tdElement.length && i < cols.length) || i < cols.length) {\n var span = isEdit ? tdElement[parseInt(m.toString(), 10)].getAttribute('colspan') : null;\n var col = cols[parseInt(i.toString(), 10)];\n if ((isVirtualFrozen && col.getFreezeTableName() !== 'movable')\n || (args.isCustomFormValidation && (col.commands || col.commandsTemplate || !col.field))) {\n i++;\n continue;\n }\n var td_1 = this.parent.createElement('td', {\n className: literals.rowCell, attrs: { style: 'text-align:' + (col.textAlign ? col.textAlign : ''), 'colspan': span ? span : '' }\n });\n if (col.visible) {\n td_1.appendChild(elements[col.uid]);\n if (this.parent.rowRenderingMode === 'Vertical') {\n setStyleAndAttributes(td_1, { 'data-cell': col.headerText });\n if (i === 0) {\n td_1.classList.add('e-responsive-editcell');\n }\n }\n if (col.editType === 'booleanedit') {\n td_1.classList.add('e-boolcell');\n }\n else if (col.commands || col.commandsTemplate) {\n addClass([td_1], 'e-unboundcell');\n }\n }\n else {\n td_1.classList.add('e-hide');\n }\n tr.appendChild(td_1);\n i = span ? i + parseInt(span, 10) : i + 1;\n m++;\n }\n tbody.appendChild(tr);\n table.appendChild(tbody);\n form.appendChild(table);\n td.appendChild(form);\n return td;\n };\n InlineEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n InlineEditRender.prototype.appendChildren = function (form, data, isFrozen) {\n var _this = this;\n var dummyData = extend({}, data, { isAdd: !this.isEdit, isFrozen: isFrozen }, true);\n var editTemplateID = this.parent.element.id + 'editSettingsTemplate';\n if (this.parent.isReact && typeof (this.parent.editSettings.template) !== 'string') {\n this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID, null, null, form);\n this.parent.renderTemplates();\n }\n else {\n appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID));\n }\n // eslint-disable-next-line\n var setRules = function () {\n var cols = _this.parent.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].validationRules) {\n _this.parent.editModule.formObj.rules[cols[parseInt(i.toString(), 10)].field] =\n cols[parseInt(i.toString(), 10)].validationRules;\n }\n }\n };\n };\n return InlineEditRender;\n}());\nexport { InlineEditRender };\n","import { classList } from '@syncfusion/ej2-base';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar BatchEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IGrid} parent - specifies the IGrid\n */\n function BatchEditRender(parent) {\n this.parent = parent;\n }\n BatchEditRender.prototype.update = function (elements, args) {\n if (this.parent.isReact && args.columnObject && args.columnObject.template) {\n var parentRow = args.cell.parentElement;\n var newTd = args.cell.cloneNode(true);\n parentRow.insertBefore(newTd, args.cell);\n newTd.focus();\n args.cell.remove();\n args.cell = newTd;\n }\n args.cell.innerHTML = '';\n args.cell.appendChild(this.getEditElement(elements, args));\n args.cell.classList.add('e-editedbatchcell');\n classList(args.row, [literals.editedRow, 'e-batchrow'], []);\n };\n BatchEditRender.prototype.getEditElement = function (elements, args) {\n var gObj = this.parent;\n var form = this.parent\n .createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n form.appendChild(elements[args.columnObject.uid]);\n if (args.columnObject.editType === 'booleanedit') {\n args.cell.classList.add('e-boolcell');\n }\n if (!args.columnObject.editType) {\n args.cell.classList.add('e-inputbox');\n }\n return form;\n };\n BatchEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n return BatchEditRender;\n}());\nexport { BatchEditRender };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { remove, extend, updateBlazorTemplate, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { appendChildren, applyBiggerTheme, addBiggerDialog } from '../base/util';\nimport { ResponsiveDialogRenderer } from './responsive-dialog-renderer';\nimport { ResponsiveDialogAction } from '../base/enum';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar DialogEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n */\n function DialogEditRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.dialogDestroy, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n DialogEditRender.prototype.setLocaleObj = function () {\n this.l10n = this.serviceLocator.getService('localization');\n };\n DialogEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.createDialogHeader = function (args) {\n var _this = this;\n var gObj = this.parent;\n var header;\n if (this.parent.enableAdaptiveUI) {\n var responsiveDlgRenderer = new ResponsiveDialogRenderer(this.parent, this.serviceLocator);\n responsiveDlgRenderer.action = this.isEdit ? ResponsiveDialogAction.isEdit : ResponsiveDialogAction.isAdd;\n return responsiveDlgRenderer.renderResponsiveHeader(undefined, args);\n }\n else {\n if (gObj.editSettings.headerTemplate) {\n header = initializeCSPTemplate(function () {\n return _this.getDialogEditTemplateElement('HeaderTemplate', args).outerHTML;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n });\n }\n else if (this.isEdit) {\n header = this.l10n.getConstant('EditFormTitle') + args.primaryKeyValue[0];\n }\n else {\n header = this.l10n.getConstant('AddFormTitle');\n }\n }\n return header;\n };\n DialogEditRender.prototype.createDialog = function (elements, args) {\n var _this = this;\n var gObj = this.parent;\n this.dialog = this.parent.createElement('div', { id: gObj.element.id + '_dialogEdit_wrapper', styles: 'width: auto' });\n if (gObj.enableAdaptiveUI) {\n this.dialog.classList.add('e-responsive-dialog');\n }\n gObj.element.appendChild(this.dialog);\n this.setLocaleObj();\n this.dialog.setAttribute('aria-label', this.l10n.getConstant('DialogEdit'));\n // let position: PositionDataModel = this.parent.element.getBoundingClientRect().height < 400 ?\n // { X: 'center', Y: 'top' } : { X: 'center', Y: 'center' };\n this.dialogObj = new Dialog(extend({\n header: this.createDialogHeader(args), isModal: true, visible: true,\n cssClass: this.parent.cssClass ? 'e-edit-dialog' + ' ' + this.parent.cssClass : 'e-edit-dialog',\n content: this.getEditElement(elements, args),\n showCloseIcon: true,\n allowDragging: true,\n // position: position,\n close: this.dialogClose.bind(this),\n created: this.dialogCreated.bind(this),\n closeOnEscape: true, width: gObj.editSettings.template ? 'auto' : '330px',\n target: args.target ? args.target : document.body, animationSettings: { effect: 'None' },\n footerTemplate: gObj.editSettings.footerTemplate ? initializeCSPTemplate(function () {\n return _this.getDialogEditTemplateElement('FooterTemplate', args).outerHTML;\n }) : null,\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: { content: this.l10n.getConstant('SaveButton'),\n cssClass: this.parent.cssClass ? 'e-primary' + ' ' + this.parent.cssClass : 'e-primary',\n isPrimary: true }\n },\n { click: this.btnClick.bind(this),\n buttonModel: {\n cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n content: this.l10n.getConstant('CancelButton')\n } }]\n }, gObj.editSettings.dialog ? (gObj.editSettings.dialog.params || {}) : {}));\n args.dialog = this.dialogObj;\n var isStringTemplate = 'isStringTemplate';\n this.dialogObj[\"\" + isStringTemplate] = true;\n this.renderResponsiveDialog();\n this.dialogObj.appendTo(this.dialog);\n applyBiggerTheme(this.parent.element, this.dialogObj.element.parentElement);\n if (gObj.enableAdaptiveUI) {\n this.dialogObj.show(true);\n }\n };\n DialogEditRender.prototype.dialogCreated = function () {\n addBiggerDialog(this.parent);\n };\n DialogEditRender.prototype.renderResponsiveDialog = function () {\n var _this = this;\n if (this.parent.enableAdaptiveUI) {\n if (this.parent.adaptiveDlgTarget) {\n this.dialogObj.target = this.parent.adaptiveDlgTarget;\n }\n this.dialogObj.buttons = [{}];\n this.dialogObj.showCloseIcon = true;\n this.dialogObj.visible = false;\n this.dialogObj.width = '100%';\n this.dialogObj.open = function () {\n _this.dialogObj.element.style.maxHeight = '100%';\n };\n }\n };\n DialogEditRender.prototype.btnClick = function (e) {\n if (this.l10n.getConstant('CancelButton').toLowerCase() === e.target.innerText.trim().toLowerCase()) {\n this.dialogClose();\n }\n else {\n this.parent.endEdit();\n }\n };\n DialogEditRender.prototype.dialogClose = function () {\n this.parent.closeEdit();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DialogEditRender.prototype.destroy = function (args) {\n var dialogEditTemplates = ['template', 'headerTemplate', 'footerTemplate'];\n for (var i = 0; i < dialogEditTemplates.length; i++) {\n if (this.parent.editSettings[dialogEditTemplates[parseInt(i.toString(), 10)]]) {\n var templateName = dialogEditTemplates[parseInt(i.toString(), 10)].charAt(0).toUpperCase()\n + dialogEditTemplates[parseInt(i.toString(), 10)].slice(1);\n var editTemplateID = this.parent.element.id + 'editSettings' + templateName;\n updateBlazorTemplate(editTemplateID, templateName, this.parent.editSettings);\n }\n }\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.parent.notify(events.toolbarRefresh, {});\n if (this.dialog && !this.dialogObj.isDestroyed) {\n this.dialogObj.destroy();\n remove(this.dialog);\n }\n };\n DialogEditRender.prototype.getDialogEditTemplateElement = function (dialogTemp, args) {\n var tempDiv = this.parent.createElement('div', { className: 'e-dialog' + dialogTemp });\n var dummyData = extend({}, args.rowData, { isAdd: !this.isEdit }, true);\n var templateID = this.parent.element.id + 'editSettings' + dialogTemp;\n appendChildren(tempDiv, (dialogTemp === 'HeaderTemplate' ? this.parent.getEditHeaderTemplate() :\n this.parent.getEditFooterTemplate())(dummyData, this.parent, 'editSettings' + dialogTemp, templateID));\n updateBlazorTemplate(templateID, dialogTemp, this.parent.editSettings);\n return tempDiv;\n };\n DialogEditRender.prototype.getEditElement = function (elements, args) {\n var _this = this;\n var gObj = this.parent;\n var div = this.parent.createElement('div', { className: this.isEdit ? literals.editedRow : 'e-insertedrow' });\n var form = args.form =\n this.parent.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n if (this.parent.editSettings.template) {\n var editTemplateID = this.parent.element.id + 'editSettingsTemplate';\n var dummyData = extend({}, args.rowData, { isAdd: !this.isEdit }, true);\n var isReactCompiler = this.parent.isReact && typeof (this.parent.editSettings.template) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID, null, null, form);\n this.parent.renderTemplates();\n }\n else {\n appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID));\n }\n var setRules = function () {\n var columns = _this.parent.getColumns();\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].validationRules) {\n _this.parent.editModule.formObj.rules[columns[parseInt(i.toString(), 10)].field] =\n columns[parseInt(i.toString(), 10)].validationRules;\n }\n }\n };\n updateBlazorTemplate(editTemplateID, 'Template', this.parent.editSettings, true, setRules);\n div.appendChild(form);\n return div;\n }\n var table = this.parent.createElement('table', { className: literals.table, attrs: { cellspacing: '6px', role: 'grid' } });\n var tbody = this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n var cols = gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (this.parent.editModule.checkColumnIsGrouped(cols[parseInt(i.toString(), 10)]) || cols[parseInt(i.toString(), 10)].commands\n || cols[parseInt(i.toString(), 10)].commandsTemplate || cols[parseInt(i.toString(), 10)].type === 'checkbox') {\n continue;\n }\n var tr = this.parent.createElement('tr');\n var dataCell = this.parent.createElement('td', {\n className: literals.rowCell, attrs: {\n style: 'text-align:' + (this.parent.enableRtl ? 'right' : 'left') + ';width:190px'\n }\n });\n elements[cols[parseInt(i.toString(), 10)].uid].classList.remove('e-input');\n dataCell.appendChild(elements[cols[parseInt(i.toString(), 10)].uid]);\n tr.appendChild(dataCell);\n tbody.appendChild(tr);\n }\n table.appendChild(tbody);\n form.appendChild(table);\n div.appendChild(form);\n return div;\n };\n DialogEditRender.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.dialogDestroy, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return DialogEditRender;\n}());\nexport { DialogEditRender };\n","import { isNullOrUndefined, closest, extend } from '@syncfusion/ej2-base';\nimport { InlineEditRender } from './inline-edit-renderer';\nimport { BatchEditRender } from './batch-edit-renderer';\nimport { DialogEditRender } from './dialog-edit-renderer';\nimport { attributes, classList, select } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { getComplexFieldID, getObject, appendChildren, parentsUntil, extendObjWithFn, padZero } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar EditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IGrid} parent -specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n */\n function EditRender(parent, serviceLocator) {\n //Internal variables\n this.editType = {\n 'Inline': InlineEditRender,\n 'Normal': InlineEditRender, 'Batch': BatchEditRender, 'Dialog': DialogEditRender\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = new this.editType[this.parent.editSettings.mode](parent, serviceLocator);\n this.focus = serviceLocator.getService('focus');\n }\n EditRender.prototype.addNew = function (args) {\n this.renderer.addNew(this.getEditElements(args), args);\n this.convertWidget(args);\n };\n EditRender.prototype.update = function (args) {\n this.renderer.update(this.getEditElements(args), args);\n var isCustomFormValidation = args.isCustomFormValidation;\n if (!isCustomFormValidation) {\n this.parent.notify(events.beforeStartEdit, args);\n this.convertWidget(args);\n }\n };\n EditRender.prototype.convertWidget = function (args) {\n var gObj = this.parent;\n var isFocused;\n var cell;\n var value;\n var fForm;\n var frForm;\n var frzCols = gObj.isFrozenGrid();\n var index = gObj.getFrozenMode() === 'Right' && gObj.editSettings.mode === 'Normal' ? 1 : 0;\n var form = gObj.editSettings.mode === 'Dialog' ?\n select('#' + gObj.element.id + '_dialogEdit_wrapper .e-gridform', document) :\n gObj.element.getElementsByClassName('e-gridform')[parseInt(index.toString(), 10)];\n var isVirtualFrozen = frzCols && this.parent.enableColumnVirtualization && args.isScroll;\n if (frzCols && gObj.editSettings.mode === 'Normal') {\n var rowIndex = parseInt(args.row.getAttribute(literals.dataRowIndex), 10);\n if (gObj.frozenRows && ((args.requestType === 'add' && gObj.editSettings.newRowPosition === 'Top')\n || rowIndex < gObj.frozenRows)) {\n fForm = gObj.element.querySelector('.' + literals.movableHeader).querySelector('.e-gridform');\n if (this.parent.getFrozenMode() === literals.leftRight) {\n frForm = args.frozenRightForm;\n }\n }\n else {\n fForm = gObj.element.querySelector('.' + literals.movableContent).querySelector('.e-gridform');\n if (this.parent.getFrozenMode() === literals.leftRight) {\n frForm = args.frozenRightForm;\n }\n }\n }\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n if (isVirtualFrozen && col.getFreezeTableName() !== 'movable') {\n continue;\n }\n if (this.parent.editSettings.template && !isNullOrUndefined(col.field)) {\n var cellArgs = extend({}, args);\n cellArgs.element = form.querySelector('[name=' + getComplexFieldID(col.field) + ']');\n if (isNullOrUndefined(cellArgs.element) && frzCols) {\n cellArgs.element = fForm.querySelector('[name=' + getComplexFieldID(col.field) + ']');\n }\n if (typeof col.edit.write === 'string') {\n getObject(col.edit.write, window)(cellArgs);\n }\n else {\n col.edit.write(cellArgs);\n }\n continue;\n }\n if (this.parent.editModule.checkColumnIsGrouped(col) || col.commands) {\n continue;\n }\n // eslint-disable-next-line\n value = (col.valueAccessor(col.field, args.rowData, col));\n if (fForm && col.getFreezeTableName() === 'movable' && gObj.editSettings.mode === 'Normal') {\n cell = fForm.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n else if (frForm && col.getFreezeTableName() === literals.frozenRight && gObj.editSettings.mode === 'Normal') {\n cell = frForm.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n else {\n cell = form.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n var temp = col.edit.write;\n if (!isNullOrUndefined(cell)) {\n if (typeof temp === 'string') {\n temp = getObject(temp, window);\n temp({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getObject(col.field, args.foreignKeyData)\n });\n }\n else {\n col.edit.write({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getObject(col.field, args.foreignKeyData)\n });\n }\n if (!isFocused && !cell.getAttribute('disabled') && !parentsUntil(cell, 'e-checkbox-disabled')) {\n this.focusElement(cell, args.type);\n isFocused = true;\n }\n }\n }\n if (frzCols && !this.parent.allowTextWrap && ((args.requestType === 'add') || args.requestType === 'beginEdit')\n && this.parent.editSettings.mode !== 'Dialog' && !isNullOrUndefined(form) && !isNullOrUndefined(fForm)) {\n var mTdElement = (fForm.querySelector('tr').children[0]);\n var fTdElement = (form.querySelector('tr').children[0]);\n if (fTdElement.offsetHeight > mTdElement.offsetHeight) {\n mTdElement.style.height = fTdElement.offsetHeight + 'px';\n if (frForm) {\n var frTdElement = fForm.querySelector('tr').children[0];\n frTdElement.style.height = fTdElement.offsetHeight + 'px';\n }\n }\n else {\n fTdElement.style.height = mTdElement.offsetHeight + 'px';\n if (frForm) {\n var frTdElement = fForm.querySelector('tr').children[0];\n frTdElement.style.height = mTdElement.offsetHeight + 'px';\n }\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EditRender.prototype.focusElement = function (elem, type) {\n var chkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(chkBox) && chkBox.nextElementSibling) {\n chkBox.nextElementSibling.classList.add('e-focus');\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.focus.onClick({ target: closest(elem, 'td') }, true);\n }\n else {\n var isFocus = this.parent.enableVirtualization && this.parent.editSettings.mode === 'Normal' ? false : true;\n if (isFocus || (this.parent.enableVirtualization && this.parent.editSettings.newRowPosition === 'Bottom'\n && parentsUntil(elem, literals.addedRow))) {\n elem.focus();\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n elem.focus({ preventScroll: true });\n }\n }\n if (elem.classList.contains('e-defaultcell')) {\n elem.setSelectionRange(elem.value.length, elem.value.length);\n }\n };\n EditRender.prototype.getEditElements = function (args) {\n var gObj = this.parent;\n var elements = {};\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n if (args.isCustomFormValidation) {\n cols = this.parent.columnModel;\n }\n if (this.parent.editSettings.template) {\n return {};\n }\n var isVirtualFrozen = gObj.isFrozenGrid() && gObj.enableColumnVirtualization && args.isScroll;\n for (var i = 0, len = cols.length; i < len; i++) {\n var col = cols[parseInt(i.toString(), 10)];\n if (this.parent.editModule.checkColumnIsGrouped(col) || (isVirtualFrozen && cols[parseInt(i.toString(), 10)].getFreezeTableName() !== 'movable')\n || (args.isCustomFormValidation && (col.commands || col.commandsTemplate || !col.field))) {\n continue;\n }\n if (col.commands || col.commandsTemplate) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var model = new RowModelGenerator(this.parent);\n var cellRenderer = cellRendererFact.getCellRenderer(CellType.CommandColumn);\n var cells = model.generateRows(args.rowData)[0].cells;\n var cell = cells.filter(function (cell) { return cell.rowID; });\n var td = cellRenderer.render(cell[parseInt(i.toString(), 10)], args.rowData, { 'index': args.row ? args.row.getAttribute(literals.dataRowIndex) : 0 }, this.parent.enableVirtualization);\n var div = td.firstElementChild;\n div.setAttribute('textAlign', td.getAttribute('textAlign'));\n elements[col.uid] = div;\n continue;\n }\n if (col.type === 'dateonly' && args.rowData[col.field] instanceof Date) {\n var cellValue = args.rowData[col.field];\n args.rowData[col.field] = cellValue.getFullYear() + '-' + padZero(cellValue.getMonth() + 1) + '-' + padZero(cellValue.getDate());\n }\n var value = (col.valueAccessor(col.field, args.rowData, col));\n var tArgs = { column: col, value: value, type: args.requestType, data: args.rowData };\n var temp = col.edit.create;\n var input = void 0;\n if (col.editTemplate) {\n input = this.parent.createElement('span', { attrs: { 'e-mappinguid': col.uid } });\n var tempID = this.parent.element.id + col.uid + 'editTemplate';\n var tempData = extendObjWithFn({}, args.rowData, { column: col });\n var isReactCompiler = this.parent.isReact && typeof (col.editTemplate) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n col.getEditTemplate()(extend({ 'index': args.rowIndex }, tempData), this.parent, 'editTemplate', tempID, null, null, input);\n this.parent.renderTemplates();\n }\n else {\n var template = col.getEditTemplate()(extend({ 'index': args.rowIndex }, tempData), this.parent, 'editTemplate', tempID);\n appendChildren(input, template);\n }\n }\n else {\n if (typeof temp === 'string') {\n temp = getObject(temp, window);\n input = temp(tArgs);\n }\n else {\n input = col.edit.create(tArgs);\n }\n if (typeof input === 'string') {\n var div = this.parent.createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n var isInput = input.tagName !== 'input' && input.querySelectorAll('input').length;\n var complexFieldName = getComplexFieldID(col.field);\n attributes(isInput ? input.querySelector('input') : input, {\n name: complexFieldName, 'e-mappinguid': col.uid,\n id: gObj.element.id + complexFieldName\n });\n classList(input, ['e-input', 'e-field'], []);\n if (col.textAlign === 'Right') {\n input.classList.add('e-ralign');\n }\n if ((col.isPrimaryKey || col.isIdentity) && args.requestType === 'beginEdit' ||\n (col.isIdentity && args.requestType === 'add')) { // already disabled in cell plugins\n input.setAttribute('disabled', '');\n }\n }\n elements[col.uid] = input;\n }\n return elements;\n };\n EditRender.prototype.destroy = function () {\n this.renderer.removeEventListener();\n };\n return EditRender;\n}());\nexport { EditRender };\n","import { createEditElement } from '../base/util';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n *\n * @hidden\n */\nvar EditCellBase = /** @class */ (function () {\n function EditCellBase(parent) {\n this.parent = parent;\n }\n EditCellBase.prototype.create = function (args) {\n return createEditElement(this.parent, args.column, 'e-field', { type: 'text' });\n };\n EditCellBase.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n EditCellBase.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n if (this.removeEventHandler) {\n this.removeEventHandler();\n }\n this.obj.destroy();\n }\n };\n return EditCellBase;\n}());\nexport { EditCellBase };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { extend } from '@syncfusion/ej2-base';\nimport { isEditable, addRemoveActiveClasses, createEditElement, getObject } from '../base/util';\nimport * as literals from '../base/string-literals';\nimport { EditCellBase } from './edit-cell-base';\n/**\n * `BooleanEditCell` is used to handle boolean cell type editing.\n *\n * @hidden\n */\nvar BooleanEditCell = /** @class */ (function (_super) {\n __extends(BooleanEditCell, _super);\n function BooleanEditCell() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.activeClasses = ['e-selectionbackground', 'e-active'];\n return _this;\n }\n BooleanEditCell.prototype.create = function (args) {\n var col = args.column;\n var classNames = 'e-field e-boolcell';\n if (col.type === 'checkbox') {\n classNames = 'e-field e-boolcell e-edit-checkselect';\n }\n this.removeEventHandler = this.removeEventListener;\n return createEditElement(this.parent, args.column, classNames, { type: 'checkbox', value: args.value });\n };\n BooleanEditCell.prototype.read = function (element) {\n return element.checked;\n };\n BooleanEditCell.prototype.write = function (args) {\n var selectChkBox;\n var chkState;\n if (!isNullOrUndefined(args.row)) {\n selectChkBox = args.row.querySelector('.e-edit-checkselect');\n }\n if (getObject(args.column.field, args.rowData)) {\n chkState = JSON.parse(getObject(args.column.field, args.rowData).toString().toLowerCase());\n }\n if (!isNullOrUndefined(selectChkBox) && args.column.type === 'checkbox') {\n this.editType = this.parent.editSettings.mode;\n this.editRow = args.row;\n if (args.requestType !== 'add') {\n var row = this.parent.getRowObjectFromUID(args.row.getAttribute('data-uid'));\n chkState = row ? row.isSelected : false;\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(args.row.getElementsByClassName(literals.rowCell)), chkState].concat(this.activeClasses));\n }\n this.obj = new CheckBox(extend({\n label: this.parent.editSettings.mode !== 'Dialog' ? ' ' : args.column.headerText,\n checked: chkState,\n disabled: !isEditable(args.column, args.requestType, args.element), enableRtl: this.parent.enableRtl,\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n }, args.column.edit.params));\n this.addEventListener();\n this.obj.appendTo(args.element);\n };\n BooleanEditCell.prototype.addEventListener = function () {\n this.cbChange = this.checkBoxChange.bind(this);\n this.obj.addEventListener(literals.change, this.cbChange);\n };\n BooleanEditCell.prototype.removeEventListener = function () {\n if (this.obj.isDestroyed) {\n return;\n }\n this.obj.removeEventListener(literals.change, this.cbChange);\n };\n BooleanEditCell.prototype.checkBoxChange = function (args) {\n if (this.editRow && this.editType !== 'Dialog') {\n var add = false;\n if (!args.checked) {\n this.editRow.removeAttribute('aria-selected');\n }\n else {\n add = true;\n this.editRow.setAttribute('aria-selected', add.toString());\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(this.editRow.getElementsByClassName(literals.rowCell)), add].concat(this.activeClasses));\n }\n };\n return BooleanEditCell;\n}(EditCellBase));\nexport { BooleanEditCell };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend, isNullOrUndefined, select } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Query, DataManager, DataUtil, Predicate } from '@syncfusion/ej2-data';\nimport { isEditable, getComplexFieldID, getObject } from '../base/util';\nimport { parentsUntil } from '../base/util';\nimport { EditCellBase } from './edit-cell-base';\nimport * as literals from '../base/string-literals';\nimport * as events from '../base/constant';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n *\n * @hidden\n */\nvar DropDownEditCell = /** @class */ (function (_super) {\n __extends(DropDownEditCell, _super);\n function DropDownEditCell(parent) {\n var _this = \n //constructor\n _super.call(this) || this;\n _this.parent = parent;\n _this.flag = false;\n _this.removeEventHandler = _this.removeEventListener;\n return _this;\n }\n DropDownEditCell.prototype.write = function (args) {\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.column = args.column;\n var pred = new Predicate(args.column.field, 'notequal', null, true, false);\n var params = {};\n if (args.column.edit.params) {\n var keys = Object.keys(args.column.edit.params);\n for (var i = 0; i < keys.length; i++) {\n params[keys[parseInt(i.toString(), 10)]] = keys[parseInt(i.toString(), 10)] === 'query' ?\n args.column.edit.params[keys[parseInt(i.toString(), 10)]].clone() :\n args.column.edit.params[keys[parseInt(i.toString(), 10)]];\n }\n }\n this.obj = new DropDownList(extend({\n dataSource: this.parent.dataSource instanceof DataManager ?\n this.parent.dataSource : new DataManager(this.parent.dataSource),\n query: new Query().where(pred).select(args.column.field), enabled: isEditable(args.column, args.requestType, args.element),\n fields: { value: args.column.field },\n value: getObject(args.column.field, args.rowData),\n enableRtl: this.parent.enableRtl,\n placeholder: isInline ? '' : args.column.headerText, popupHeight: '200px',\n floatLabelType: isInline ? 'Never' : 'Always',\n sortOrder: 'Ascending',\n cssClass: this.parent.cssClass ? this.parent.cssClass : null,\n close: this.dropDownClose.bind(this)\n }, params));\n if (this.parent.enableVirtualization) {\n if (params.dataSource) {\n this.obj.dataSource = params.dataSource;\n }\n else {\n this.obj.dataSource = args.column.isForeignColumn() ? [args.foreignKeyData[0]] : [args.rowData];\n }\n }\n this.addEventListener();\n this.obj.query.params = this.parent.query.params;\n this.obj.appendTo(args.element);\n /* tslint:disable-next-line:no-any */\n args.element.setAttribute('name', getComplexFieldID(args.column.field));\n };\n DropDownEditCell.prototype.dropDownClose = function (args) {\n if (args.event && args.event.action === 'escape') {\n this.parent.editModule.editCellDialogClose = true;\n }\n };\n DropDownEditCell.prototype.addEventListener = function () {\n this.ddCreated = this.dropdownCreated.bind(this);\n this.ddOpen = this.dropDownOpen.bind(this);\n this.ddBeforeOpen = this.dropdownBeforeOpen.bind(this);\n this.ddComplete = this.ddActionComplete.bind(this);\n this.obj.addEventListener(literals.create, this.ddCreated);\n this.obj.addEventListener(literals['open'], this.ddOpen);\n this.obj.addEventListener(literals.beforeOpen, this.ddBeforeOpen);\n this.obj.addEventListener(events.actionComplete, this.ddComplete);\n };\n DropDownEditCell.prototype.removeEventListener = function () {\n if (this.obj.isDestroyed) {\n return;\n }\n this.obj.removeEventListener(literals.create, this.ddCreated);\n this.obj.removeEventListener(literals['open'], this.ddOpen);\n this.obj.removeEventListener(literals.beforeOpen, this.ddBeforeOpen);\n this.obj.removeEventListener(events.actionComplete, this.ddComplete);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownEditCell.prototype.dropdownCreated = function (e) {\n this.flag = true;\n };\n DropDownEditCell.prototype.dropdownBeforeOpen = function () {\n if (this.parent.enableVirtualization) {\n if (this.column.edit.params && this.column.edit.params.dataSource) {\n this.obj.dataSource = this.column.edit.params.dataSource;\n }\n else {\n this.obj.dataSource = !this.column.isForeignColumn() ? (this.parent.dataSource instanceof DataManager ?\n this.parent.dataSource : new DataManager(this.parent.dataSource))\n : this.column.dataSource instanceof DataManager ?\n this.column.dataSource : new DataManager(this.column.dataSource);\n }\n }\n };\n DropDownEditCell.prototype.ddActionComplete = function (e) {\n e.result = DataUtil.distinct(e.result, this.obj.fields.value, true);\n if (this.flag && this.column.dataSource && !(this.column.edit.params &&\n this.column.edit.params.ddEditedData)) {\n if ('result' in this.column.dataSource) {\n this.column.dataSource.result = e.result;\n }\n else if (this.column.dataSource instanceof DataManager) {\n this.column.dataSource.dataSource.json = e.result;\n }\n }\n this.flag = false;\n };\n DropDownEditCell.prototype.dropDownOpen = function (args) {\n var dlgElement = parentsUntil(this.obj.element, 'e-dialog');\n if (this.parent.editSettings.mode === 'Dialog' && !isNullOrUndefined(dlgElement)) {\n var dlgObj = select('#' + dlgElement.id, document).ej2_instances[0];\n args.popup.element.style.zIndex = (dlgObj.zIndex + 1).toString();\n }\n };\n return DropDownEditCell;\n}(EditCellBase));\nexport { DropDownEditCell };\n","import { extend, Internationalization } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { isEditable, getComplexFieldID, getObject, createEditElement } from '../base/util';\n/**\n * `NumericEditCell` is used to handle numeric cell type editing.\n *\n * @hidden\n */\nvar NumericEditCell = /** @class */ (function () {\n function NumericEditCell(parent) {\n this.parent = parent;\n }\n NumericEditCell.prototype.keyEventHandler = function (args) {\n if (args.keyCode === 13 || args.keyCode === 9) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent('change', false, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dispatchEvent(evt);\n }\n };\n NumericEditCell.prototype.create = function (args) {\n this.instances = new Internationalization(this.parent.locale);\n return createEditElement(this.parent, args.column, 'e-field', {});\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericEditCell.prototype.read = function (element) {\n return this.obj.value;\n };\n NumericEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.obj = new NumericTextBox(extend({\n value: parseFloat(getObject(args.column.field, args.rowData)),\n enableRtl: this.parent.enableRtl,\n placeholder: isInline ? '' : args.column.headerText,\n enabled: isEditable(args.column, args.requestType, args.element),\n floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n locale: this.parent.locale,\n cssClass: this.parent.cssClass ? this.parent.cssClass : null\n }, col.edit.params));\n args.element.setAttribute('name', getComplexFieldID(args.column.field));\n this.obj.appendTo(args.element);\n this.obj.element.addEventListener('keydown', this.keyEventHandler);\n };\n NumericEditCell.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n this.obj.element.removeEventListener('keydown', this.keyEventHandler);\n this.obj.destroy();\n }\n };\n return NumericEditCell;\n}());\nexport { NumericEditCell };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, setValue, getValue, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID, closest } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\nvar TEXTBOX_FOCUS = 'e-input-focus';\nvar containerAttr = ['title', 'style', 'class'];\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n __extends(TextBox, _super);\n /**\n *\n * @param {TextBoxModel} options - Specifies the TextBox model.\n * @param {string | HTMLInputElement | HTMLTextAreaElement} element - Specifies the element to render as component.\n * @private\n */\n function TextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n _this.isAngular = false;\n _this.isHiddenInput = false;\n _this.isForm = false;\n _this.inputPreviousValue = null;\n _this.isVue = false;\n _this.textboxOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {TextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {TextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'floatLabelType':\n Input.removeFloating(this.textboxWrapper);\n Input.addFloating(this.respectiveElement, this.floatLabelType, this.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n this.bindClearEvent();\n break;\n case 'width':\n Input.setWidth(newProp.width, this.textboxWrapper.container);\n break;\n case 'value':\n {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n if (!this.isBlank(this.value)) {\n this.value = this.value.toString();\n }\n this.isProtectedOnChange = prevOnChange;\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if ((this.isAngular || this.isVue) && this.preventChange === true) {\n this.previousValue = this.isAngular ? this.value : this.previousValue;\n this.preventChange = false;\n }\n else if (isNullOrUndefined(this.isAngular) || !this.isAngular\n || (this.isAngular && !this.preventChange) || (this.isAngular && isNullOrUndefined(this.preventChange))) {\n this.raiseChangeEvent();\n }\n }\n break;\n case 'htmlAttributes':\n {\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkAttributes(true);\n this.multiline && !isNullOrUndefined(this.textarea) ? Input.validateInputType(this.textboxWrapper.container, this.textarea) : Input.validateInputType(this.textboxWrapper.container, this.element);\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.respectiveElement);\n break;\n case 'type':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n this.respectiveElement.setAttribute('type', this.type);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n this.raiseChangeEvent();\n }\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.respectiveElement, this.textboxWrapper);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.textboxWrapper.container]);\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n Input.calculateWidth(this.respectiveElement, this.textboxWrapper.container);\n break;\n case 'autocomplete':\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else {\n this.removeAttributes(['autocomplete']);\n }\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n }\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TextBox.prototype.getModuleName = function () {\n return 'textbox';\n };\n TextBox.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n TextBox.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n this.formElement = closest(this.element, 'form');\n if (!isNullOrUndefined(this.formElement)) {\n this.isForm = true;\n }\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-TEXTBOX') {\n var ejInstance = getValue('ej2_instances', this.element);\n var inputElement = this.multiline ?\n this.createElement('textarea') :\n this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id' && attributeName !== 'class') {\n inputElement.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n if (attributeName === 'name') {\n this.element.removeAttribute('name');\n }\n }\n else if (attributeName === 'class') {\n inputElement.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n }\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) && this.element.value !== '') {\n this.setProperties({ value: this.element.value }, true);\n }\n if (this.element.tagName !== 'TEXTAREA') {\n this.element.setAttribute('type', this.type);\n }\n if (this.type === 'text') {\n this.element.setAttribute('role', 'textbox');\n }\n this.globalize = new Internationalization(this.locale);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('textbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('textbox'));\n }\n if (!this.element.hasAttribute('name')) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (this.element.tagName === 'INPUT' && this.multiline) {\n this.isHiddenInput = true;\n this.textarea = this.createElement('textarea');\n this.element.parentNode.insertBefore(this.textarea, this.element);\n this.element.setAttribute('type', 'hidden');\n this.textarea.setAttribute('name', this.element.getAttribute('name'));\n this.element.removeAttribute('name');\n this.textarea.setAttribute('role', this.element.getAttribute('role'));\n this.element.removeAttribute('role');\n this.textarea.setAttribute('id', getUniqueID('textarea'));\n var apiAttributes = ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var index = 0; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (this.element.hasAttribute(attributeName) && containerAttr.indexOf(attributeName) < 0 &&\n !(attributeName === 'id' || attributeName === 'type' || attributeName === 'e-mappinguid')) {\n // e-mappinguid attribute is handled for Grid component.\n this.textarea.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n if (apiAttributes.indexOf(attributeName) < 0) {\n this.element.removeAttribute(attributeName);\n index--;\n }\n }\n }\n }\n };\n TextBox.prototype.checkAttributes = function (isDynamic) {\n var attrs = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var _i = 0, attrs_1 = attrs; _i < attrs_1.length; _i++) {\n var key = attrs_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'disabled':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'autocomplete':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['autocomplete'] === undefined)) || isDynamic) {\n var autoCompleteTxt = this.element.autocomplete === 'off' ? 'off' : 'on';\n this.setProperties({ autocomplete: autoCompleteTxt }, !isDynamic);\n }\n break;\n case 'value':\n if (((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) || isDynamic) && this.element.value !== '') {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'type':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['type'] === undefined)) || isDynamic) {\n this.setProperties({ type: this.element.type }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n TextBox.prototype.render = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getInputValidClassList(this.cssClass);\n }\n this.respectiveElement = (this.isHiddenInput) ? this.textarea : this.element;\n this.textboxWrapper = Input.createInput({\n element: this.respectiveElement,\n floatLabelType: this.floatLabelType,\n properties: {\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValue,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.updateHTMLAttrToWrapper();\n if (this.isHiddenInput) {\n this.respectiveElement.parentNode.insertBefore(this.element, this.respectiveElement);\n }\n this.wireEvents();\n if (!isNullOrUndefined(this.value)) {\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n }\n if (!isNullOrUndefined(this.value)) {\n this.initialValue = this.value;\n this.setInitialValue();\n }\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else if (!isNullOrUndefined(this.textboxOptions) && (this.textboxOptions['autocomplete'] !== undefined)) {\n this.removeAttributes(['autocomplete']);\n }\n this.previousValue = this.value;\n this.inputPreviousValue = this.value;\n this.respectiveElement.defaultValue = this.respectiveElement.value;\n Input.setWidth(this.width, this.textboxWrapper.container);\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n };\n TextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = this.getInputValidClassList(this.htmlAttributes[\"\" + key]);\n if (updatedClassValues !== '') {\n addClass([this.textboxWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.textboxWrapper.container.getAttribute(key);\n setStyle = !isNullOrUndefined(setStyle) ? (setStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.textboxWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.textboxWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n TextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.multiline && !isNullOrUndefined(this.textarea) ? this.textarea.setAttribute(key, this.htmlAttributes[\"\" + key]) : this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n TextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getInputValidClassList(newClass), [this.textboxWrapper.container], this.getInputValidClassList(oldClass));\n };\n TextBox.prototype.getInputValidClassList = function (inputClassName) {\n var result = inputClassName;\n if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {\n result = (inputClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n TextBox.prototype.setInitialValue = function () {\n if (!this.isAngular) {\n this.respectiveElement.setAttribute('value', this.initialValue);\n }\n };\n TextBox.prototype.wireEvents = function () {\n EventHandler.add(this.respectiveElement, 'focus', this.focusHandler, this);\n EventHandler.add(this.respectiveElement, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.respectiveElement, 'keydown', this.keydownHandler, this);\n EventHandler.add(this.respectiveElement, 'input', this.inputHandler, this);\n EventHandler.add(this.respectiveElement, 'change', this.changeHandler, this);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n this.bindClearEvent();\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-autofill') &&\n this.textboxWrapper.container.classList.contains('e-outline')) {\n EventHandler.add((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler, this);\n }\n };\n TextBox.prototype.animationHandler = function () {\n this.textboxWrapper.container.classList.add('e-valid-input');\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n label.classList.add('e-label-top');\n if (label.classList.contains('e-label-bottom')) {\n label.classList.remove('e-label-bottom');\n }\n }\n };\n TextBox.prototype.resetValue = function (value) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.value = value;\n this.isProtectedOnChange = prevOnChange;\n };\n TextBox.prototype.resetForm = function () {\n if (this.isAngular) {\n this.resetValue('');\n }\n else {\n this.resetValue(this.initialValue);\n }\n if (!isNullOrUndefined(this.textboxWrapper)) {\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label) && this.floatLabelType !== 'Always') {\n if ((isNullOrUndefined(this.initialValue) || this.initialValue === '')) {\n label.classList.add('e-label-bottom');\n label.classList.remove('e-label-top');\n }\n else if (this.initialValue !== '') {\n label.classList.add('e-label-top');\n label.classList.remove('e-label-bottom');\n }\n }\n }\n };\n TextBox.prototype.focusHandler = function (args) {\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n };\n TextBox.prototype.focusOutHandler = function (args) {\n if (!(this.previousValue === null && this.value === null && this.respectiveElement.value === '') &&\n (this.previousValue !== this.value)) {\n this.raiseChangeEvent(args, true);\n }\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n };\n TextBox.prototype.keydownHandler = function (args) {\n if ((args.keyCode === 13 || args.keyCode === 9) && !((this.previousValue === null || this.previousValue === \"\") && (this.value === null || this.value === \"\") && this.respectiveElement.value === \"\")) {\n this.setProperties({ value: this.respectiveElement.value }, true);\n }\n };\n TextBox.prototype.inputHandler = function (args) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var textboxObj = this;\n var eventArgs = {\n event: args,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if (this.isAngular) {\n textboxObj.localChange({ value: this.respectiveElement.value });\n this.preventChange = true;\n }\n if (this.isVue) {\n this.preventChange = true;\n }\n this.trigger('input', eventArgs);\n args.stopPropagation();\n };\n TextBox.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.respectiveElement.value }, true);\n if (this.previousValue != this.value) {\n this.raiseChangeEvent(args, true);\n }\n args.stopPropagation();\n };\n TextBox.prototype.raiseChangeEvent = function (event, interaction) {\n var eventArgs = {\n event: event,\n value: this.value,\n previousValue: this.previousValue,\n container: this.textboxWrapper.container,\n isInteraction: interaction ? interaction : false,\n isInteracted: interaction ? interaction : false\n };\n this.preventChange = false;\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n //EJ2CORE-738:For this task we update the textarea value to the input when input tag with multiline is present\n if (this.element.tagName === 'INPUT' && this.multiline && Browser.info.name === 'mozilla') {\n this.element.value = this.respectiveElement.value;\n }\n };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n if (this.enabled) {\n EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n else {\n EventHandler.remove(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler);\n }\n }\n };\n TextBox.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR)) || this.textboxWrapper.container.classList.contains('e-static-clear')) {\n Input.setValue('', this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.setProperties({ value: this.respectiveElement.value }, true);\n var eventArgs = {\n event: event,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.trigger('input', eventArgs);\n this.inputPreviousValue = this.respectiveElement.value;\n this.raiseChangeEvent(event, true);\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n }\n };\n TextBox.prototype.unWireEvents = function () {\n EventHandler.remove(this.respectiveElement, 'focus', this.focusHandler);\n EventHandler.remove(this.respectiveElement, 'blur', this.focusOutHandler);\n EventHandler.remove(this.respectiveElement, 'keydown', this.keydownHandler);\n EventHandler.remove(this.respectiveElement, 'input', this.inputHandler);\n EventHandler.remove(this.respectiveElement, 'change', this.changeHandler);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-outline') &&\n this.textboxWrapper.container.classList.contains('e-autofill')) {\n EventHandler.remove((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also, it maintains the initial TextBox element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n if (this.element.tagName === 'INPUT' && this.multiline) {\n detach(this.textboxWrapper.container.getElementsByTagName('textarea')[0]);\n this.respectiveElement = this.element;\n this.element.removeAttribute('type');\n }\n this.respectiveElement.value = this.respectiveElement.defaultValue;\n this.respectiveElement.classList.remove('e-input');\n this.removeAttributes(['aria-disabled', 'aria-readonly', 'aria-labelledby']);\n if (!isNullOrUndefined(this.textboxWrapper)) {\n this.textboxWrapper.container.insertAdjacentElement('afterend', this.respectiveElement);\n detach(this.textboxWrapper.container);\n }\n this.textboxWrapper = null;\n Input.destroy();\n _super.prototype.destroy.call(this);\n };\n /**\n * Adding the icons to the TextBox component.\n *\n * @param { string } position - Specify the icon placement on the TextBox. Possible values are append and prepend.\n * @param { string | string[] } icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for TextBox.\n * @returns {void}\n */\n TextBox.prototype.addIcon = function (position, icons) {\n Input.addIcon(position, icons, this.textboxWrapper.container, this.respectiveElement, this.createElement);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n *\n * @param {string} attributes - Specifies the attributes to be add to TextBox element.\n * @returns {void}\n */\n TextBox.prototype.addAttributes = function (attributes) {\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'class') {\n this.respectiveElement.classList.add(attributes[\"\" + key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[\"\" + key] }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else if (key === 'rows' && this.respectiveElement.tagName === 'TEXTAREA') {\n this.respectiveElement.setAttribute(key, attributes[\"\" + key]);\n }\n else {\n this.respectiveElement.setAttribute(key, attributes[\"\" + key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextBox element.\n *\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @returns {void}\n */\n TextBox.prototype.removeAttributes = function (attributes) {\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else {\n this.respectiveElement.removeAttribute(key);\n }\n }\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n TextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.respectiveElement && this.enabled) {\n this.respectiveElement.focus();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n addClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n TextBox.prototype.focusOut = function () {\n if (document.activeElement === this.respectiveElement && this.enabled) {\n this.respectiveElement.blur();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n removeClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n __decorate([\n Property('text')\n ], TextBox.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"value\", void 0);\n __decorate([\n Property('Never')\n ], TextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property('')\n ], TextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('on')\n ], TextBox.prototype, \"autocomplete\", void 0);\n __decorate([\n Property({})\n ], TextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"multiline\", void 0);\n __decorate([\n Property(true)\n ], TextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"input\", void 0);\n TextBox = __decorate([\n NotifyPropertyChanges\n ], TextBox);\n return TextBox;\n}(Component));\nexport { TextBox };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { isEditable, createEditElement } from '../base/util';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { EditCellBase } from './edit-cell-base';\n/**\n * `DefaultEditCell` is used to handle default cell type editing.\n *\n * @hidden\n */\nvar DefaultEditCell = /** @class */ (function (_super) {\n __extends(DefaultEditCell, _super);\n function DefaultEditCell() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DefaultEditCell.prototype.create = function (args) {\n var attr = {\n type: 'text', value: !isNullOrUndefined(args.value) ? args.value : '', style: 'text-align:' + args.column.textAlign\n };\n return createEditElement(this.parent, args.column, 'e-field e-input e-defaultcell', attr);\n };\n DefaultEditCell.prototype.read = function (element) {\n return element.value;\n };\n DefaultEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.obj = new TextBox(extend({\n element: args.element, floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n enableRtl: this.parent.enableRtl, enabled: isEditable(args.column, args.requestType, args.element),\n placeholder: isInline ? '' : args.column.headerText,\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n }, col.edit.params));\n this.obj.appendTo(args.element);\n if (this.parent.editSettings.mode === 'Batch') {\n this.obj.element.addEventListener('keydown', this.keyEventHandler);\n }\n };\n DefaultEditCell.prototype.keyEventHandler = function (args) {\n if (args.key === 'Enter' || args.key === 'Tab') {\n var evt = new Event('change', { bubbles: false, cancelable: true });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dispatchEvent(evt);\n }\n };\n DefaultEditCell.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n this.obj.element.removeEventListener('keydown', this.keyEventHandler);\n this.obj.destroy();\n }\n };\n return DefaultEditCell;\n}(EditCellBase));\nexport { DefaultEditCell };\n","import { extend, select } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { parentsUntil, isGroupAdaptive, refreshForeignData, getObject, gridActionHandler } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { addRemoveEventListener } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * `NormalEdit` module is used to handle normal('inline, dialog, external') editing actions.\n *\n * @hidden\n */\nvar NormalEdit = /** @class */ (function () {\n function NormalEdit(parent, serviceLocator, renderer) {\n this.args = {};\n this.currentVirtualData = {};\n this.parent = parent;\n this.renderer = renderer;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n NormalEdit.prototype.clickHandler = function (e) {\n var target = e.target;\n var gObj = this.parent;\n if ((((parentsUntil(target, literals.gridContent) &&\n parentsUntil(parentsUntil(target, literals.gridContent), 'e-grid').id === gObj.element.id)) || (gObj.frozenRows\n && parentsUntil(target, literals.headerContent))) && !parentsUntil(target, 'e-unboundcelldiv')) {\n this.rowIndex = parentsUntil(target, literals.rowCell)\n ? parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10) : -1;\n if (gObj.isEdit) {\n gObj.editModule.endEdit();\n }\n }\n };\n NormalEdit.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, literals.rowCell) && this.parent.editSettings.allowEditOnDblClick) {\n this.parent.editModule.startEdit(parentsUntil(e.target, literals.row));\n }\n };\n /**\n * The function used to trigger editComplete\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n NormalEdit.prototype.editComplete = function (e) {\n this.parent.isEdit = false;\n var action = 'action';\n switch (e.requestType) {\n case 'save':\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n if (e[\"\" + action] !== 'edit') {\n this.parent.selectRow(e['index']);\n }\n }\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'save',\n type: events.actionComplete\n }));\n break;\n case 'delete':\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'delete',\n type: events.actionComplete\n }));\n if (!this.parent.isCheckBoxSelection) {\n this.parent.selectRow(this.editRowIndex);\n }\n break;\n }\n };\n NormalEdit.prototype.getEditArgs = function (editedData, rowObj, isScroll) {\n var primaryKeys = this.parent.getPrimaryKeyFieldNames();\n var primaryKeyValues = [];\n for (var i = 0; i < primaryKeys.length; i++) {\n primaryKeyValues.push(getObject(primaryKeys[parseInt(i.toString(), 10)], editedData));\n }\n var args = {\n primaryKey: primaryKeys, primaryKeyValue: primaryKeyValues, requestType: 'beginEdit',\n rowData: editedData, rowIndex: this.rowIndex, type: 'edit', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData, target: undefined, isScroll: isScroll\n };\n return args;\n };\n NormalEdit.prototype.startEdit = function (tr) {\n var _this = this;\n var gObj = this.parent;\n this.rowIndex = this.editRowIndex = parseInt(tr.getAttribute(literals.dataRowIndex), 10);\n if (gObj.enableVirtualization || gObj.enableInfiniteScrolling) {\n var selector = '.e-row[data-rowindex=\"' + this.rowIndex + '\"]';\n var virtualRow = this.parent.element.querySelector(selector);\n if (!virtualRow) {\n return;\n }\n }\n var e = { data: undefined, index: this.rowIndex, isScroll: false };\n this.parent.notify(events.virtualScrollEditActionBegin, e);\n if (isGroupAdaptive(gObj)) {\n var rObj = gObj.getRowObjectFromUID(tr.getAttribute('data-uid'));\n this.previousData = rObj.data;\n }\n else if (!this.previousData && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.previousData = e.data;\n }\n else if (!this.parent.enableVirtualization) {\n this.previousData = extend({}, {}, gObj.getCurrentViewRecords()[this.rowIndex], true);\n }\n var editedData = extend({}, {}, e.data || this.previousData, true);\n this.uid = tr.getAttribute('data-uid');\n var rowObj = gObj.getRowObjectFromUID(this.uid);\n var args = this.getEditArgs(editedData, rowObj, e.isScroll);\n args.row = tr;\n if (!args.isScroll) {\n this.parent.notify(events.createVirtualValidationForm, { uid: this.uid, prevData: this.previousData, argsCreator: this.getEditArgs.bind(this), renderer: this.renderer });\n gObj.trigger(events.beginEdit, args, function (begineditargs) {\n begineditargs.type = 'actionBegin';\n gObj.trigger(events.actionBegin, begineditargs, function (editargs) {\n if (!editargs.cancel) {\n _this.inlineEditHandler(editargs, tr);\n }\n });\n });\n }\n else {\n this.inlineEditHandler(args, tr);\n }\n };\n NormalEdit.prototype.inlineEditHandler = function (editargs, tr) {\n var gObj = this.parent;\n gObj.isEdit = true;\n editargs.row = editargs.row ? editargs.row : tr;\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.clearSelection();\n }\n if (gObj.editSettings.mode === 'Dialog' && gObj.selectionModule) {\n gObj.selectionModule.preventFocus = true;\n editargs.row.classList.add('e-dlgeditrow');\n }\n this.renderer.update(editargs);\n this.uid = tr.getAttribute('data-uid');\n gObj.editModule.applyFormValidation();\n editargs.type = 'actionComplete';\n gObj.trigger(events.actionComplete, editargs);\n if (gObj.editSettings.template) {\n gObj.editModule.applyFormValidation(undefined, editargs.form.ej2_instances[0].rules);\n }\n this.args = editargs;\n if (this.parent.allowTextWrap) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n };\n NormalEdit.prototype.updateRow = function (index, data) {\n var _this = this;\n var gObj = this.parent;\n this.editRowIndex = index;\n var args = {\n requestType: 'save', action: 'edit', type: events.actionBegin, data: data, cancel: false,\n previousData: gObj.getCurrentViewRecords()[parseInt(index.toString(), 10)],\n row: gObj.getRowByIndex(index)\n };\n gObj.showSpinner();\n if (gObj.enableInfiniteScrolling) {\n this.uid = args.row.getAttribute('data-uid');\n var index_1 = parseInt(args.row.getAttribute('data-rowindex'), 10);\n this.parent.notify(events.refreshInfiniteEditrowindex, { index: index_1 });\n }\n gObj.notify(events.updateData, args);\n if (args.promise) {\n args.promise.then(function () { return gObj.refresh(); }).catch(function (e) { return _this.edFail(e); });\n }\n else {\n if (!gObj.enableInfiniteScrolling) {\n gObj.refresh();\n }\n }\n };\n NormalEdit.prototype.editFormValidate = function () {\n var gObj = this.parent;\n var isValid = gObj.editModule.editFormValidate();\n var validationArgs = {\n prevData: this.previousData, isValid: true, editIdx: this.editRowIndex, addIdx: this.addedRowIndex\n };\n gObj.notify(events.validateVirtualForm, validationArgs);\n return (isValid && validationArgs.isValid);\n };\n NormalEdit.prototype.endEdit = function () {\n var _this = this;\n var gObj = this.parent;\n if (!this.parent.isEdit || !this.editFormValidate()) {\n return;\n }\n var editedData = extend({}, {}, this.previousData, true);\n var args = extend(this.args, {\n requestType: 'save', type: events.actionBegin, data: editedData, cancel: false,\n previousData: this.previousData, selectedRow: gObj.selectedRowIndex, foreignKeyData: {}\n });\n var index = gObj.getFrozenMode() === 'Right' ? 1 : 0;\n var isDlg = gObj.editSettings.mode === 'Dialog';\n var dlgWrapper = select('#' + gObj.element.id + '_dialogEdit_wrapper', document);\n var dlgForm = isDlg ? dlgWrapper.querySelector('.e-gridform') : gObj.element.getElementsByClassName('e-gridform')[parseInt(index.toString(), 10)];\n var data = {\n virtualData: extend({}, {}, this.previousData, true), isAdd: false, isScroll: false, endEdit: true\n };\n this.parent.notify(events.getVirtualData, data);\n if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)\n && this.parent.editSettings.mode === 'Normal' && Object.keys(data.virtualData).length) {\n if (this.parent.isEdit) {\n this.currentVirtualData = editedData = args.data = data.virtualData;\n }\n }\n else {\n editedData = gObj.editModule.getCurrentEditedData(dlgForm, editedData);\n }\n if (gObj.isFrozenGrid() && gObj.editSettings.mode === 'Normal') {\n var mhdrFrm = gObj.getMovableVirtualHeader().querySelector('.e-gridform');\n var mCntFrm = gObj.getMovableVirtualContent().querySelector('.e-gridform');\n var mvblEle = [mhdrFrm || mCntFrm];\n var frHdrFrm = void 0;\n var frCntFrm = void 0;\n var frEle = [];\n if (gObj.getFrozenMode() === literals.leftRight) {\n frHdrFrm = gObj.getFrozenRightHeader().querySelector('.e-gridform');\n frCntFrm = gObj.getFrozenRightContent().querySelector('.e-gridform');\n frEle = [frHdrFrm || frCntFrm];\n }\n gridActionHandler(this.parent, function (tableName, elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var ele = elements_1[_i];\n if (ele) {\n editedData = gObj.editModule.getCurrentEditedData(ele, editedData);\n }\n }\n }, [[], mvblEle, frEle]);\n }\n var eleLength = [].slice.call(gObj.element.getElementsByClassName(literals.editedRow)).length;\n if (!data.isAdd && Object.keys(this.currentVirtualData).length && !eleLength) {\n eleLength = 1;\n }\n if (isDlg ? dlgWrapper.getElementsByClassName(literals.editedRow).length : eleLength) {\n args.action = 'edit';\n gObj.trigger(events.actionBegin, args, function (endEditArgs) {\n if (endEditArgs.cancel) {\n return;\n }\n if (_this.parent.loadingIndicator.indicatorType === 'Spinner') {\n gObj.showSpinner();\n }\n if (_this.parent.loadingIndicator.indicatorType === 'Shimmer') {\n _this.parent.showMaskRow();\n }\n gObj.notify(events.updateData, endEditArgs);\n });\n }\n else {\n args.action = 'add';\n args.selectedRow = 0;\n args.index = this.addedRowIndex;\n gObj.notify(events.virtualScrollEditSuccess, {});\n gObj.notify(events.modelChanged, args);\n this.addedRowIndex = null;\n if (args.cancel) {\n return;\n }\n }\n gObj.editModule.resetMovableContentValidation();\n };\n NormalEdit.prototype.destroyElements = function () {\n var gObj = this.parent;\n gObj.editModule.destroyWidgets();\n gObj.editModule.destroyForm();\n this.parent.notify(events.dialogDestroy, {});\n };\n NormalEdit.prototype.editHandler = function (args) {\n var _this = this;\n if (args.promise) {\n args.promise.then(function (e) { return _this.edSucc(e, args); }).catch(function (e) { return _this.edFail(e); });\n }\n else {\n this.editSuccess(args.data, args);\n }\n };\n NormalEdit.prototype.edSucc = function (e, args) {\n this.editSuccess(e, args);\n };\n NormalEdit.prototype.edFail = function (e) {\n this.editFailure(e);\n };\n NormalEdit.prototype.updateCurrentViewData = function (data) {\n if (!this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling) {\n this.parent.getCurrentViewRecords()[this.editRowIndex] = data;\n }\n };\n NormalEdit.prototype.requestSuccess = function (args) {\n if (this.parent.editModule.formObj && !this.parent.editModule.formObj.isDestroyed) {\n this.destroyElements();\n this.stopEditStatus();\n if (this.parent.editSettings.mode === 'Dialog' && args.action !== 'add' &&\n this.parent.selectionModule) {\n this.parent.element.querySelector('.e-dlgeditrow').classList.remove('e-dlgeditrow');\n }\n }\n };\n NormalEdit.prototype.editSuccess = function (e, args) {\n var _this = this;\n if (!isNullOrUndefined(e) && !(e instanceof Array)) {\n var rowData = 'rowData';\n args.data = extend({}, extend({}, args[\"\" + rowData], args.data), e);\n }\n this.requestSuccess(args);\n this.parent.trigger(events.beforeDataBound, args);\n args.type = events.actionComplete;\n this.parent.isEdit = false;\n this.refreshRow(args.data);\n this.parent.notify(events.virtualScrollEditSuccess, args);\n this.parent.editModule.checkLastRow(args.row);\n this.parent.editModule.isLastRow = false;\n this.updateCurrentViewData(args.data);\n this.blazorTemplate();\n this.editRowIndex = null;\n if (this.parent.allowGrouping && this.parent.groupSettings.columns.length) {\n var dragRow = args.row;\n var rows = this.parent.getRowsObject();\n var dragRowUid = dragRow.getAttribute('data-uid');\n var dragRowObject_1 = this.parent.getRowObjectFromUID(dragRowUid);\n var _loop_1 = function (i) {\n rows = rows.filter(function (data) {\n return data.isDataRow && data.data[_this.parent.groupSettings.columns[parseInt(i.toString(), 10)]] ===\n args.data[_this.parent.groupSettings.columns[parseInt(i.toString(), 10)]] && data !== dragRowObject_1;\n });\n };\n for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n _loop_1(i);\n }\n var dropRowObject = rows[0];\n if (!isNullOrUndefined(dragRowObject_1) && !isNullOrUndefined(dropRowObject) &&\n dragRowObject_1.parentUid !== dropRowObject.parentUid) {\n this.parent['groupModule'].groupedRowReorder(dragRowObject_1, dropRowObject);\n }\n else if (this.parent.aggregates.length) {\n this.parent.aggregateModule.refresh(args.data, this.parent.groupSettings.enableLazyLoading ? args.row : undefined);\n }\n }\n else if (this.parent.aggregates.length) {\n this.parent.aggregateModule.refresh(args.data, this.parent.groupSettings.enableLazyLoading ? args.row : undefined);\n }\n this.parent.trigger(events.actionComplete, args);\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection) && !this.parent.selectionSettings.checkboxOnly) {\n if (this.parent.editSettings.mode !== 'Dialog') {\n this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);\n }\n }\n if (this.parent.aggregates.length && this.parent.groupSettings.enableLazyLoading && this.parent.groupSettings.columns.length\n && (this.parent.groupModule.getGroupAggregateTemplates(true).length\n || this.parent.groupModule.getGroupAggregateTemplates(false).length)) {\n return;\n }\n this.parent.removeMaskRow();\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.closeForm = function () {\n if (!this.cloneRow && this.parent.isEdit) {\n this.stopEditStatus();\n }\n if (this.cloneRow) {\n this.cloneRow.remove();\n this.cloneRow = null;\n this.originalRow.classList.remove('e-hiddenrow');\n }\n if (this.parent.isFrozenGrid() && this.cloneFrozen) {\n this.cloneFrozen.remove();\n this.frozen.classList.remove('e-hiddenrow');\n }\n };\n NormalEdit.prototype.blazorTemplate = function () {\n var cols = this.parent.getColumns();\n if (this.parent.editSettings.template && this.parent.editSettings.mode === 'Normal') {\n updateBlazorTemplate(this.parent.element.id + 'editSettingsTemplate', 'Template', this.parent.editSettings);\n }\n for (var i = 0; i < cols.length; i++) {\n var col = cols[parseInt(i.toString(), 10)];\n if (col.template) {\n updateBlazorTemplate(this.parent.element.id + col.uid, 'Template', col, false);\n }\n if (col.editTemplate) {\n updateBlazorTemplate(this.parent.element.id + col.uid + 'editTemplate', 'EditTemplate', col);\n }\n }\n };\n NormalEdit.prototype.editFailure = function (e) {\n this.parent.removeMaskRow();\n this.parent.trigger(events.actionFailure, ({ error: e }));\n this.parent.hideSpinner();\n this.parent.log('actionfailure', { error: e });\n };\n NormalEdit.prototype.needRefresh = function () {\n var refresh = true;\n var editedRow = this.parent.element.querySelector('.e-gridform');\n if ((this.parent.enableVirtualization || this.parent.infiniteScrollSettings.enableCache)\n && this.parent.editSettings.mode === 'Normal' && !editedRow) {\n refresh = false;\n }\n return refresh;\n };\n NormalEdit.prototype.refreshRow = function (data) {\n var frzCols = this.parent.isFrozenGrid();\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var rowObj = this.parent.getRowObjectFromUID(this.uid);\n if (rowObj) {\n rowObj.changes = data;\n this.parent.notify(events.refreshVirtualCache, { data: data });\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n if (this.needRefresh()) {\n row.refresh(rowObj, this.parent.getColumns(), true);\n }\n var tr = [].slice.call(this.parent.element.querySelectorAll('[data-rowindex=\"' + rowObj.index + '\"]'));\n if (frzCols && tr.length) {\n for (var i = 0; i < tr.length; i++) {\n var rowUid = tr[parseInt(i.toString(), 10)].getAttribute('data-uid');\n if (rowUid !== this.uid) {\n rowObj = this.parent.getRowObjectFromUID(rowUid);\n rowObj.changes = data;\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n row.refresh(rowObj, this.parent.getColumns(), true);\n this.parent.editModule.checkLastRow(tr[parseInt(i.toString(), 10)]);\n }\n }\n }\n }\n };\n NormalEdit.prototype.closeEdit = function () {\n var _this = this;\n if (!this.parent.isEdit) {\n return;\n }\n var gObj = this.parent;\n var args = extend(this.args, {\n requestType: 'cancel', type: events.actionBegin, cancel: false, data: this.previousData, selectedRow: gObj.selectedRowIndex\n });\n gObj.notify(events.virtualScrollEditCancel, args);\n this.blazorTemplate();\n gObj.trigger(events.actionBegin, args, function (closeEditArgs) {\n if (closeEditArgs.cancel) {\n return;\n }\n if (_this.parent.editSettings.mode === 'Dialog') {\n _this.parent.notify(events.dialogDestroy, {});\n }\n gObj.isEdit = false;\n _this.stopEditStatus();\n closeEditArgs.type = events.actionComplete;\n if (gObj.editSettings.mode !== 'Dialog') {\n _this.refreshRow(closeEditArgs.data);\n }\n var isLazyLoad = gObj.groupSettings.enableLazyLoading && gObj.groupSettings.columns.length\n && !gObj.getContentTable().querySelector('tr.e-emptyrow');\n if (!gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row') && !isLazyLoad) {\n gObj.renderModule.emptyRow();\n }\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.selectRow(_this.rowIndex);\n }\n gObj.editModule.resetMovableContentValidation();\n gObj.trigger(events.actionComplete, closeEditArgs);\n });\n };\n NormalEdit.prototype.addRecord = function (data, index) {\n var _this = this;\n var gObj = this.parent;\n this.addedRowIndex = index = !isNullOrUndefined(index) ? index : 0;\n if (data) {\n gObj.notify(events.modelChanged, {\n requestType: 'save', type: events.actionBegin, data: data, selectedRow: 0, action: 'add', index: index\n });\n return;\n }\n if (gObj.isEdit) {\n return;\n }\n this.previousData = {};\n this.uid = '';\n var cols = gObj.getColumns();\n var rowData = { virtualData: {}, isScroll: false };\n this.parent.notify(events.getVirtualData, rowData);\n for (var i = 0; i < cols.length; i++) {\n if (rowData.isScroll && cols[parseInt(i.toString(), 10)].getFreezeTableName() !== 'movable') {\n continue;\n }\n if (cols[parseInt(i.toString(), 10)].field) {\n if (cols[parseInt(i.toString(), 10)].type === 'string') {\n cols[parseInt(i.toString(), 10)].defaultValue = this.parent.sanitize(cols[parseInt(i.toString(), 10)].defaultValue);\n }\n DataUtil.setValue(cols[parseInt(i.toString(), 10)].field, cols[parseInt(i.toString(), 10)].defaultValue, this.previousData);\n }\n }\n var args = {\n cancel: false, foreignKeyData: {},\n requestType: 'add', data: this.previousData, type: events.actionBegin, index: index,\n rowData: this.previousData, target: undefined, isScroll: rowData.isScroll\n };\n if ((this.parent.enableVirtualization || this.parent.infiniteScrollSettings.enableCache)\n && Object.keys(rowData.virtualData).length) {\n args.data = args.rowData = rowData.virtualData;\n }\n if (!args.isScroll) {\n this.parent.notify(events.createVirtualValidationForm, { uid: this.uid, prevData: this.previousData, argsCreator: this.getEditArgs.bind(this), renderer: this.renderer });\n gObj.trigger(events.actionBegin, args, function (addArgs) {\n if (addArgs.cancel) {\n return;\n }\n _this.inlineAddHandler(addArgs);\n });\n }\n else {\n this.inlineAddHandler(args);\n }\n };\n NormalEdit.prototype.inlineAddHandler = function (addArgs) {\n var gObj = this.parent;\n gObj.isEdit = true;\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.clearSelection();\n }\n this.renderer.addNew(addArgs);\n gObj.editModule.applyFormValidation();\n addArgs.type = events.actionComplete;\n addArgs.row = gObj.element.querySelector('.' + literals.addedRow);\n gObj.trigger(events.actionComplete, addArgs);\n if (gObj.editSettings.template) {\n gObj.editModule.applyFormValidation(undefined, addArgs.form.ej2_instances[0].rules);\n }\n this.args = addArgs;\n };\n NormalEdit.prototype.deleteRecord = function (fieldname, data) {\n this.editRowIndex = this.parent.selectedRowIndex;\n if (data) {\n data = (data instanceof Array) ? data : [data];\n var gObj = this.parent;\n var dataLen = Object.keys(data).length;\n fieldname = fieldname || this.parent.getPrimaryKeyFieldNames()[0];\n var _loop_2 = function (i) {\n var _a;\n var tmpRecord;\n var contained = gObj.currentViewData.some(function (record) {\n tmpRecord = record;\n return data[parseInt(i.toString(), 10)] === getObject(fieldname, record) || data[parseInt(i.toString(), 10)] === record;\n });\n data[parseInt(i.toString(), 10)] = contained ? tmpRecord : data[parseInt(i.toString(), 10)][\"\" + fieldname] ?\n data[parseInt(i.toString(), 10)] : (_a = {}, _a[fieldname] = data[parseInt(i.toString(), 10)], _a);\n };\n for (var i = 0; i < dataLen; i++) {\n _loop_2(i);\n }\n }\n var args = {\n requestType: 'delete', type: events.actionBegin, foreignKeyData: {},\n data: data ? data : this.parent.getSelectedRecords(), tr: this.parent.getSelectedRows(), cancel: false\n };\n if (!isNullOrUndefined(this.parent.commandDelIndex)) {\n args.data[0] =\n this.parent.getRowObjectFromUID(this.parent.getRowByIndex(this.parent.commandDelIndex).getAttribute('data-uid')).data;\n }\n if (this.parent.enableVirtualization && args.data.length > 1) {\n var uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n args.data = [this.parent.getRowObjectFromUID(uid).data];\n }\n this.parent.notify(events.modelChanged, args);\n };\n NormalEdit.prototype.stopEditStatus = function () {\n var gObj = this.parent;\n var addElements = [].slice.call(gObj.element.getElementsByClassName(literals.addedRow));\n var editElements = [].slice.call(gObj.element.getElementsByClassName(literals.editedRow));\n for (var i = 0; i < addElements.length; i++) {\n remove(addElements[parseInt(i.toString(), 10)]);\n }\n for (var i = 0; i < editElements.length; i++) {\n editElements[parseInt(i.toString(), 10)].classList.remove(literals.editedRow);\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n NormalEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.evtHandlers = [{ event: events.crudAction, handler: this.editHandler },\n { event: events.doubleTap, handler: this.dblClickHandler },\n { event: events.click, handler: this.clickHandler },\n { event: events.recordAdded, handler: this.requestSuccess },\n { event: events.dblclick, handler: this.dblClickHandler },\n { event: events.deleteComplete, handler: this.editComplete },\n { event: events.saveComplete, handler: this.editComplete },\n { event: events.rowModeChange, handler: this.closeEdit },\n { event: events.closeInline, handler: this.closeForm }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n };\n /**\n * @returns {void}\n * @hidden\n */\n NormalEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n };\n /**\n * @returns {void}\n * @hidden\n */\n NormalEdit.prototype.destroy = function () {\n this.removeEventListener();\n this.renderer.destroy();\n };\n return NormalEdit;\n}());\nexport { NormalEdit };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `InlineEdit` module is used to handle inline editing actions.\n *\n * @hidden\n */\nvar InlineEdit = /** @class */ (function (_super) {\n __extends(InlineEdit, _super);\n function InlineEdit(parent, serviceLocator, renderer) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n InlineEdit.prototype.closeEdit = function () {\n _super.prototype.closeEdit.call(this);\n };\n InlineEdit.prototype.addRecord = function (data, index) {\n _super.prototype.addRecord.call(this, data, index);\n };\n InlineEdit.prototype.endEdit = function () {\n _super.prototype.endEdit.call(this);\n };\n InlineEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n InlineEdit.prototype.deleteRecord = function (fieldname, data) {\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n InlineEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return InlineEdit;\n}(NormalEdit));\nexport { InlineEdit };\n","import { extend, addClass, removeClass, setValue, closest, select } from '@syncfusion/ej2-base';\nimport { remove, classList } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { parentsUntil, inArray, refreshForeignData, getObject, alignFrozenEditForm, gridActionHandler, addRemoveEventListener } from '../base/util';\nimport { splitFrozenRowObjectCells, getGridRowElements } from '../base/util';\nimport { sliceElements, getCellByColAndRowIndex } from '../base/util';\nimport { getGridRowObjects } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport * as literals from '../base/string-literals';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent, serviceLocator, renderer) {\n this.cellDetails = {};\n this.originalCell = {};\n this.cloneCell = {};\n this.editNext = false;\n this.preventSaveCell = false;\n this.initialRender = true;\n this.validationColObj = [];\n /** @hidden */\n this.addBatchRow = false;\n this.prevEditedBatchCell = false;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = renderer;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n }\n /**\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.evtHandlers = [{ event: events.click, handler: this.clickHandler },\n { event: events.dblclick, handler: this.dblClickHandler },\n { event: events.beforeCellFocused, handler: this.onBeforeCellFocused },\n { event: events.cellFocused, handler: this.onCellFocused },\n { event: events.doubleTap, handler: this.dblClickHandler },\n { event: events.keyPressed, handler: this.keyDownHandler },\n { event: events.editNextValCell, handler: this.editNextValCell },\n { event: events.closeBatch, handler: this.closeForm },\n { event: events.destroy, handler: this.destroy }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n this.dataBoundFunction = this.dataBound.bind(this);\n this.batchCancelFunction = this.batchCancel.bind(this);\n this.parent.addEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.addEventListener(events.batchCancel, this.batchCancelFunction);\n };\n /**\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.removeEventListener(events.batchCancel, this.batchCancelFunction);\n };\n BatchEdit.prototype.batchCancel = function () {\n this.parent.focusModule.restoreFocus();\n };\n BatchEdit.prototype.dataBound = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n BatchEdit.prototype.clickHandler = function (e) {\n if (!parentsUntil(e.target, this.parent.element.id + '_add', true)) {\n if (this.parent.isEdit && closest(this.form, 'td') !== closest(e.target, 'td')) {\n this.saveCell();\n this.editNextValCell();\n }\n if (parentsUntil(e.target, literals.rowCell) && !this.parent.isEdit) {\n this.setCellIdx(e.target);\n }\n }\n };\n BatchEdit.prototype.dblClickHandler = function (e) {\n var target = parentsUntil(e.target, literals.rowCell);\n var tr = parentsUntil(e.target, literals.row);\n var rowIndex = tr && parseInt(tr.getAttribute(literals.dataRowIndex), 10);\n var colIndex = target && parseInt(target.getAttribute(literals.dataColIndex), 10);\n if (!isNullOrUndefined(target) && !isNullOrUndefined(rowIndex) && !isNaN(colIndex)\n && !target.parentElement.classList.contains(literals.editedRow) &&\n this.parent.getColumns()[parseInt(colIndex.toString(), 10)].allowEditing) {\n this.editCell(rowIndex, this.parent.getColumns()[parseInt(colIndex.toString(), 10)].field, this.isAddRow(rowIndex));\n }\n };\n BatchEdit.prototype.onBeforeCellFocused = function (e) {\n if (this.parent.isEdit && this.validateFormObj() &&\n (e.byClick || (['tab', 'shiftTab', 'enter', 'shiftEnter'].indexOf(e.keyArgs.action) > -1))) {\n e.cancel = true;\n if (e.byClick) {\n e.clickArgs.preventDefault();\n }\n else {\n e.keyArgs.preventDefault();\n }\n }\n };\n BatchEdit.prototype.onCellFocused = function (e) {\n var frzCols = this.parent.getFrozenLeftCount();\n var frzRightCols = this.parent.getFrozenRightColumnsCount();\n var mCont = this.parent.getContent().querySelector('.' + literals.movableContent);\n var mHdr = this.parent.getHeaderContent().querySelector('.' + literals.movableHeader);\n var clear = (!e.container.isContent || !e.container.isDataCell) && !(this.parent.frozenRows && e.container.isHeader);\n if (this.parent.focusModule.active) {\n this.prevEditedBatchCell = this.parent.focusModule.active.matrix.current.toString() === this.prevEditedBatchCellMatrix()\n .toString();\n this.crtRowIndex = [].slice.call(this.parent.focusModule.active.getTable().rows).indexOf(closest(e.element, 'tr'));\n }\n if (!e.byKey || clear || (this.parent.isFrozenGrid() && e.element && closest(e.element, '.e-gridheader')\n && closest(e.element, 'thead'))) {\n if ((this.parent.isEdit && clear) || (this.parent.isFrozenGrid() && this.parent.isEdit && e.byKey)) {\n this.saveCell();\n }\n return;\n }\n var _a = e.container.indexes, rowIndex = _a[0], cellIndex = _a[1];\n if (frzCols && (mCont.contains(e.element) || (this.parent.frozenRows && mHdr.contains(e.element)))) {\n cellIndex += frzCols;\n }\n if (frzRightCols) {\n var frHdr = this.parent.getHeaderContent().querySelector('.e-frozen-right-header');\n var frCont = this.parent.getContent().querySelector('.e-frozen-right-content');\n if (frCont.contains(e.element) || (this.parent.frozenRows && frHdr.contains(e.element))) {\n cellIndex += (frzCols + this.parent.getMovableColumnsCount());\n }\n }\n if (this.parent.frozenRows && e.container.isContent) {\n rowIndex += this.parent.frozenRows;\n }\n var isEdit = this.parent.isEdit;\n if (!this.parent.element.getElementsByClassName('e-popup-open').length) {\n isEdit = isEdit && !this.validateFormObj();\n switch (e.keyArgs.action) {\n case 'tab':\n case 'shiftTab':\n // eslint-disable-next-line no-case-declarations\n var indent = this.parent.isRowDragable() && this.parent.isDetail() ? 2 :\n this.parent.isRowDragable() || this.parent.isDetail() ? 1 : 0;\n // eslint-disable-next-line no-case-declarations\n var col = this.parent.getColumns()[cellIndex - indent];\n if (col && !this.parent.isEdit) {\n this.editCell(rowIndex, col.field);\n }\n if (isEdit || this.parent.isLastCellPrimaryKey) {\n this.editCellFromIndex(rowIndex, cellIndex);\n }\n break;\n case 'enter':\n case 'shiftEnter':\n e.keyArgs.preventDefault();\n // eslint-disable-next-line no-case-declarations\n var args = { cancel: false, keyArgs: e.keyArgs };\n this.parent.notify('beforeFocusCellEdit', args);\n if (!args.cancel && isEdit) {\n this.editCell(rowIndex, this.cellDetails.column.field);\n }\n break;\n case 'f2':\n this.editCellFromIndex(rowIndex, cellIndex);\n this.focus.focus();\n break;\n }\n }\n };\n BatchEdit.prototype.isAddRow = function (index) {\n return this.parent.getDataRows()[parseInt(index.toString(), 10)].classList.contains('e-insertedrow');\n };\n BatchEdit.prototype.editCellFromIndex = function (rowIdx, cellIdx) {\n this.cellDetails.rowIndex = rowIdx;\n this.cellDetails.cellIndex = cellIdx;\n this.editCell(rowIdx, this.parent.getColumns()[parseInt(cellIdx.toString(), 10)].field, this.isAddRow(rowIdx));\n };\n BatchEdit.prototype.closeEdit = function () {\n var _this = this;\n var gObj = this.parent;\n var rows = this.parent.getRowsObject();\n var argument = { cancel: false, batchChanges: this.getBatchChanges() };\n gObj.notify(events.beforeBatchCancel, argument);\n if (argument.cancel) {\n return;\n }\n if (gObj.isEdit) {\n this.saveCell(true);\n }\n this.isAdded = false;\n gObj.clearSelection();\n var allRows = getGridRowObjects(this.parent);\n var _loop_1 = function (i) {\n var isInsert = false;\n var isDirty = rows[parseInt(i.toString(), 10)].isDirty;\n gridActionHandler(this_1.parent, function (tableName, rows) {\n isInsert = _this.removeBatchElementChanges(rows[parseInt(i.toString(), 10)], isDirty);\n if (isInsert) {\n rows.splice(i, 1);\n }\n }, allRows);\n if (isInsert) {\n i--;\n }\n out_i_1 = i;\n };\n var this_1 = this, out_i_1;\n for (var i = 0; i < rows.length; i++) {\n _loop_1(i);\n i = out_i_1;\n }\n if (!gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.renderModule.renderEmptyRow();\n }\n var args = {\n requestType: 'batchCancel', rows: this.parent.getRowsObject()\n };\n if (!this.parent.isFrozenGrid()) {\n gObj.notify(events.batchCancel, {\n rows: this.parent.getRowsObject().length ? this.parent.getRowsObject() :\n [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })]\n });\n }\n else {\n if (this.parent.getRowsObject().length) {\n gObj.notify(events.batchCancel, { rows: this.parent.getRowsObject(),\n args: { isFrozen: true } });\n }\n if (this.parent.getMovableRowsObject().length) {\n gObj.notify(events.batchCancel, { rows: this.parent.getMovableRowsObject() });\n }\n if (this.parent.getFrozenRightRowsObject().length) {\n gObj.notify(events.batchCancel, { rows: this.parent.getFrozenRightRowsObject(),\n args: { renderFrozenRightContent: true } });\n }\n }\n gObj.selectRow(this.cellDetails.rowIndex);\n this.refreshRowIdx();\n gObj.editModule.resetMovableContentValidation();\n gObj.notify(events.toolbarRefresh, {});\n this.parent.notify(events.tooltipDestroy, {});\n args = { requestType: 'batchCancel', rows: this.parent.getRowsObject() };\n gObj.trigger(events.batchCancel, args);\n };\n BatchEdit.prototype.removeBatchElementChanges = function (row, isDirty) {\n var gObj = this.parent;\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this.parent);\n var isInstertedRemoved = false;\n if (isDirty) {\n row.isDirty = isDirty;\n var tr = gObj.getRowElementByUID(row.uid);\n if (tr) {\n if (tr.classList.contains('e-insertedrow')) {\n remove(tr);\n isInstertedRemoved = true;\n }\n else {\n refreshForeignData(row, this.parent.getForeignKeyColumns(), row.data);\n delete row.changes;\n delete row.edit;\n row.isDirty = false;\n classList(tr, [], ['e-hiddenrow', 'e-updatedtd']);\n rowRenderer.refresh(row, gObj.getColumns(), false);\n }\n if (this.parent.aggregates.length > 0) {\n var type = 'type';\n var editType = [];\n editType[\"\" + type] = 'cancel';\n this.parent.notify(events.refreshFooterRenderer, editType);\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(events.groupAggregates, editType);\n }\n }\n }\n }\n return isInstertedRemoved;\n };\n BatchEdit.prototype.removeHideAndSelection = function (tr) {\n if (tr.classList.contains('e-hiddenrow')) {\n tr.removeAttribute('aria-selected');\n var tdElements = [].slice.call(tr.getElementsByClassName('e-selectionbackground'));\n for (var i = 0; i < tdElements.length; i++) {\n removeClass([tdElements[parseInt(i.toString(), 10)]], ['e-selectionbackground', 'e-active']);\n }\n }\n classList(tr, [], ['e-hiddenrow', 'e-updatedtd']);\n };\n BatchEdit.prototype.deleteRecord = function (fieldname, data) {\n this.saveCell();\n if (this.validateFormObj()) {\n this.saveCell(true);\n }\n this.isAdded = false;\n this.bulkDelete(fieldname, data);\n if (this.parent.aggregates.length > 0) {\n this.parent.notify(events.refreshFooterRenderer, {});\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(events.groupAggregates, {});\n }\n }\n };\n BatchEdit.prototype.addRecord = function (data) {\n this.bulkAddRow(data);\n };\n BatchEdit.prototype.endEdit = function () {\n if (this.parent.isEdit && this.validateFormObj()) {\n return;\n }\n this.batchSave();\n };\n BatchEdit.prototype.closeForm = function () {\n for (var i = 0; i < Object.keys(this.originalCell).length; i++) {\n for (var j = 0; j < Object.keys(this.cloneCell).length; j++) {\n if (Object.keys(this.originalCell)[parseInt(i.toString(), 10)] === Object\n .keys(this.cloneCell)[parseInt(j.toString(), 10)]) {\n this.cloneCell[Object.keys(this.cloneCell)[parseInt(j.toString(), 10)]].replaceWith(this.originalCell[Object\n .keys(this.originalCell)[parseInt(i.toString(), 10)]]);\n if (this.originalCell[Object.keys(this.originalCell)[parseInt(i.toString(), 10)]].classList.contains('e-selectionbackground')) {\n this.originalCell[Object.keys(this.originalCell)[parseInt(i.toString(), 10)]]\n .classList.remove('e-selectionbackground', 'e-cellselectionbackground', 'e-active');\n }\n }\n }\n }\n this.cloneCell = {};\n this.originalCell = {};\n };\n BatchEdit.prototype.validateFormObj = function () {\n return this.parent.editModule.formObj && !this.parent.editModule.formObj.validate();\n };\n BatchEdit.prototype.batchSave = function () {\n var gObj = this.parent;\n var deletedRecords = 'deletedRecords';\n if (gObj.isCheckBoxSelection) {\n var checkAllBox = gObj.element.querySelector('.e-checkselectall').parentElement;\n if (checkAllBox.classList.contains('e-checkbox-disabled') &&\n gObj.pageSettings.totalRecordsCount > gObj.currentViewData.length) {\n removeClass([checkAllBox], ['e-checkbox-disabled']);\n }\n }\n this.saveCell();\n if (gObj.isEdit || this.editNextValCell() || gObj.isEdit) {\n return;\n }\n var changes = this.getBatchChanges();\n if (this.parent.selectionSettings.type === 'Multiple' && changes[\"\" + deletedRecords].length &&\n this.parent.selectionSettings.persistSelection) {\n changes[\"\" + deletedRecords] = this.removeSelectedData;\n this.removeSelectedData = [];\n }\n var original = {\n changedRecords: this.parent.getRowsObject()\n .filter(function (row) { return row.isDirty && ['add', 'delete'].indexOf(row.edit) === -1; })\n .map(function (row) { return row.data; })\n };\n var args = { batchChanges: changes, cancel: false };\n gObj.trigger(events.beforeBatchSave, args, function (beforeBatchSaveArgs) {\n if (beforeBatchSaveArgs.cancel) {\n return;\n }\n gObj.showSpinner();\n gObj.notify(events.bulkSave, { changes: changes, original: original });\n });\n gObj.editModule.resetMovableContentValidation();\n };\n BatchEdit.prototype.getBatchChanges = function () {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n var rows = this.parent.getRowsObject();\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.isDirty) {\n switch (row.edit) {\n case 'add':\n changes.addedRecords.push(row.changes);\n break;\n case 'delete':\n changes.deletedRecords.push(row.data);\n break;\n default:\n changes.changedRecords.push(row.changes);\n }\n }\n }\n return changes;\n };\n /**\n * @param {string} uid - specifes the uid\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.removeRowObjectFromUID = function (uid) {\n var rows = this.parent.getRowsObject();\n var i = 0;\n for (var len = rows.length; i < len; i++) {\n if (rows[parseInt(i.toString(), 10)].uid === uid) {\n break;\n }\n }\n gridActionHandler(this.parent, function (tableName, rows) {\n rows.splice(i, 1);\n }, getGridRowObjects(this.parent));\n };\n /**\n * @param {Row} row - specifies the row object\n * @param {freezeTable} newTableName - specifies the table name\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.addRowObject = function (row, newTableName) {\n var gObj = this.parent;\n var isTop = gObj.editSettings.newRowPosition === 'Top';\n gridActionHandler(this.parent, function (tableName, rows) {\n var rowClone = row.clone();\n if (gObj.isFrozenGrid()) {\n if (newTableName === tableName) {\n if (isTop) {\n rows.unshift(rowClone);\n }\n else {\n rows.push(rowClone);\n }\n }\n }\n else {\n if (isTop) {\n rows.unshift(rowClone);\n }\n else {\n rows.push(rowClone);\n }\n }\n }, getGridRowObjects(this.parent), true);\n };\n // tslint:disable-next-line:max-func-body-length\n BatchEdit.prototype.bulkDelete = function (fieldname, data) {\n var _this = this;\n this.removeSelectedData = [];\n var gObj = this.parent;\n var index = gObj.selectedRowIndex;\n var selectedRows = gObj.getSelectedRows();\n var args = {\n primaryKey: this.parent.getPrimaryKeyFieldNames(),\n rowIndex: index,\n rowData: data ? data : gObj.getSelectedRecords()[0],\n cancel: false\n };\n if (data) {\n args.row = gObj.editModule.deleteRowUid ? gObj.getRowElementByUID(gObj.editModule.deleteRowUid)\n : gObj.getRows()[gObj.getCurrentViewRecords().indexOf(data)];\n }\n else {\n args.row = data ? gObj.getRows()[parseInt(index.toString(), 10)] : selectedRows[0];\n }\n if (!args.row) {\n return;\n }\n // tslint:disable-next-line:max-func-body-length\n gObj.trigger(events.beforeBatchDelete, args, function (beforeBatchDeleteArgs) {\n if (beforeBatchDeleteArgs.cancel) {\n return;\n }\n _this.removeSelectedData = gObj.getSelectedRecords();\n gObj.clearSelection();\n beforeBatchDeleteArgs.row = beforeBatchDeleteArgs.row ?\n beforeBatchDeleteArgs.row : data ? gObj.getRows()[parseInt(index.toString(), 10)] : selectedRows[0];\n if (_this.parent.isFrozenGrid()) {\n if (data) {\n index = parseInt(beforeBatchDeleteArgs.row.getAttribute(literals.dataRowIndex), 10);\n selectedRows = [];\n selectedRows.push(gObj.getRowByIndex(index));\n selectedRows.push(gObj.getMovableRowByIndex(index));\n if (gObj.getFrozenMode() === literals.leftRight) {\n selectedRows.push(gObj.getFrozenRightRowByIndex(index));\n }\n }\n for (var i = 0; i < selectedRows.length; i++) {\n var uid = selectedRows[parseInt(i.toString(), 10)].getAttribute('data-uid');\n if (selectedRows[parseInt(i.toString(), 10)].classList.contains('e-insertedrow')) {\n _this.removeRowObjectFromUID(uid);\n remove(selectedRows[parseInt(i.toString(), 10)]);\n }\n else {\n var rowObj = gObj.getRowObjectFromUID(uid);\n rowObj.isDirty = true;\n rowObj.edit = 'delete';\n classList(selectedRows[parseInt(i.toString(), 10)], ['e-hiddenrow', 'e-updatedtd'], []);\n if (gObj.frozenRows && index < gObj.frozenRows && gObj.getMovableDataRows().length >= gObj.frozenRows) {\n gObj.getMovableHeaderTbody().appendChild(gObj.getMovableRowByIndex(gObj.frozenRows - 1));\n gObj.getFrozenHeaderTbody().appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n if (gObj.getFrozenMode() === literals.leftRight) {\n gObj.getFrozenRightHeaderTbody().appendChild(gObj.getFrozenRightRowByIndex(gObj.frozenRows - 1));\n }\n }\n if (gObj.frozenRows && index < gObj.frozenRows && gObj.getDataRows().length >= gObj.frozenRows) {\n gObj.getHeaderTable().querySelector(literals.tbody).appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n delete selectedRows[parseInt(i.toString(), 10)];\n }\n }\n else if (!_this.parent.isFrozenGrid() && (selectedRows.length === 1 || data)) {\n var uid = beforeBatchDeleteArgs.row.getAttribute('data-uid');\n uid = data && _this.parent.editModule.deleteRowUid ? uid = _this.parent.editModule.deleteRowUid : uid;\n if (beforeBatchDeleteArgs.row.classList.contains('e-insertedrow')) {\n _this.removeRowObjectFromUID(uid);\n remove(beforeBatchDeleteArgs.row);\n }\n else {\n var rowObj = gObj.getRowObjectFromUID(uid);\n rowObj.isDirty = true;\n rowObj.edit = 'delete';\n classList(beforeBatchDeleteArgs.row, ['e-hiddenrow', 'e-updatedtd'], []);\n }\n delete beforeBatchDeleteArgs.row;\n }\n else {\n for (var i = 0; i < selectedRows.length; i++) {\n var uniqueid = selectedRows[parseInt(i.toString(), 10)].getAttribute('data-uid');\n if (selectedRows[parseInt(i.toString(), 10)].classList.contains('e-insertedrow')) {\n _this.removeRowObjectFromUID(uniqueid);\n remove(selectedRows[parseInt(i.toString(), 10)]);\n }\n else {\n classList(selectedRows[parseInt(i.toString(), 10)], ['e-hiddenrow', 'e-updatedtd'], []);\n var selectedRow = gObj.getRowObjectFromUID(uniqueid);\n selectedRow.isDirty = true;\n selectedRow.edit = 'delete';\n delete selectedRows[parseInt(i.toString(), 10)];\n }\n }\n }\n _this.refreshRowIdx();\n if (data) {\n gObj.editModule.deleteRowUid = undefined;\n if (gObj.getSelectedRows().length) {\n index = parseInt(gObj.getSelectedRows()[0].getAttribute(literals.dataRowIndex), 10);\n }\n }\n if (!gObj.isCheckBoxSelection) {\n gObj.selectRow(index);\n }\n gObj.trigger(events.batchDelete, beforeBatchDeleteArgs);\n gObj.notify(events.batchDelete, { rows: _this.parent.getRowsObject() });\n gObj.notify(events.toolbarRefresh, {});\n });\n };\n BatchEdit.prototype.refreshRowIdx = function () {\n var gObj = this.parent;\n var rows = gObj.getAllDataRows(true);\n var dataRows = getGridRowElements(this.parent);\n var dataObjects = getGridRowObjects(this.parent);\n var _loop_2 = function (i, j, len) {\n if (rows[parseInt(i.toString(), 10)].classList.contains(literals.row) && !rows[parseInt(i.toString(), 10)].classList.contains('e-hiddenrow')) {\n gridActionHandler(this_2.parent, function (tableName, rowElements, rowObjects) {\n rowElements[parseInt(i.toString(), 10)].setAttribute(literals.dataRowIndex, j.toString());\n rowElements[parseInt(i.toString(), 10)].setAttribute(literals.ariaRowIndex, (j + 1).toString());\n rowObjects[parseInt(i.toString(), 10)].index = j;\n }, dataRows, null, dataObjects);\n j++;\n }\n else {\n gridActionHandler(this_2.parent, function (tableName, rowElements, rowObjects) {\n rowElements[parseInt(i.toString(), 10)].removeAttribute(literals.dataRowIndex);\n rowElements[parseInt(i.toString(), 10)].removeAttribute(literals.ariaRowIndex);\n rowObjects[parseInt(i.toString(), 10)].index = -1;\n }, dataRows, null, dataObjects);\n }\n out_j_1 = j;\n };\n var this_2 = this, out_j_1;\n for (var i = 0, j = 0, len = rows.length; i < len; i++) {\n _loop_2(i, j, len);\n j = out_j_1;\n }\n };\n BatchEdit.prototype.getIndexFromData = function (data) {\n return inArray(data, this.parent.getCurrentViewRecords());\n };\n BatchEdit.prototype.bulkAddRow = function (data) {\n var _this = this;\n var gObj = this.parent;\n if (!gObj.editSettings.allowAdding) {\n if (gObj.isEdit) {\n this.saveCell();\n }\n return;\n }\n if (gObj.isEdit) {\n this.saveCell();\n this.parent.notify(events.editNextValCell, {});\n }\n if (gObj.isEdit) {\n return;\n }\n if (this.initialRender) {\n var visibleColumns = gObj.getVisibleColumns();\n for (var i = 0; i < visibleColumns.length; i++) {\n if (visibleColumns[parseInt(i.toString(), 10)].validationRules &&\n visibleColumns[parseInt(i.toString(), 10)].validationRules['required']) {\n var obj = { field: (visibleColumns[parseInt(i.toString(), 10)]['field']).slice(), cellIdx: i };\n this.validationColObj.push(obj);\n }\n }\n this.initialRender = false;\n }\n this.parent.element.classList.add('e-editing');\n var defaultData = data ? data : this.getDefaultData();\n var args = {\n defaultData: defaultData,\n primaryKey: gObj.getPrimaryKeyFieldNames(),\n cancel: false\n };\n gObj.trigger(events.beforeBatchAdd, args, function (beforeBatchAddArgs) {\n if (beforeBatchAddArgs.cancel) {\n return;\n }\n _this.isAdded = true;\n gObj.clearSelection();\n if (gObj.isFrozenGrid()) {\n var movableCnt = _this.parent.getMovableColumnsCount();\n var leftCnt = _this.parent.getFrozenLeftCount();\n var rightCnt = _this.parent.getFrozenRightColumnsCount();\n var tbody$$1 = gObj.getContentTable().querySelector(literals.tbody);\n var totCount = movableCnt + leftCnt + rightCnt;\n var tableTanName = void 0;\n var selectedRowAdd = [];\n var selectedRowAddCells = [];\n var col = void 0;\n var index = void 0;\n var tr = void 0;\n var mTr = void 0;\n var frTr = void 0;\n for (var i = 0; i < totCount;) {\n var row = new RowRenderer(_this.serviceLocator, null, _this.parent);\n var model = new RowModelGenerator(_this.parent);\n var modelData = model.generateRows([beforeBatchAddArgs.defaultData]);\n if (leftCnt > 0) {\n leftCnt = 0;\n tableTanName = 'frozen-left';\n totCount = leftCnt + rightCnt + movableCnt;\n }\n else if (movableCnt > 0) {\n movableCnt = 0;\n tableTanName = 'movable';\n totCount = leftCnt + rightCnt + movableCnt;\n }\n else {\n rightCnt = 0;\n tableTanName = 'frozen-right';\n totCount = leftCnt + rightCnt + movableCnt;\n }\n for (var i_1 = 0; i_1 < modelData.length; i_1++) {\n modelData[parseInt(i_1.toString(), 10)]\n .cells = splitFrozenRowObjectCells(_this.parent, modelData[parseInt(i_1.toString(), 10)].cells, tableTanName);\n }\n if (tableTanName === 'frozen-left') {\n tr = row.render(modelData[0], gObj.getColumns());\n tr.classList.add('e-insertedrow');\n }\n else if (tableTanName === 'movable') {\n mTr = row.render(modelData[0], gObj.getColumns());\n mTr.classList.add('e-insertedrow');\n }\n else {\n frTr = row.render(modelData[0], gObj.getColumns());\n frTr.classList.add('e-insertedrow');\n }\n for (var i_2 = 0; i_2 < _this.parent.groupSettings.columns.length; i_2++) {\n tr.insertBefore(_this.parent.createElement('td', { className: 'e-indentcell' }), tr.firstChild);\n modelData[0].cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n if (tbody$$1.querySelector('.e-emptyrow')) {\n var emptyRow = tbody$$1.querySelector('.e-emptyrow');\n emptyRow.parentNode.removeChild(emptyRow);\n _this.removeFrozenTbody();\n }\n if (tableTanName === 'frozen-left') {\n if (gObj.frozenRows && gObj.editSettings.newRowPosition === 'Top') {\n tbody$$1 = gObj.getHeaderTable().querySelector(literals.tbody);\n }\n else {\n tbody$$1 = gObj.getContentTable().querySelector(literals.tbody);\n }\n if (_this.parent.editSettings.newRowPosition === 'Top') {\n tbody$$1.insertBefore(tr, tbody$$1.firstChild);\n addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), ['e-updatedtd']);\n }\n else {\n tbody$$1.appendChild(tr);\n addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), ['e-updatedtd']);\n }\n }\n if (tableTanName === 'movable' || tableTanName === 'frozen-right') {\n _this.renderFrozenAddRow(mTr, frTr, tableTanName);\n }\n modelData[0].isDirty = true;\n modelData[0].changes = extend({}, {}, modelData[0].data, true);\n modelData[0].edit = 'add';\n _this.addRowObject(modelData[0], tableTanName);\n }\n _this.refreshRowIdx();\n _this.focus.forgetPrevious();\n gObj.notify(events.batchAdd, { rows: _this.parent.getRowsObject(), args: { isFrozen: _this.parent.isFrozenGrid() } });\n var changes = _this.getBatchChanges();\n var btmIdx = _this.getBottomIndex();\n if (_this.parent.editSettings.newRowPosition === 'Top') {\n gObj.selectRow(0);\n }\n else {\n gObj.selectRow(btmIdx);\n }\n if (!data) {\n index = _this.findNextEditableCell(0, true);\n col = gObj.getColumns()[parseInt(index.toString(), 10)];\n if (_this.parent.editSettings.newRowPosition === 'Top') {\n _this.editCell(0, col.field, true);\n }\n else {\n _this.editCell(btmIdx, col.field, true);\n }\n }\n if (_this.parent.aggregates.length > 0 && (data || changes[literals.addedRecords].length)) {\n _this.parent.notify(events.refreshFooterRenderer, {});\n }\n if (tr) {\n alignFrozenEditForm(mTr.querySelector('td:not(.e-hide)'), tr.querySelector('td:not(.e-hide)'));\n selectedRowAdd.push(tr);\n selectedRowAddCells.push(tr.cells);\n }\n selectedRowAdd.push(mTr);\n selectedRowAddCells.push(mTr.cells);\n if (frTr) {\n selectedRowAdd.push(frTr);\n selectedRowAddCells.push(frTr.cells);\n }\n var args1 = {\n defaultData: beforeBatchAddArgs.defaultData, row: selectedRowAdd,\n columnObject: col, columnIndex: index, primaryKey: beforeBatchAddArgs.primaryKey, cell: selectedRowAddCells\n };\n gObj.trigger(events.batchAdd, args1);\n }\n else {\n var row = new RowRenderer(_this.serviceLocator, null, _this.parent);\n var model = new RowModelGenerator(_this.parent);\n var modelData = model.generateRows([beforeBatchAddArgs.defaultData]);\n var tr = row.render(modelData[0], gObj.getColumns());\n var col = void 0;\n var index = void 0;\n for (var i = 0; i < _this.parent.groupSettings.columns.length; i++) {\n tr.insertBefore(_this.parent.createElement('td', { className: 'e-indentcell' }), tr.firstChild);\n modelData[0].cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n var tbody = gObj.getContentTable().querySelector(literals.tbody);\n tr.classList.add('e-insertedrow');\n if (tbody.querySelector('.e-emptyrow')) {\n var emptyRow = tbody.querySelector('.e-emptyrow');\n emptyRow.parentNode.removeChild(emptyRow);\n _this.removeFrozenTbody();\n }\n if (gObj.frozenRows && gObj.editSettings.newRowPosition === 'Top') {\n tbody = gObj.getHeaderTable().querySelector(literals.tbody);\n }\n else {\n tbody = gObj.getContentTable().querySelector(literals.tbody);\n }\n if (_this.parent.editSettings.newRowPosition === 'Top') {\n tbody.insertBefore(tr, tbody.firstChild);\n }\n else {\n tbody.appendChild(tr);\n }\n addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), ['e-updatedtd']);\n modelData[0].isDirty = true;\n modelData[0].changes = extend({}, {}, modelData[0].data, true);\n modelData[0].edit = 'add';\n _this.addRowObject(modelData[0]);\n _this.refreshRowIdx();\n _this.focus.forgetPrevious();\n gObj.notify(events.batchAdd, { rows: _this.parent.getRowsObject(), args: { isFrozen: _this.parent.isFrozenGrid() } });\n var changes = _this.getBatchChanges();\n var btmIdx = _this.getBottomIndex();\n if (_this.parent.editSettings.newRowPosition === 'Top') {\n gObj.selectRow(0);\n }\n else {\n gObj.selectRow(btmIdx);\n }\n if (!data) {\n index = _this.findNextEditableCell(0, true);\n col = gObj.getColumns()[parseInt(index.toString(), 10)];\n if (_this.parent.editSettings.newRowPosition === 'Top') {\n _this.editCell(0, col.field, true);\n }\n else {\n _this.editCell(btmIdx, col.field, true);\n }\n }\n if (_this.parent.aggregates.length > 0 && (data || changes[literals.addedRecords].length)) {\n _this.parent.notify(events.refreshFooterRenderer, {});\n }\n var args1 = {\n defaultData: beforeBatchAddArgs.defaultData, row: tr,\n columnObject: col, columnIndex: index, primaryKey: beforeBatchAddArgs.primaryKey,\n cell: !isNullOrUndefined(index) ? tr.cells[parseInt(index.toString(), 10)] : undefined\n };\n gObj.trigger(events.batchAdd, args1);\n }\n });\n };\n BatchEdit.prototype.renderFrozenAddRow = function (mTr, frTr, tableName$$1) {\n var gObj = this.parent;\n var mTbody;\n var frTbody;\n if (tableName$$1 === 'movable') {\n if (gObj.frozenRows && gObj.editSettings.newRowPosition === 'Top') {\n mTbody = this.parent.getMovableHeaderTbody();\n }\n else {\n mTbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector(literals.tbody);\n }\n if (gObj.editSettings.newRowPosition === 'Top') {\n mTbody.insertBefore(mTr, mTbody.firstChild);\n }\n else {\n mTbody.appendChild(mTr);\n }\n addClass([].slice.call(mTr.getElementsByClassName(literals.rowCell)), ['e-updatedtd']);\n }\n if (tableName$$1 === 'frozen-right') {\n if (gObj.frozenRows && gObj.editSettings.newRowPosition === 'Top') {\n frTbody = this.parent.getFrozenRightHeaderTbody();\n }\n else {\n frTbody = this.parent.getContent().querySelector('.e-frozen-right-content').querySelector(literals.tbody);\n }\n if (gObj.editSettings.newRowPosition === 'Top') {\n frTbody.insertBefore(frTr, frTbody.firstChild);\n }\n else {\n frTbody.appendChild(frTr);\n }\n addClass([].slice.call(frTr.getElementsByClassName(literals.rowCell)), ['e-updatedtd']);\n alignFrozenEditForm(frTr.querySelector('td:not(.e-hide)'), mTr.querySelector('td:not(.e-hide)'));\n }\n if (gObj.height === 'auto') {\n gObj.notify(events.frozenHeight, {});\n }\n };\n BatchEdit.prototype.removeFrozenTbody = function () {\n var gObj = this.parent;\n if (gObj.isFrozenGrid()) {\n var moveTbody = gObj.getContent().querySelector('.' + literals.movableContent).querySelector(literals.tbody);\n (moveTbody.firstElementChild).parentNode.removeChild(moveTbody.firstElementChild);\n if (gObj.getFrozenMode() === literals.leftRight) {\n var frTbody = gObj.getContent().querySelector('.e-frozen-right-content').querySelector(literals.tbody);\n (frTbody.firstElementChild).parentNode.removeChild(frTbody.firstElementChild);\n }\n }\n };\n BatchEdit.prototype.renderMovable = function (ele, rightEle) {\n var mEle = ele.cloneNode(true);\n var movable = this.parent.getMovableColumnsCount();\n var left = this.parent.getFrozenLeftCount();\n var right = this.parent.getFrozenRightColumnsCount();\n sliceElements(ele, 0, left);\n sliceElements(mEle, left, right ? mEle.children.length - right : mEle.children.length);\n sliceElements(rightEle, left + movable, rightEle.children.length);\n return mEle;\n };\n BatchEdit.prototype.findNextEditableCell = function (columnIndex, isAdd, isValOnly) {\n var cols = this.parent.getColumns();\n var endIndex = cols.length;\n var validation;\n for (var i = columnIndex; i < endIndex; i++) {\n validation = isValOnly ? isNullOrUndefined(cols[parseInt(i.toString(), 10)].validationRules) : false;\n if (!isAdd && this.checkNPCell(cols[parseInt(i.toString(), 10)])) {\n return i;\n }\n else if (isAdd && (!cols[parseInt(i.toString(), 10)].template || cols[parseInt(i.toString(), 10)].field)\n && cols[parseInt(i.toString(), 10)].visible && !(cols[parseInt(i.toString(), 10)].isIdentity\n && cols[parseInt(i.toString(), 10)].isPrimaryKey) && !validation) {\n return i;\n }\n }\n return -1;\n };\n BatchEdit.prototype.checkNPCell = function (col) {\n return !col.template && col.visible && !col.isPrimaryKey && !col.isIdentity && col.allowEditing;\n };\n BatchEdit.prototype.getDefaultData = function () {\n var gObj = this.parent;\n var data = {};\n var dValues = { 'number': 0, 'string': null, 'boolean': false, 'date': null, 'datetime': null };\n for (var _i = 0, _a = (gObj.columnModel); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.field) {\n setValue(col.field, Object.keys(col).indexOf('defaultValue') >= 0 ? col.defaultValue : dValues[col.type], data);\n }\n }\n return data;\n };\n BatchEdit.prototype.setCellIdx = function (target) {\n var gLen = 0;\n if (this.parent.allowGrouping) {\n gLen = this.parent.groupSettings.columns.length;\n }\n this.cellDetails.cellIndex = target.cellIndex - gLen;\n this.cellDetails.rowIndex = parseInt(target.getAttribute('index'), 10);\n };\n BatchEdit.prototype.editCell = function (index, field, isAdd) {\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n this.index = index;\n this.field = field;\n this.isAdd = isAdd;\n var checkEdit = gObj.isEdit && !(this.cellDetails.column.field === field\n && (this.cellDetails.rowIndex === index && this.parent.getDataRows().length - 1 !== index && this.prevEditedBatchCell));\n if (gObj.editSettings.allowEditing) {\n if (!checkEdit && (col.allowEditing || (!col.allowEditing && gObj.focusModule.active\n && gObj.focusModule.active.getTable().rows[this.crtRowIndex]\n && gObj.focusModule.active.getTable().rows[this.crtRowIndex].classList.contains('e-insertedrow')))) {\n this.editCellExtend(index, field, isAdd);\n }\n else if (checkEdit) {\n this.editNext = true;\n this.saveCell();\n }\n }\n };\n BatchEdit.prototype.editCellExtend = function (index, field, isAdd) {\n var _this = this;\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n var keys = gObj.getPrimaryKeyFieldNames();\n if (gObj.isEdit) {\n return;\n }\n var row;\n var mRowData;\n var rowData = extend({}, {}, this.getDataByIndex(index), true);\n if (col.getFreezeTableName() === 'movable' || col.getFreezeTableName() === literals.frozenRight) {\n row = col.getFreezeTableName() === 'movable' ? gObj.getMovableDataRows()[parseInt(index.toString(), 10)] : gObj.getFrozenRightDataRows()[parseInt(index.toString(), 10)];\n mRowData = this.parent.getRowObjectFromUID(row.getAttribute('data-uid'));\n rowData = mRowData.changes ? extend({}, {}, mRowData.changes, true) : rowData;\n }\n else {\n row = gObj.getDataRows()[parseInt(index.toString(), 10)];\n rowData = extend({}, {}, this.getDataByIndex(index), true);\n }\n if ((keys[0] === col.field && !row.classList.contains('e-insertedrow')) || col.columns ||\n (col.isPrimaryKey && col.isIdentity) || col.commands) {\n this.parent.isLastCellPrimaryKey = true;\n return;\n }\n this.parent.isLastCellPrimaryKey = false;\n this.parent.element.classList.add('e-editing');\n var rowObj = gObj.getRowObjectFromUID(row.getAttribute('data-uid'));\n var cells = [].slice.apply(row.cells);\n var args = {\n columnName: col.field, isForeignKey: !isNullOrUndefined(col.foreignKeyValue),\n primaryKey: keys, rowData: rowData,\n validationRules: extend({}, col.validationRules ? col.validationRules : {}),\n value: getObject(col.field, rowData),\n type: !isAdd ? 'edit' : 'add', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n args.cell = cells[this.getColIndex(cells, this.getCellIdx(col.uid))];\n args.row = row;\n args.columnObject = col;\n if (!args.cell) {\n return;\n }\n gObj.trigger(events.cellEdit, args, function (cellEditArgs) {\n if (cellEditArgs.cancel) {\n return;\n }\n cellEditArgs.cell = cellEditArgs.cell ? cellEditArgs.cell : cells[_this.getColIndex(cells, _this.getCellIdx(col.uid))];\n cellEditArgs.row = cellEditArgs.row ? cellEditArgs.row : row;\n cellEditArgs.columnObject = cellEditArgs.columnObject ? cellEditArgs.columnObject : col;\n cellEditArgs.columnObject.index = isNullOrUndefined(cellEditArgs.columnObject.index) ? 0 : cellEditArgs.columnObject.index;\n _this.cellDetails = {\n rowData: rowData, column: col, value: cellEditArgs.value, isForeignKey: cellEditArgs.isForeignKey, rowIndex: index,\n cellIndex: parseInt(cellEditArgs.cell.getAttribute(literals.dataColIndex), 10),\n foreignKeyData: cellEditArgs.foreignKeyData\n };\n if (cellEditArgs.cell.classList.contains('e-updatedtd')) {\n _this.isColored = true;\n cellEditArgs.cell.classList.remove('e-updatedtd');\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n if (!gObj.isCheckBoxSelection || !gObj.isPersistSelection) {\n gObj.selectRow(_this.cellDetails.rowIndex, true);\n }\n _this.renderer.update(cellEditArgs);\n _this.parent.notify(events.batchEditFormRendered, cellEditArgs);\n _this.form = select('#' + gObj.element.id + 'EditForm', gObj.element);\n gObj.editModule.applyFormValidation([col]);\n _this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n });\n };\n BatchEdit.prototype.updateCell = function (rowIndex, field, value) {\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n var index = gObj.getColumnIndexByField(field);\n if (col && !col.isPrimaryKey && col.allowEditing) {\n var td_1 = getCellByColAndRowIndex(this.parent, col, rowIndex, index);\n var rowObj_1 = col.getFreezeTableName() === 'movable' ? this.parent.getMovableRowsObject()[parseInt(rowIndex.toString(), 10)] :\n col.getFreezeTableName() === literals.frozenRight ? gObj.getFrozenRightRowsObject()[parseInt(rowIndex.toString(), 10)]\n : gObj.getRowObjectFromUID(td_1.parentElement.getAttribute('data-uid'));\n this.refreshTD(td_1, col, rowObj_1, value);\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (((this.parent.isReact && this.parent.requireTemplateRef) || (isReactChild &&\n this.parent.parentDetails.parentInstObj.requireTemplateRef)) && col.template) {\n var thisRef_1 = this;\n var newReactTd_1 = this.newReactTd;\n thisRef_1.parent.renderTemplates(function () {\n thisRef_1.parent.trigger(events.queryCellInfo, {\n cell: newReactTd_1 || td_1, column: col, data: rowObj_1.changes\n });\n });\n }\n else if ((this.parent.isReact || isReactChild) && col.template) {\n this.parent.renderTemplates();\n this.parent.trigger(events.queryCellInfo, {\n cell: this.newReactTd || td_1, column: col, data: rowObj_1.changes\n });\n }\n else {\n this.parent.trigger(events.queryCellInfo, {\n cell: this.newReactTd || td_1, column: col, data: rowObj_1.changes\n });\n }\n }\n };\n BatchEdit.prototype.setChanges = function (rowObj, field, value) {\n var currentRowObj;\n if (!this.parent.isFrozenGrid()) {\n if (!rowObj.changes) {\n rowObj.changes = extend({}, {}, rowObj.data, true);\n }\n if (!isNullOrUndefined(field)) {\n if (typeof value === 'string') {\n value = this.parent.sanitize(value);\n }\n DataUtil.setValue(field, value, rowObj.changes);\n }\n if (rowObj.data[\"\" + field] !== value) {\n var type = this.parent.getColumnByField(field).type;\n if ((type === 'date' || type === 'datetime')) {\n if (new Date(rowObj.data[\"\" + field]).toString() !== new Date(value).toString()) {\n rowObj.isDirty = true;\n }\n }\n else {\n rowObj.isDirty = true;\n }\n }\n }\n else {\n var rowEle = this.parent.getRowElementByUID(rowObj.uid);\n var rowIndex = parseInt(rowEle.getAttribute(literals.dataRowIndex), 10);\n currentRowObj = this.parent.getRowsObject()[parseInt(rowIndex.toString(), 10)];\n if (!currentRowObj.changes) {\n currentRowObj.changes = extend({}, {}, rowObj.data, true);\n }\n if (!isNullOrUndefined(field)) {\n setValue(field, value, currentRowObj.changes);\n }\n var movableRowObject = this.parent.getMovableRowsObject()[parseInt(rowIndex.toString(), 10)];\n movableRowObject.changes = extend({}, {}, currentRowObj.changes, true);\n if (rowObj.data[\"\" + field] !== value) {\n movableRowObject.isDirty = true;\n currentRowObj.isDirty = true;\n }\n if (this.parent.getFrozenMode() === literals.leftRight) {\n var frRowObject = this.parent.getFrozenRightRowsObject()[parseInt(rowIndex.toString(), 10)];\n frRowObject.changes = extend({}, {}, currentRowObj.changes, true);\n if (rowObj.data[\"\" + field] !== value) {\n frRowObject.isDirty = true;\n }\n }\n }\n };\n BatchEdit.prototype.updateRow = function (index, data) {\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var col = keys_1[_i];\n this.updateCell(index, col, data[\"\" + col]);\n }\n };\n BatchEdit.prototype.getCellIdx = function (uid) {\n var cIdx = this.parent.getColumnIndexByUid(uid) + this.parent.groupSettings.columns.length;\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n if (this.parent.isRowDragable()) {\n cIdx++;\n }\n return cIdx;\n };\n BatchEdit.prototype.refreshTD = function (td, column, rowObj, value) {\n var cell = new CellRenderer(this.parent, this.serviceLocator);\n var rowcell;\n value = column.type === 'number' && !isNullOrUndefined(value) ? parseFloat(value) : value;\n this.setChanges(rowObj, column.field, value);\n var frzCols = this.parent.getFrozenColumns() || this.parent.getFrozenLeftColumnsCount()\n || this.parent.getFrozenRightColumnsCount();\n frzCols = frzCols && this.parent.isRowDragable() ? frzCols + 1 : frzCols;\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n if (frzCols && column.getFreezeTableName() === 'movable' && this.parent.getColumns().length === rowObj.cells.length) {\n rowcell = rowObj.cells.slice(frzCols, rowObj.cells.length);\n }\n else {\n rowcell = rowObj.cells;\n }\n var parentElement;\n var cellIndex;\n if (this.parent.isReact) {\n parentElement = td.parentElement;\n cellIndex = td.cellIndex;\n }\n var index = 0;\n if (frzCols) {\n index = column.getFreezeTableName() === 'movable' && this.parent.getFrozenMode() !== 'Right'\n ? frzCols : column.getFreezeTableName() === literals.frozenRight\n ? this.parent.getFrozenLeftColumnsCount() + this.parent.getMovableColumnsCount() : index;\n }\n cell.refreshTD(td, rowcell[this.getCellIdx(column.uid) - index], rowObj.changes, { 'index': this.getCellIdx(column.uid) });\n if (this.parent.isReact) {\n this.newReactTd = parentElement.cells[parseInt(cellIndex.toString(), 10)];\n parentElement.cells[parseInt(cellIndex.toString(), 10)].classList.add('e-updatedtd');\n }\n else {\n td.classList.add('e-updatedtd');\n }\n td.classList.add('e-updatedtd');\n this.parent.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.getColIndex = function (cells, index) {\n var cIdx = 0;\n if (this.parent.allowGrouping && this.parent.groupSettings.columns) {\n cIdx = this.parent.groupSettings.columns.length;\n }\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n if (this.parent.isRowDragable()) {\n cIdx++;\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[parseInt(m.toString(), 10)].getAttribute(literals.dataColIndex), 10);\n if (colIndex === index - cIdx) {\n return m;\n }\n }\n return -1;\n };\n BatchEdit.prototype.editNextValCell = function () {\n var gObj = this.parent;\n var insertedRows = gObj.element.querySelectorAll('.e-insertedrow');\n var isSingleInsert = insertedRows.length === 1 ? true : (gObj.getFrozenColumns() > 0 ||\n gObj.getFrozenRightColumnsCount() > 0 || gObj.getFrozenLeftColumnsCount() > 0) && (insertedRows.length === 2 ||\n insertedRows.length === 3) ? true : false;\n if (isSingleInsert && this.isAdded && !gObj.isEdit) {\n var btmIdx = this.getBottomIndex();\n for (var i = this.cellDetails.cellIndex; i < gObj.getColumns().length; i++) {\n if (gObj.isEdit) {\n return;\n }\n var index = this.findNextEditableCell(this.cellDetails.cellIndex + 1, true, true);\n var col = gObj.getColumns()[parseInt(index.toString(), 10)];\n if (col) {\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n this.editCell(btmIdx, col.field, true);\n }\n else {\n var args = { index: 0, column: col };\n this.parent.notify(events.nextCellIndex, args);\n this.editCell(args.index, col.field, true);\n }\n this.saveCell();\n }\n }\n if (!gObj.isEdit) {\n this.isAdded = false;\n }\n }\n else if (!isSingleInsert && this.isAdded && !gObj.isEdit && !gObj.isFrozenGrid()) {\n var editRowIdx = 0;\n if (gObj.editSettings.newRowPosition === 'Bottom') {\n var changes = this.getBatchChanges();\n editRowIdx = gObj.getCurrentViewRecords().length - changes[literals.deletedRecords].length;\n }\n for (var i = 0; i < insertedRows.length; i++) {\n if (!gObj.isEdit) {\n for (var j = 0; j < this.validationColObj.length; j++) {\n if (gObj.isEdit) {\n break;\n }\n else if (insertedRows[parseInt(i.toString(), 10)].querySelectorAll('td:not(.e-hide)')[this.validationColObj[parseInt(j.toString(), 10)].cellIdx].innerHTML === '') {\n this.editCell(insertedRows[parseInt(i.toString(), 10)]['rowIndex'], this.validationColObj[parseInt(j.toString(), 10)].field);\n if (this.validateFormObj()) {\n this.saveCell();\n }\n }\n }\n }\n else {\n break;\n }\n }\n if (!gObj.isEdit) {\n this.isAdded = false;\n }\n }\n else if (!isSingleInsert && this.isAdded && !gObj.isEdit && gObj.isFrozenGrid()) {\n var fLeftInsertedRow = gObj.getFrozenLeftContentTbody() ? gObj.getFrozenLeftContentTbody()\n .querySelectorAll('.e-insertedrow') : undefined;\n var fRightInsertedRow = gObj.getFrozenRightContentTbody() ? gObj.getFrozenRightContentTbody()\n .querySelectorAll('.e-insertedrow') : undefined;\n var mInsertedRow = gObj.getMovableContentTbody().querySelectorAll('.e-insertedrow');\n var editRowIdx = 0;\n var fLeftCount = gObj.getVisibleFrozenLeftCount() ? gObj.getVisibleFrozenLeftCount() :\n gObj.getFrozenColumns();\n var fRightCount = gObj.getVisibleFrozenRightCount();\n var mColumnCount = gObj.getVisibleMovableCount();\n if (gObj.editSettings.newRowPosition === 'Bottom') {\n var changes = this.getBatchChanges();\n editRowIdx = gObj.getCurrentViewRecords().length - changes[literals.deletedRecords].length;\n }\n else if (gObj.editSettings.newRowPosition === 'Top' && gObj.frozenRows) {\n fLeftInsertedRow = gObj.getFrozenHeaderTbody() ? gObj.getFrozenHeaderTbody()\n .querySelectorAll('.e-insertedrow') : undefined;\n fRightInsertedRow = gObj.getFrozenRightHeader() ? gObj.getFrozenRightHeader()\n .querySelectorAll('.e-insertedrow') : undefined;\n mInsertedRow = gObj.getMovableHeaderTbody().querySelectorAll('.e-insertedrow');\n }\n for (var i = 0; i < mInsertedRow.length; i++, editRowIdx++) {\n if (!gObj.isEdit) {\n for (var j = 0; j < this.validationColObj.length; j++) {\n if (gObj.isEdit) {\n break;\n }\n else if (fLeftCount && this.validationColObj[parseInt(j.toString(), 10)].cellIdx < fLeftCount) {\n if (fLeftInsertedRow[parseInt(i.toString(), 10)].querySelectorAll('td')[this.validationColObj[parseInt(j.toString(), 10)].cellIdx].innerText === '') {\n this.editCell(editRowIdx, this.validationColObj[parseInt(j.toString(), 10)].field);\n if (gObj.editModule.formObj.validate()) {\n this.saveCell();\n }\n }\n }\n else if (fRightCount && mColumnCount <= this.validationColObj[parseInt(j.toString(), 10)].cellIdx) {\n if (fRightInsertedRow[parseInt(i.toString(), 10)].querySelectorAll('td')[this.validationColObj[parseInt(j.toString(), 10)].cellIdx - (mColumnCount + fLeftCount)].innerText === '') {\n this.editCell(editRowIdx, this.validationColObj[parseInt(j.toString(), 10)].field);\n if (gObj.editModule.formObj.validate()) {\n this.saveCell();\n }\n }\n }\n else if (mInsertedRow[parseInt(i.toString(), 10)].querySelectorAll('td')[this.validationColObj[parseInt(j.toString(), 10)].cellIdx - fLeftCount].innerText === '') {\n this.editCell(editRowIdx, this.validationColObj[parseInt(j.toString(), 10)].field);\n if (gObj.editModule.formObj.validate()) {\n this.saveCell();\n }\n }\n }\n }\n else {\n break;\n }\n }\n if (!gObj.isEdit) {\n this.isAdded = false;\n }\n }\n };\n BatchEdit.prototype.escapeCellEdit = function () {\n var args = this.generateCellArgs();\n args.value = args.previousValue;\n if (args.value || !this.cellDetails.column.validationRules) {\n this.successCallBack(args, args.cell.parentElement, args.column, true)(args);\n }\n };\n BatchEdit.prototype.generateCellArgs = function () {\n var gObj = this.parent;\n this.parent.element.classList.remove('e-editing');\n var column = this.cellDetails.column;\n var obj = {};\n obj[column.field] = getObject(column.field, this.cellDetails.rowData);\n var editedData = gObj.editModule.getCurrentEditedData(this.form, obj);\n var cloneEditedData = extend({}, editedData);\n editedData = extend({}, editedData, this.cellDetails.rowData);\n var value = getObject(column.field, cloneEditedData);\n if (!isNullOrUndefined(column.field) && !isUndefined(value)) {\n setValue(column.field, value, editedData);\n }\n var args = {\n columnName: column.field,\n value: getObject(column.field, editedData),\n rowData: this.cellDetails.rowData,\n column: column,\n previousValue: this.cellDetails.value,\n isForeignKey: this.cellDetails.isForeignKey,\n cancel: false\n };\n args.cell = this.form.parentElement;\n args.columnObject = column;\n return args;\n };\n BatchEdit.prototype.saveCell = function (isForceSave) {\n if (this.preventSaveCell || !this.form) {\n return;\n }\n var gObj = this.parent;\n if (!isForceSave && (!gObj.isEdit || this.validateFormObj())) {\n return;\n }\n this.preventSaveCell = true;\n var args = this.generateCellArgs();\n var tr = args.cell.parentElement;\n var col = args.column;\n if (!isForceSave) {\n gObj.trigger(events.cellSave, args, this.successCallBack(args, tr, col));\n gObj.notify(events.batchForm, { formObj: this.form });\n }\n else {\n this.successCallBack(args, tr, col)(args);\n }\n };\n BatchEdit.prototype.successCallBack = function (cellSaveArgs, tr, column, isEscapeCellEdit) {\n var _this = this;\n return function (cellSaveArgs) {\n var gObj = _this.parent;\n cellSaveArgs.cell = cellSaveArgs.cell ? cellSaveArgs.cell : _this.form.parentElement;\n cellSaveArgs.columnObject = cellSaveArgs.columnObject ? cellSaveArgs.columnObject : column;\n cellSaveArgs.columnObject.index = isNullOrUndefined(cellSaveArgs.columnObject.index) ? 0 : cellSaveArgs.columnObject.index;\n if (cellSaveArgs.cancel) {\n _this.preventSaveCell = false;\n if (_this.editNext) {\n _this.editNext = false;\n if (_this.cellDetails.rowIndex === _this.index && _this.cellDetails.column.field === _this.field) {\n return;\n }\n _this.editCellExtend(_this.index, _this.field, _this.isAdd);\n }\n return;\n }\n gObj.editModule.destroyWidgets([column]);\n gObj.isEdit = false;\n gObj.editModule.destroyForm();\n _this.parent.notify(events.tooltipDestroy, {});\n var rowObj = parentsUntil(cellSaveArgs.cell, literals.movableContent)\n || parentsUntil(cellSaveArgs.cell, literals.movableHeader) ? gObj.getRowObjectFromUID(tr.getAttribute('data-uid'), true)\n : gObj.getRowObjectFromUID(tr.getAttribute('data-uid'));\n if (gObj.getFrozenMode() === literals.leftRight && (parentsUntil(cellSaveArgs.cell, 'e-frozen-right-header')\n || parentsUntil(cellSaveArgs.cell, 'e-frozen-right-content'))) {\n rowObj = gObj.getRowObjectFromUID(tr.getAttribute('data-uid'), false, true);\n }\n _this.refreshTD(cellSaveArgs.cell, column, rowObj, cellSaveArgs.value);\n if (_this.parent.isReact) {\n cellSaveArgs.cell = _this.newReactTd;\n }\n removeClass([tr], [literals.editedRow, 'e-batchrow']);\n removeClass([cellSaveArgs.cell], ['e-editedbatchcell', 'e-boolcell']);\n if (!isNullOrUndefined(cellSaveArgs.value) && cellSaveArgs.value.toString() ===\n (!isNullOrUndefined(_this.cellDetails.value) ? _this.cellDetails.value : '').toString() && !_this.isColored\n || (isNullOrUndefined(cellSaveArgs.value) && isNullOrUndefined(rowObj.data[column.field]) &&\n isNullOrUndefined(_this.cellDetails.value) && !cellSaveArgs.cell.parentElement.classList.contains('e-insertedrow'))) {\n cellSaveArgs.cell.classList.remove('e-updatedtd');\n }\n if (isNullOrUndefined(isEscapeCellEdit)) {\n var isReactCompiler = gObj.isReact && column.template && typeof (column.template) !== 'string';\n var isReactChild = gObj.parentDetails && gObj.parentDetails.parentInstObj\n && gObj.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n if (gObj.requireTemplateRef) {\n gObj.renderTemplates(function () {\n gObj.trigger(events.cellSaved, cellSaveArgs);\n });\n }\n else {\n gObj.renderTemplates();\n gObj.trigger(events.cellSaved, cellSaveArgs);\n }\n }\n else {\n gObj.trigger(events.cellSaved, cellSaveArgs);\n }\n }\n gObj.notify(events.toolbarRefresh, {});\n _this.isColored = false;\n if (_this.parent.aggregates.length > 0) {\n _this.parent.notify(events.refreshFooterRenderer, {});\n if (_this.parent.groupSettings.columns.length > 0 && !_this.isAddRow(_this.cellDetails.rowIndex)) {\n _this.parent.notify(events.groupAggregates, {});\n }\n }\n _this.preventSaveCell = false;\n if (_this.editNext) {\n _this.editNext = false;\n if (_this.cellDetails.rowIndex === _this.index && _this.cellDetails.column.field === _this.field && _this.prevEditedBatchCell) {\n return;\n }\n var col = gObj.getColumnByField(_this.field);\n if (col && (col.allowEditing || (!col.allowEditing && gObj.focusModule.active\n && gObj.focusModule.active.getTable().rows[_this.crtRowIndex]\n && gObj.focusModule.active.getTable().rows[_this.crtRowIndex].classList.contains('e-insertedrow')))) {\n _this.editCellExtend(_this.index, _this.field, _this.isAdd);\n }\n }\n if (isEscapeCellEdit) {\n gObj.notify(events.restoreFocus, {});\n }\n };\n };\n BatchEdit.prototype.prevEditedBatchCellMatrix = function () {\n var editedBatchCellMatrix = [];\n var gObj = this.parent;\n var editedBatchCell = gObj.focusModule.active ? gObj.focusModule.active.getTable().querySelector('.e-editedbatchcell')\n : undefined;\n if (editedBatchCell) {\n var tr = editedBatchCell.parentElement;\n var rowIndex = [].slice.call(this.parent.focusModule.active.getTable().rows).indexOf(tr);\n var cellIndex = [].slice.call(tr.cells).indexOf(editedBatchCell);\n editedBatchCellMatrix = [rowIndex, cellIndex];\n }\n return editedBatchCellMatrix;\n };\n BatchEdit.prototype.getDataByIndex = function (index) {\n var row = this.parent.getRowObjectFromUID(this.parent.getDataRows()[parseInt(index.toString(), 10)].getAttribute('data-uid'));\n return row.changes ? row.changes : row.data;\n };\n BatchEdit.prototype.keyDownHandler = function (e) {\n if (this.addBatchRow || ((e.action === 'tab' || e.action === 'shiftTab') && this.parent.isEdit)) {\n var gObj = this.parent;\n var btmIdx = this.getBottomIndex();\n var rowcell = parentsUntil(e.target, literals.rowCell);\n if (this.addBatchRow || (rowcell && !this.parent.isReact)) {\n var cell = rowcell ? rowcell.querySelector('.e-field') : undefined;\n if (this.addBatchRow || cell) {\n var visibleColumns = this.parent.getVisibleColumns();\n var columnIndex = e.action === 'tab' ? visibleColumns.length - 1 : 0;\n if (this.addBatchRow\n || visibleColumns[parseInt(columnIndex.toString(), 10)].field === cell.getAttribute('id').slice(this.parent.element.id.length)) {\n if (this.cellDetails.rowIndex === btmIdx && e.action === 'tab') {\n if (gObj.editSettings.newRowPosition === 'Top') {\n gObj.editSettings.newRowPosition = 'Bottom';\n this.addRecord();\n gObj.editSettings.newRowPosition = 'Top';\n }\n else {\n this.addRecord();\n }\n this.addBatchRow = false;\n }\n else {\n this.saveCell();\n }\n }\n }\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.addCancelWhilePaging = function () {\n if (this.validateFormObj()) {\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.isColored = false;\n }\n };\n BatchEdit.prototype.getBottomIndex = function () {\n var changes = this.getBatchChanges();\n return this.parent.getCurrentViewRecords().length + changes[literals.addedRecords].length -\n changes[literals.deletedRecords].length - 1;\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `DialogEdit` module is used to handle dialog editing actions.\n *\n * @hidden\n */\nvar DialogEdit = /** @class */ (function (_super) {\n __extends(DialogEdit, _super);\n function DialogEdit(parent, serviceLocator, renderer) {\n var _this = \n //constructor\n _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n DialogEdit.prototype.closeEdit = function () {\n //closeEdit\n _super.prototype.closeEdit.call(this);\n };\n DialogEdit.prototype.addRecord = function (data, index) {\n //addRecord\n _super.prototype.addRecord.call(this, data, index);\n };\n DialogEdit.prototype.endEdit = function () {\n //endEdit\n _super.prototype.endEdit.call(this);\n };\n DialogEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n DialogEdit.prototype.deleteRecord = function (fieldname, data) {\n //deleteRecord\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n DialogEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return DialogEdit;\n}(NormalEdit));\nexport { DialogEdit };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend } from '@syncfusion/ej2-base';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { isEditable, getObject, getCustomDateFormat } from '../base/util';\nimport { EditCellBase } from './edit-cell-base';\n/**\n * `DatePickerEditCell` is used to handle datepicker cell type editing.\n *\n * @hidden\n */\nvar DatePickerEditCell = /** @class */ (function (_super) {\n __extends(DatePickerEditCell, _super);\n function DatePickerEditCell() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DatePickerEditCell.prototype.write = function (args) {\n this.edit = this.parent.editModule;\n if (args.column.editType === 'datepickeredit') {\n this.obj = new DatePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl, this.parent.cssClass, this), args.column.edit.params));\n }\n else if (args.column.editType === 'datetimepickeredit') {\n this.obj = new DateTimePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl, this.parent.cssClass, this), args.column.edit.params));\n }\n this.obj.appendTo(args.element);\n };\n return DatePickerEditCell;\n}(EditCellBase));\nexport { DatePickerEditCell };\n// eslint-disable-next-line\nfunction dateanddatetimerender(args, mode, rtl, css, datePickerEditCell) {\n var isInline = mode !== 'Dialog';\n var format = getCustomDateFormat(args.column.format, args.column.type);\n var value = getObject(args.column.field, args.rowData);\n value = value ? new Date(value) : null;\n return {\n floatLabelType: isInline ? 'Never' : 'Always',\n value: value,\n format: format,\n placeholder: isInline ?\n '' : args.column.headerText, enableRtl: rtl,\n enabled: isEditable(args.column, args.requestType, args.element),\n cssClass: css ? css : null,\n close: datePickerClose.bind(datePickerEditCell)\n };\n}\n// eslint-disable-next-line\nfunction datePickerClose(args) {\n if (args.event && args.event.action === 'escape') {\n this.edit.editCellDialogClose = true;\n }\n}\n","/**\n * `TemplateEditCell` is used to handle template cell.\n *\n * @hidden\n */\nvar TemplateEditCell = /** @class */ (function () {\n function TemplateEditCell(parent) {\n this.parent = parent;\n }\n TemplateEditCell.prototype.read = function (element, value) {\n return value;\n };\n TemplateEditCell.prototype.write = function () {\n //\n };\n TemplateEditCell.prototype.destroy = function () {\n //\n };\n return TemplateEditCell;\n}());\nexport { TemplateEditCell };\n","/**\n * Defines types of Render\n *\n * @hidden\n\n */\nexport var RenderType;\n(function (RenderType) {\n /* eslint-disable */\n /** Defines RenderType as Toolbar */\n RenderType[RenderType[\"Toolbar\"] = 0] = \"Toolbar\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Popup */\n RenderType[RenderType[\"Popup\"] = 2] = \"Popup\";\n /** Defines RenderType as LinkToolbar */\n RenderType[RenderType[\"LinkToolbar\"] = 3] = \"LinkToolbar\";\n /** Defines RenderType as TextToolbar */\n RenderType[RenderType[\"TextToolbar\"] = 4] = \"TextToolbar\";\n /** Defines RenderType as ImageToolbar */\n RenderType[RenderType[\"ImageToolbar\"] = 5] = \"ImageToolbar\";\n /** Defines RenderType as AudioToolbar */\n RenderType[RenderType[\"AudioToolbar\"] = 6] = \"AudioToolbar\";\n /** Defines RenderType as AudioToolbar */\n RenderType[RenderType[\"VideoToolbar\"] = 7] = \"VideoToolbar\";\n /** Defines RenderType as InlineToolbar */\n RenderType[RenderType[\"InlineToolbar\"] = 8] = \"InlineToolbar\";\n /** Defines RenderType as TableToolbar */\n RenderType[RenderType[\"TableToolbar\"] = 9] = \"TableToolbar\";\n /* eslint-enable */\n})(RenderType || (RenderType = {}));\n/**\n * Defines types to be used as Toolbar.\n */\nexport var ToolbarType;\n(function (ToolbarType) {\n /* eslint-disable */\n /** Defines ToolbarType as Standard */\n ToolbarType[\"Expand\"] = \"Expand\";\n /** Defines ToolbarType as MultiRow */\n ToolbarType[\"MultiRow\"] = \"MultiRow\";\n /** Defines ToolbarType as Scrollable */\n ToolbarType[\"Scrollable\"] = \"Scrollable\";\n /* eslint-enable */\n})(ToolbarType || (ToolbarType = {}));\n/**\n * Defines the type of dialog, which open or close in the Rich Text Editor.\n */\nexport var DialogType;\n(function (DialogType) {\n /* eslint-disable */\n /** Defines ToolbarType as Standard */\n DialogType[\"InsertLink\"] = \"InsertLink\";\n /** Defines ToolbarType as MultiRow */\n DialogType[\"InsertImage\"] = \"InsertImage\";\n /** Defines DialogType as Audio*/\n DialogType[\"InsertAudio\"] = \"InsertAudio\";\n /** Defines DialogType as Video*/\n DialogType[\"InsertVideo\"] = \"InsertVideo\";\n /** Defines ToolbarType as Scrollable */\n DialogType[\"InsertTable\"] = \"InsertTable\";\n /* eslint-enable */\n})(DialogType || (DialogType = {}));\n","import { closest, addClass, select } from '@syncfusion/ej2-base';\nimport { extend, getValue } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { EditRender } from '../renderer/edit-renderer';\nimport { BooleanEditCell } from '../renderer/boolean-edit-cell';\nimport { DropDownEditCell } from '../renderer/dropdown-edit-cell';\nimport { NumericEditCell } from '../renderer/numeric-edit-cell';\nimport { DefaultEditCell } from '../renderer/default-edit-cell';\nimport { InlineEdit } from './inline-edit';\nimport { BatchEdit } from './batch-edit';\nimport { DialogEdit } from './dialog-edit';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { parentsUntil, getComplexFieldID, getParsedFieldID, setComplexFieldID, getScrollBarWidth, setValidationRuels } from '../base/util';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { DatePickerEditCell } from '../renderer/datepicker-edit-cell';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { TemplateEditCell } from '../renderer/template-edit-cell';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { addRemoveEventListener, getColumnModelByFieldName, padZero } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for the Grid editing module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the servicelocator\n * @hidden\n */\n function Edit(parent, serviceLocator) {\n this.editType = { 'Inline': InlineEdit, 'Normal': InlineEdit, 'Batch': BatchEdit, 'Dialog': DialogEdit };\n this.isValidationApplied = false;\n /* @hidden */\n this.editCellDialogClose = false;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.l10n = this.serviceLocator.getService('localization');\n this.addEventListener();\n this.updateEditObj();\n this.createAlertDlg();\n this.createConfirmDlg();\n }\n Edit.prototype.updateColTypeObj = function () {\n var cols = this.parent.columnModel;\n for (var i = 0; i < cols.length; i++) {\n if (this.parent.editSettings.template || cols[parseInt(i.toString(), 10)].editTemplate) {\n var templteCell = 'templateedit';\n cols[parseInt(i.toString(), 10)].edit = extend(new Edit.editCellType[\"\" + templteCell](this.parent), cols[parseInt(i.toString(), 10)].edit || {});\n }\n else {\n cols[parseInt(i.toString(), 10)].edit = extend(new Edit.editCellType[cols[parseInt(i.toString(), 10)].editType\n && Edit.editCellType[cols[parseInt(i.toString(), 10)].editType] ?\n cols[parseInt(i.toString(), 10)].editType : 'defaultedit'](this.parent, this.serviceLocator), cols[parseInt(i.toString(), 10)].edit || {});\n }\n }\n this.parent.log('primary_column_missing');\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @param {NotifyArgs} e - specifies the notifyargs\n * @returns {void}\n * @hidden\n */\n Edit.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowAdding':\n case 'allowDeleting':\n case 'allowEditing':\n if (gObj.editSettings.allowAdding || gObj.editSettings.allowEditing || gObj.editSettings.allowDeleting) {\n this.initialEnd();\n }\n break;\n case 'mode':\n this.updateEditObj();\n gObj.isEdit = false;\n gObj.refresh();\n break;\n }\n }\n };\n Edit.prototype.updateEditObj = function () {\n if (this.editModule) {\n this.editModule.destroy();\n }\n this.renderer = new EditRender(this.parent, this.serviceLocator);\n this.editModule = new this.editType[this.parent.editSettings.mode](this.parent, this.serviceLocator, this.renderer);\n };\n Edit.prototype.initialEnd = function () {\n this.updateColTypeObj();\n };\n /**\n * Edits any bound record in the Grid by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n * @returns {void}\n */\n Edit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowEditing || gObj.isEdit || gObj.editSettings.mode === 'Batch') {\n return;\n }\n this.parent.element.classList.add('e-editing');\n if (!gObj.getSelectedRows().length) {\n if (!tr) {\n this.showDialog('EditOperationAlert', this.alertDObj);\n return;\n }\n }\n else if (!tr) {\n tr = gObj.getSelectedRows()[0];\n }\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Normal') {\n var idx = parseInt(tr.getAttribute('data-rowindex'), 10);\n tr = this.parent.getRowByIndex(idx);\n }\n this.isLastRow = tr.rowIndex === this.parent.getContent().querySelector('tr:last-child').rowIndex;\n if (tr.style.display === 'none') {\n return;\n }\n this.editModule.startEdit(tr);\n this.refreshToolbar();\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n this.parent.notify('start-edit', {});\n };\n /**\n * @param {Element} tr - specifies the tr element\n * @param {object} args - specifies the object\n * @param {Element} args.row -specfifes the row\n * @param {string} args.requestType - specifies the request type\n * @returns {void}\n * @hidden\n */\n Edit.prototype.checkLastRow = function (tr, args) {\n var checkLastRow = this.isLastRow;\n if (this.parent.height !== 'auto' && this.parent.editSettings.newRowPosition === 'Bottom' && args && args.requestType === 'add' &&\n this.parent.getContent().firstElementChild.offsetHeight > this.parent.getContentTable().scrollHeight) {\n addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), 'e-lastrowadded');\n }\n else if (checkLastRow && tr && tr.classList) {\n addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), 'e-lastrowcell');\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n Edit.prototype.closeEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog\n && this.parent.element.getElementsByClassName('e-updatedtd').length) {\n this.showDialog('CancelEdit', this.dialogObj);\n return;\n }\n this.parent.element.classList.remove('e-editing');\n this.editModule.closeEdit();\n this.refreshToolbar();\n this.parent.notify(events.closeEdit, {});\n };\n Edit.prototype.refreshToolbar = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * To adds a new row at the top with the given data. When data is not passed, it will add empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index) {\n if (!this.parent.editSettings.allowAdding) {\n return;\n }\n var args = { startEdit: true };\n if (!data) {\n this.parent.notify(events.virtualScrollAddActionBegin, args);\n }\n if (args.startEdit) {\n this.parent.element.classList.add('e-editing');\n this.editModule.addRecord(data, index);\n this.refreshToolbar();\n this.parent.notify('start-add', {});\n }\n };\n /**\n * Deletes a record with the given options. If fieldname and data are not given, the Grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldname - Defines the primary key field name of the column.\n * @param {Object} data - Defines the JSON data record to be deleted.\n * @returns {void}\n */\n Edit.prototype.deleteRecord = function (fieldname, data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowDeleting) {\n return;\n }\n if (!data) {\n if (!gObj.getSelectedRecords().length && isNullOrUndefined(gObj.commandDelIndex)) {\n this.showDialog('DeleteOperationAlert', this.alertDObj);\n return;\n }\n }\n if (gObj.editSettings.showDeleteConfirmDialog) {\n this.showDialog('ConfirmDelete', this.dialogObj);\n return;\n }\n this.editModule.deleteRecord(fieldname, data);\n };\n /**\n * Deletes a visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n Edit.prototype.deleteRow = function (tr) {\n this.deleteRowUid = tr.getAttribute('data-uid');\n var rowObj = this.parent.getRowObjectFromUID(this.deleteRowUid);\n if (!isNullOrUndefined(rowObj)) {\n this.deleteRecord(null, rowObj.data);\n }\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n Edit.prototype.endEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog &&\n (isNullOrUndefined(this.formObj) || this.formObj.validate())) {\n this.parent.editModule.saveCell();\n this.parent.notify(events.editNextValCell, {});\n if (isNullOrUndefined(this.formObj) || this.formObj.validate()) {\n this.showDialog('BatchSaveConfirm', this.dialogObj);\n return;\n }\n }\n this.endEditing();\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n * @returns {void}\n */\n Edit.prototype.updateCell = function (rowIndex, field, value) {\n this.editModule.updateCell(rowIndex, field, value);\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n Edit.prototype.updateRow = function (index, data) {\n this.editModule.updateRow(index, data);\n };\n /**\n * Resets added, edited, and deleted records in the batch mode.\n *\n * @returns {void}\n */\n Edit.prototype.batchCancel = function () {\n this.closeEdit();\n };\n /**\n * Bulk saves added, edited, and deleted records in the batch mode.\n *\n * @returns {void}\n */\n Edit.prototype.batchSave = function () {\n this.endEdit();\n };\n /**\n * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.\n *\n * @param {number} index - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform batch edit.\n * @returns {void}\n */\n Edit.prototype.editCell = function (index, field) {\n this.editModule.editCell(index, field);\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} returns whether the form is validated\n */\n Edit.prototype.editFormValidate = function () {\n var form1 = this.formObj ? this.formObj.validate() : true;\n var form2 = this.mFormObj ? this.mFormObj.validate() : true;\n var form3 = this.frFormObj ? this.frFormObj.validate() : true;\n return form1 && form2 && form3;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} returns the Object\n */\n Edit.prototype.getBatchChanges = function () {\n return this.editModule.getBatchChanges ? this.editModule.getBatchChanges() : {};\n };\n /**\n * Gets the current value of the edited component.\n *\n * @returns {Object} returns the Object\n */\n Edit.prototype.getCurrentEditCellData = function () {\n var obj = this.getCurrentEditedData(this.formObj.element, {});\n return obj[Object.keys(obj)[0]];\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n Edit.prototype.saveCell = function () {\n this.editModule.saveCell();\n };\n Edit.prototype.endEditing = function () {\n this.parent.element.classList.remove('e-editing');\n this.editModule.endEdit();\n this.refreshToolbar();\n };\n Edit.prototype.showDialog = function (content, obj) {\n obj.content = '
' + this.l10n.getConstant(content) + '
';\n obj.dataBind();\n obj.show();\n };\n Edit.prototype.getValueFromType = function (col, value) {\n var val = value;\n switch (col.type) {\n case 'number':\n val = !isNaN(parseFloat(value)) ? parseFloat(value) : null;\n break;\n case 'boolean':\n if (col.editType !== 'booleanedit') {\n val = value === this.l10n.getConstant('True') || value === true ? true : false;\n }\n break;\n case 'date':\n case 'datetime':\n if (col.editType !== 'datepickeredit' && col.editType !== 'datetimepickeredit'\n && value && value.length) {\n val = new Date(value);\n }\n else if (value === '') {\n val = null;\n }\n break;\n case 'dateonly':\n val = value && (value = new Date(value)) ?\n value.getFullYear() + '-' + padZero(value.getMonth() + 1) + '-' + padZero(value.getDate()) : null;\n break;\n }\n return val;\n };\n Edit.prototype.destroyToolTip = function () {\n var elements = [].slice.call(this.parent.element.getElementsByClassName('e-griderror'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n this.parent.getContent().firstElementChild.style.position = 'relative';\n };\n Edit.prototype.createConfirmDlg = function () {\n this.dialogObj = this.dlgWidget([\n {\n click: this.dlgOk.bind(this),\n buttonModel: { content: this.l10n.getConstant('OKButton'),\n cssClass: this.parent.cssClass ? 'e-primary' + ' ' + this.parent.cssClass : 'e-primary',\n isPrimary: true }\n },\n {\n click: this.dlgCancel.bind(this),\n buttonModel: { cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n content: this.l10n.getConstant('CancelButton') }\n }\n ], 'EditConfirm');\n };\n Edit.prototype.createAlertDlg = function () {\n this.alertDObj = this.dlgWidget([\n {\n click: this.alertClick.bind(this),\n buttonModel: { content: this.l10n.getConstant('OKButton'),\n cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n isPrimary: true }\n }\n ], 'EditAlert');\n };\n Edit.prototype.alertClick = function () {\n this.alertDObj.hide();\n };\n Edit.prototype.dlgWidget = function (btnOptions, name) {\n var div = this.parent.createElement('div', { id: this.parent.element.id + name });\n this.parent.element.appendChild(div);\n var options = {\n showCloseIcon: false,\n isModal: true,\n visible: false,\n closeOnEscape: true,\n target: this.parent.element,\n width: '320px',\n animationSettings: { effect: 'None' },\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n };\n options.buttons = btnOptions;\n var obj = new Dialog(options);\n var isStringTemplate = 'isStringTemplate';\n obj[\"\" + isStringTemplate] = true;\n obj.appendTo(div);\n return obj;\n };\n Edit.prototype.dlgCancel = function () {\n this.parent.focusModule.clearIndicator();\n this.parent.focusModule.restoreFocus();\n this.dialogObj.hide();\n this.parent.notify('cancelcnfrmDlg', {});\n };\n Edit.prototype.dlgOk = function () {\n switch (this.dialogObj.element.querySelector('.e-dlg-content').firstElementChild.innerText) {\n case this.l10n.getConstant('ConfirmDelete'):\n this.editModule.deleteRecord();\n break;\n case this.l10n.getConstant('CancelEdit'):\n this.editModule.closeEdit();\n break;\n case this.l10n.getConstant('BatchSaveConfirm'):\n this.endEditing();\n break;\n case this.l10n.getConstant('BatchSaveLostChanges'):\n if (this.parent.editSettings.mode === 'Batch') {\n this.editModule.addCancelWhilePaging();\n }\n this.executeAction();\n break;\n }\n this.dlgCancel();\n };\n Edit.prototype.destroyEditComponents = function () {\n if (this.parent.isEdit) {\n this.destroyWidgets();\n this.destroyForm();\n }\n this.destroy();\n };\n /**\n * @returns {void}\n * @hidden\n */\n Edit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.eventDetails = [{ event: events.inBoundModelChanged, handler: this.onPropertyChanged },\n { event: events.initialEnd, handler: this.initialEnd },\n { event: events.keyPressed, handler: this.keyPressHandler },\n { event: events.autoCol, handler: this.updateColTypeObj },\n { event: events.tooltipDestroy, handler: this.destroyToolTip },\n { event: events.preventBatch, handler: this.preventBatch },\n { event: events.destroyForm, handler: this.destroyForm },\n { event: events.destroy, handler: this.destroyEditComponents }];\n addRemoveEventListener(this.parent, this.eventDetails, true, this);\n this.actionBeginFunction = this.onActionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.onDataBoundFunction = this.onDataBound.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.addEventListener(events.dataBound, this.onDataBoundFunction);\n };\n /**\n * @returns {void}\n * @hidden\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n addRemoveEventListener(this.parent, this.eventDetails, false);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.removeEventListener(events.dataBound, this.onDataBoundFunction);\n };\n Edit.prototype.onDataBound = function () {\n this.resetMovableContentValidation();\n };\n Edit.prototype.actionComplete = function (e) {\n var actions = ['add', 'beginEdit', 'save', 'delete', 'cancel', 'filterafteropen', 'filterchoicerequest'];\n if (actions.indexOf(e.requestType) < 0) {\n this.parent.isEdit = false;\n }\n if (e.requestType === 'batchsave') {\n this.parent.focusModule.restoreFocus();\n }\n this.refreshToolbar();\n };\n /**\n * @param {Element} form - specifies the element\n * @param {Object} editedData - specifies the edited data\n * @returns {Object} returns the object\n * @hidden\n */\n Edit.prototype.getCurrentEditedData = function (form, editedData) {\n var gObj = this.parent;\n if (gObj.editSettings.template) {\n var elements = [].slice.call(form.elements);\n for (var k = 0; k < elements.length; k++) {\n if (((elements[parseInt(k.toString(), 10)].hasAttribute('name') && (elements[parseInt(k.toString(), 10)].className !== 'e-multi-hidden')) ||\n elements[parseInt(k.toString(), 10)].classList.contains('e-multiselect')) && !(elements[parseInt(k.toString(), 10)].type === 'hidden' &&\n (parentsUntil(elements[parseInt(k.toString(), 10)], 'e-switch-wrapper') || parentsUntil(elements[parseInt(k.toString(), 10)], 'e-checkbox-wrapper')))) {\n var field = (elements[parseInt(k.toString(), 10)].hasAttribute('name')) ? setComplexFieldID(elements[parseInt(k.toString(), 10)].getAttribute('name')) :\n setComplexFieldID(elements[parseInt(k.toString(), 10)].getAttribute('id'));\n var column = gObj.getColumnByField(field) || { field: field, type: elements[parseInt(k.toString(), 10)].getAttribute('type') };\n var value = void 0;\n if (column.type === 'checkbox' || column.type === 'boolean') {\n value = elements[parseInt(k.toString(), 10)].checked;\n }\n else if (elements[parseInt(k.toString(), 10)].value) {\n value = elements[parseInt(k.toString(), 10)].value;\n if (elements[parseInt(k.toString(), 10)].ej2_instances &&\n elements[parseInt(k.toString(), 10)].ej2_instances.length &&\n !isNullOrUndefined(elements[parseInt(k.toString(), 10)].ej2_instances[0].value)) {\n elements[parseInt(k.toString(), 10)].blur();\n value = elements[parseInt(k.toString(), 10)]\n .ej2_instances[0].value;\n }\n }\n else if (elements[parseInt(k.toString(), 10)].ej2_instances) {\n value = elements[parseInt(k.toString(), 10)]\n .ej2_instances[0].value;\n }\n if (column.edit && typeof column.edit.read === 'string') {\n value = getValue(column.edit.read, window)(elements[parseInt(k.toString(), 10)], value);\n }\n else if (column.edit && column.edit.read) {\n value = column.edit.read(elements[parseInt(k.toString(), 10)], value);\n }\n value = gObj.editModule.getValueFromType(column, value);\n if (elements[parseInt(k.toString(), 10)].type === 'radio') {\n if (elements[parseInt(k.toString(), 10)].checked) {\n DataUtil.setValue(column.field, value, editedData);\n }\n }\n else {\n if (typeof value === 'string') {\n this.parent.sanitize(value);\n }\n DataUtil.setValue(column.field, value, editedData);\n }\n }\n }\n return editedData;\n }\n var col = gObj.columnModel.filter(function (col) { return col.editTemplate; });\n for (var j = 0; j < col.length; j++) {\n if (form[getComplexFieldID(col[parseInt(j.toString(), 10)].field)]) {\n var inputElements = [].slice.call(form[getComplexFieldID(col[parseInt(j.toString(), 10)].field)]);\n inputElements = inputElements.length ? inputElements : [form[getComplexFieldID(col[parseInt(j.toString(), 10)].field)]];\n var temp = inputElements.filter(function (e) {\n return !isNullOrUndefined((e.ej2_instances));\n });\n if (temp.length === 0) {\n temp = inputElements.filter(function (e) { return e.hasAttribute('name'); });\n }\n for (var k = 0; k < temp.length; k++) {\n var value = this.getValue(col[parseInt(j.toString(), 10)], temp[parseInt(k.toString(), 10)], editedData);\n if (col[parseInt(j.toString(), 10)].type === 'string') {\n value = this.parent.sanitize(value);\n }\n DataUtil.setValue(col[parseInt(j.toString(), 10)].field, value, editedData);\n }\n }\n }\n var inputs = [].slice.call(form.getElementsByClassName('e-field'));\n for (var i = 0, len = inputs.length; i < len; i++) {\n var col_1 = gObj.getColumnByUid(inputs[parseInt(i.toString(), 10)].getAttribute('e-mappinguid'));\n if (col_1 && col_1.field) {\n var value = this.getValue(col_1, inputs[parseInt(i.toString(), 10)], editedData);\n if (col_1.type === 'string') {\n value = this.parent.sanitize(value);\n }\n DataUtil.setValue(col_1.field, value, editedData);\n }\n }\n return editedData;\n };\n Edit.prototype.getValue = function (col, input, editedData) {\n var value = input.ej2_instances ?\n input.ej2_instances[0].value : input.value;\n var gObj = this.parent;\n var temp = col.edit.read;\n if (col.type === 'checkbox' || col.type === 'boolean') {\n value = input.checked;\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n value = gObj.editModule.getValueFromType(col, (temp)(input, value));\n }\n else {\n value = gObj.editModule.getValueFromType(col, col.edit.read(input, value));\n }\n if (isNullOrUndefined(editedData[col.field]) && value === '') {\n value = editedData[col.field];\n }\n return value;\n };\n /**\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Edit.prototype.onActionBegin = function (e) {\n if (e.requestType === 'columnstate' && this.parent.isEdit\n && this.parent.editSettings.mode !== 'Batch') {\n this.closeEdit();\n }\n else {\n var editRow = this.parent.element.querySelector('.' + literals.editedRow);\n var addRow = this.parent.element.querySelector('.' + literals.addedRow);\n if (editRow && this.parent.frozenRows && e.requestType === 'virtualscroll'\n && parseInt(parentsUntil(editRow, literals.row).getAttribute(literals.dataRowIndex), 10) < this.parent.frozenRows) {\n return;\n }\n var restrictedRequestTypes = ['filterafteropen', 'filterbeforeopen', 'filterchoicerequest', 'filtersearchbegin', 'save', 'infiniteScroll', 'virtualscroll'];\n var isRestrict = restrictedRequestTypes.indexOf(e.requestType) === -1;\n var isDestroyVirtualForm = this.parent.enableVirtualization && this.formObj\n && !this.formObj.isDestroyed && (editRow || addRow || e.requestType === 'cancel') && isRestrict;\n if ((!this.parent.enableVirtualization && this.parent.editSettings.mode !== 'Batch' && this.formObj && !this.formObj.isDestroyed\n && isRestrict && !e.cancel) || isDestroyVirtualForm) {\n this.destroyWidgets();\n this.destroyForm();\n }\n }\n };\n /**\n * @param {Column[]} cols - specfies the column\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroyWidgets = function (cols) {\n var gObj = this.parent;\n if (gObj.editSettings.template) {\n this.parent.destroyTemplate(['editSettingsTemplate']);\n if (this.parent.isReact) {\n this.parent.renderTemplates();\n }\n }\n cols = cols ? cols : this.parent.getCurrentVisibleColumns(this.parent.enableColumnVirtualization);\n if (cols.some(function (column) { return !isNullOrUndefined(column.editTemplate); })) {\n this.parent.destroyTemplate(['editTemplate']);\n if (this.parent.isReact) {\n this.parent.renderTemplates();\n }\n }\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n var temp = col.edit.destroy;\n if (col.edit.destroy) {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp();\n }\n else {\n col.edit.destroy();\n }\n }\n }\n var elements = [].slice.call(this.formObj.element.elements);\n for (var i = 0; i < elements.length; i++) {\n if (elements[parseInt(i.toString(), 10)].hasAttribute('name')) {\n if (elements[parseInt(i.toString(), 10)].ej2_instances &&\n elements[parseInt(i.toString(), 10)].ej2_instances.length &&\n !elements[parseInt(i.toString(), 10)].ej2_instances[0].isDestroyed) {\n elements[parseInt(i.toString(), 10)].ej2_instances[0].destroy();\n }\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroyForm = function () {\n this.destroyToolTip();\n var formObjects = [this.formObj, this.mFormObj, this.frFormObj, this.virtualFormObj];\n for (var i = 0; i < formObjects.length; i++) {\n if (formObjects[parseInt(i.toString(), 10)] && formObjects[parseInt(i.toString(), 10)].element\n && !formObjects[parseInt(i.toString(), 10)].isDestroyed) {\n formObjects[parseInt(i.toString(), 10)].destroy();\n }\n }\n this.destroyToolTip();\n };\n /**\n * To destroy the editing.\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement) {\n return;\n }\n var hasGridChild = gridElement.querySelector('.' + literals.gridHeader) &&\n gridElement.querySelector('.' + literals.gridContent) ? true : false;\n if (hasGridChild) {\n this.destroyForm();\n }\n this.removeEventListener();\n var elem = this.dialogObj.element;\n if (elem.childElementCount > 0) {\n this.dialogObj.destroy();\n remove(elem);\n }\n elem = this.alertDObj.element;\n if (elem.childElementCount > 0) {\n this.alertDObj.destroy();\n remove(elem);\n }\n if (!hasGridChild) {\n return;\n }\n if (this.editModule) {\n this.editModule.destroy();\n }\n };\n Edit.prototype.keyPressHandler = function (e) {\n switch (e.action) {\n case 'insert':\n this.addRecord();\n break;\n case 'delete':\n if ((e.target.tagName !== 'INPUT' || e.target.classList.contains('e-checkselect'))\n && !document.querySelector('.e-popup-open.e-edit-dialog')) {\n this.deleteRecord();\n }\n break;\n case 'f2':\n this.startEdit();\n break;\n case 'enter':\n if (!parentsUntil(e.target, 'e-unboundcelldiv') && this.parent.editSettings.mode !== 'Batch' &&\n (parentsUntil(e.target, literals.gridContent) || (this.parent.frozenRows\n && parentsUntil(e.target, literals.headerContent)))\n && !document.getElementsByClassName('e-popup-open').length) {\n e.preventDefault();\n this.endEdit();\n }\n break;\n case 'escape':\n if (this.parent.isEdit && !this.editCellDialogClose) {\n if (this.parent.editSettings.mode === 'Batch') {\n this.editModule.escapeCellEdit();\n }\n else {\n this.curretRowFocus(e);\n }\n }\n if (this.editCellDialogClose) {\n this.editCellDialogClose = false;\n }\n break;\n case 'tab':\n case 'shiftTab':\n this.curretRowFocus(e);\n break;\n }\n };\n Edit.prototype.curretRowFocus = function (e) {\n if (this.parent.isEdit && this.parent.editSettings.mode !== 'Batch') {\n var editedRow = parentsUntil(e.target, 'e-editedrow') || parentsUntil(e.target, 'e-addedrow');\n if (editedRow) {\n var selector = editedRow.classList.contains('e-addedrow') ? 'e-addedrow' : 'e-editedrow';\n var focusableEditCells = [].slice.call(editedRow.querySelectorAll('.e-input:not(.e-disabled)'));\n var commandColCell = [].slice.call(editedRow.querySelectorAll('.e-unboundcell'));\n if (commandColCell) {\n for (var i = 0; i < commandColCell.length; i++) {\n focusableEditCells = focusableEditCells.concat([].slice\n .call(commandColCell[parseInt(i.toString(), 10)].querySelectorAll('.e-btn:not(.e-hide)')));\n }\n }\n if (this.parent.isFrozenGrid()) {\n if (!isNullOrUndefined(this.parent.frozenRows) && (!isNullOrUndefined(parentsUntil(e.target, 'e-frozenheader')) ||\n !isNullOrUndefined(parentsUntil(e.target, 'e-movableheader')))) {\n var movableHeditedRow = this.parent.getHeaderContent().querySelector('.e-movableheader ' + '.' + selector);\n focusableEditCells.push.apply(focusableEditCells, [].slice.call(movableHeditedRow.querySelectorAll('.e-input:not(.e-disabled)')));\n if (this.parent.getFrozenMode() === 'Left-Right' || this.parent.getFrozenMode() === 'Right') {\n var rightHEditRow = this.parent.getHeaderContent().querySelector('.e-frozen-right-header ' + '.' + selector);\n focusableEditCells.push.apply(focusableEditCells, [].slice.call(rightHEditRow.querySelectorAll('.e-input:not(.e-disabled)')));\n }\n }\n else {\n var movableEditRow = this.parent.getContent().querySelector('.e-movablecontent ' + '.' + selector);\n focusableEditCells.push.apply(focusableEditCells, [].slice.call(movableEditRow.querySelectorAll('.e-input:not(.e-disabled)')));\n if (this.parent.getFrozenMode() === 'Left-Right' || this.parent.getFrozenMode() === 'Right') {\n var rightFrEditRow = this.parent.getContent().querySelector('.e-frozen-right-content ' + '.' + selector);\n focusableEditCells.push.apply(focusableEditCells, [].slice.call(rightFrEditRow.querySelectorAll('.e-input:not(.e-disabled)')));\n }\n }\n }\n var rowCell = parentsUntil(e.target, 'e-rowcell');\n if ((rowCell === parentsUntil(focusableEditCells[focusableEditCells.length - 1], 'e-rowcell')\n && e.action === 'tab' && !rowCell.classList.contains('e-unboundcell'))\n || (rowCell === parentsUntil(focusableEditCells[0], 'e-rowcell') && e.action === 'shiftTab')\n || e.action === 'escape') {\n var uid = editedRow.getAttribute('data-uid');\n var rows = this.parent.getRows();\n if (this.parent.getFrozenMode() === 'Left-Right' || this.parent.getFrozenMode() === 'Right') {\n rows = this.parent.getFrozenRightRows();\n }\n if (this.parent.getFrozenColumns() || this.parent.getFrozenMode() === 'Left') {\n rows = this.parent.getMovableRows();\n }\n var rowIndex = rows.map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n if (this.parent.frozenRows && parentsUntil(editedRow, 'e-content')) {\n rowIndex = rowIndex - this.parent.frozenRows;\n }\n if (editedRow.classList.contains('e-addedrow')) {\n rowIndex = 0;\n }\n if (e.action === 'escape') {\n this.closeEdit();\n }\n else {\n this.endEdit();\n }\n if (this.parent.focusModule.active) {\n this.parent.focusModule.active.matrix.current = [rowIndex, 0];\n }\n }\n }\n }\n };\n Edit.prototype.preventBatch = function (args) {\n this.preventObj = args;\n this.showDialog('BatchSaveLostChanges', this.dialogObj);\n };\n Edit.prototype.executeAction = function () {\n this.preventObj.handler.call(this.preventObj.instance, this.preventObj.arg1, this.preventObj.arg2, this.preventObj.arg3, this.preventObj.arg4, this.preventObj.arg5, this.preventObj.arg6, this.preventObj.arg7, this.preventObj.arg8);\n };\n /**\n * @param {Column[]} cols - specifies the column\n * @param {Object} newRule - specifies the new rule object\n * @returns {void}\n * @hidden\n */\n Edit.prototype.applyFormValidation = function (cols, newRule) {\n var gObj = this.parent;\n var frzCols = gObj.isFrozenGrid();\n var isInline = this.parent.editSettings.mode === 'Normal';\n var idx = this.parent.getFrozenMode() === 'Right' && isInline ? 1 : 0;\n var form = this.parent.editSettings.mode !== 'Dialog' ?\n gObj.element.getElementsByClassName('e-gridform')[parseInt(idx.toString(), 10)] :\n select('#' + gObj.element.id + '_dialogEdit_wrapper .e-gridform', document);\n var index = this.parent.getFrozenMode() === 'Right' && isInline ? 0 : 1;\n var mForm = gObj.element.getElementsByClassName('e-gridform')[parseInt(index.toString(), 10)];\n var rules = {};\n var mRules = {};\n var frRules = {};\n cols = cols ? cols : gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (!cols[parseInt(i.toString(), 10)].visible && (gObj.editSettings.mode !== 'Dialog' || (gObj.groupSettings.columns.indexOf(cols[parseInt(i.toString(), 10)].field) === -1\n && gObj.editSettings.mode === 'Dialog'))) {\n continue;\n }\n if (cols[parseInt(i.toString(), 10)].validationRules && isNullOrUndefined(newRule)) {\n setValidationRuels(cols[parseInt(i.toString(), 10)], index, rules, mRules, frRules, cols.length);\n }\n }\n if (frzCols && this.parent.editSettings.mode !== 'Dialog') {\n this.parent.editModule.mFormObj = this.createFormObj(mForm, mRules);\n if (this.parent.getFrozenMode() === literals.leftRight) {\n var frForm = gObj.element.getElementsByClassName('e-gridform')[2];\n this.parent.editModule.frFormObj = this.createFormObj(frForm, frRules);\n }\n }\n else {\n rules = extend(rules, mRules, frRules);\n }\n this.parent.editModule.formObj = this.createFormObj(form, newRule ? newRule : rules);\n };\n /**\n * @param {HTMLFormElement} form - Defined Form element\n * @param {Object} rules - Defines form rules\n * @returns {FormValidator} Returns formvalidator instance\n * @hidden\n */\n Edit.prototype.createFormObj = function (form, rules) {\n var _this = this;\n return new FormValidator(form, {\n rules: rules,\n locale: this.parent.locale,\n validationComplete: function (args) {\n _this.validationComplete(args);\n },\n customPlacement: function (inputElement, error) {\n var uid = inputElement.getAttribute('e-mappinguid');\n var args = {\n column: _this.parent.getColumnByUid(uid),\n error: error,\n inputElement: inputElement,\n value: inputElement.value\n };\n _this.valErrorPlacement(inputElement, error);\n _this.parent.notify(events.valCustomPlacement, args);\n }\n });\n };\n Edit.prototype.valErrorPlacement = function (inputElement, error) {\n if (this.parent.isEdit) {\n var id = error.getAttribute('for');\n var elem = this.getElemTable(inputElement).querySelector('#' + getParsedFieldID(id) + '_Error');\n if (!elem) {\n this.createTooltip(inputElement, error, id, '');\n }\n else {\n elem.querySelector('.e-tip-content').innerHTML = error.outerHTML;\n }\n }\n };\n Edit.prototype.getElemTable = function (inputElement) {\n var isFHdr;\n var gObj = this.parent;\n var table;\n if (gObj.editSettings.mode !== 'Dialog') {\n isFHdr = (gObj.frozenRows && gObj.frozenRows\n > (parseInt(closest(inputElement, '.' + literals.row).getAttribute(literals.dataRowIndex), 10) || 0));\n var field = inputElement.name;\n var col = void 0;\n if (field) {\n col = getColumnModelByFieldName(this.parent, setComplexFieldID(field));\n }\n if (col && gObj.isFrozenGrid()) {\n if (col.getFreezeTableName() === 'frozen-left') {\n table = isFHdr ? gObj.getFrozenVirtualHeader().querySelector('table')\n : gObj.getFrozenVirtualContent().querySelector('table');\n }\n else if (col.getFreezeTableName() === 'frozen-right') {\n table = isFHdr ? gObj.getFrozenRightHeader().querySelector('table')\n : gObj.getFrozenRightContent().querySelector('table');\n }\n else if (col.getFreezeTableName() === 'movable') {\n table = isFHdr ? gObj.getMovableVirtualHeader().querySelector('table')\n : gObj.getMovableVirtualContent().querySelector('table');\n }\n }\n else {\n table = isFHdr ? gObj.getHeaderTable() : gObj.getContentTable();\n }\n }\n else {\n table = select('#' + gObj.element.id + '_dialogEdit_wrapper', document);\n }\n return table;\n };\n Edit.prototype.resetElemPosition = function (elem, args) {\n var td = parentsUntil(args.element, literals.rowCell);\n if (td) {\n var tdRight = td.getBoundingClientRect().right;\n var elemRight = elem.getBoundingClientRect().right;\n if (elemRight > tdRight) {\n var offSet = elemRight - tdRight;\n elem.style.left = (elem.offsetLeft - offSet) + 'px';\n }\n }\n };\n Edit.prototype.validationComplete = function (args) {\n if (this.parent.isEdit) {\n var elem = this.getElemTable(args.element).querySelector('#' + getParsedFieldID(args.inputName) + '_Error');\n if (elem) {\n if (args.status === 'failure') {\n elem.style.display = '';\n this.resetElemPosition(elem, args);\n }\n else {\n elem.style.display = 'none';\n }\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Edit.prototype.resetMovableContentValidation = function () {\n if (this.isValidationApplied && this.parent.getMovableVirtualContent() &&\n !(this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n var elem = this.parent.getContent().querySelector('.' + literals.movableContent);\n elem.style.overflowX = 'auto';\n elem.style.overflowY = 'hidden';\n this.isValidationApplied = false;\n }\n };\n Edit.prototype.createTooltip = function (element, error, name, display) {\n var column = this.parent.getColumnByField(name);\n var formObj = this.parent.getFrozenMode() === literals.leftRight && this.parent.editSettings.mode === 'Normal'\n && column.getFreezeTableName() === literals.frozenRight ? this.frFormObj.element : this.formObj.element;\n var customForm = parentsUntil(element, 'e-virtual-validation');\n if (customForm) {\n formObj = this.virtualFormObj.element;\n }\n var gcontent = this.parent.getContent().firstElementChild;\n var frzCols = this.parent.getFrozenColumns() || this.parent.getFrozenLeftColumnsCount()\n || this.parent.getFrozenRightColumnsCount();\n if (frzCols) {\n gcontent = this.parent.getMovableVirtualContent();\n }\n var isScroll = gcontent.scrollHeight > gcontent.clientHeight || gcontent.scrollWidth > gcontent.clientWidth;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var td = closest(element, '.' + literals.rowCell);\n var row = closest(element, '.' + literals.row);\n var fCont = this.parent.getContent().querySelector('.' + literals.frozenContent);\n var isFHdr;\n var isFHdrLastRow = false;\n var validationForBottomRowPos;\n var isBatchModeLastRow = false;\n var isSpace = this.parent.editSettings.newRowPosition === 'Bottom' &&\n this.parent.getContent().firstElementChild.offsetHeight > this.parent.getContentTable().scrollHeight;\n var viewPortRowCount = Math.round(this.parent.getContent().clientHeight / this.parent.getRowHeight()) - 1;\n var rows = !fCont ? [].slice.call(this.parent.getContent().getElementsByClassName(literals.row))\n : [].slice.call(this.parent.getFrozenVirtualContent().getElementsByClassName(literals.row));\n if (this.parent.editSettings.mode === 'Batch') {\n if (viewPortRowCount > 1 && rows.length >= viewPortRowCount && !isSpace\n && rows[rows.length - 1].getAttribute(literals.dataRowIndex) === row.getAttribute(literals.dataRowIndex)) {\n isBatchModeLastRow = true;\n }\n }\n if (isInline) {\n if (this.parent.frozenRows) {\n var fHeraderRows = frzCols ? this.parent.getFrozenVirtualHeader().querySelector(literals.tbody).children\n : this.parent.getHeaderTable().querySelector(literals.tbody).children;\n isFHdr = fHeraderRows.length > (parseInt(row.getAttribute(literals.dataRowIndex), 10) || 0);\n isFHdrLastRow = isFHdr && parseInt(row.getAttribute(literals.dataRowIndex), 10) === fHeraderRows.length - 1;\n }\n if (isFHdrLastRow || (viewPortRowCount > 1 && rows.length >= viewPortRowCount\n && ((this.parent.editSettings.newRowPosition === 'Bottom' && (this.editModule.args\n && this.editModule.args.requestType === 'add')) || (td.classList.contains('e-lastrowcell')\n && !row.classList.contains(literals.addedRow)))) || isBatchModeLastRow) {\n validationForBottomRowPos = true;\n }\n }\n var table = isInline ?\n (isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable()) :\n select('#' + this.parent.element.id + '_dialogEdit_wrapper .e-dlg-content', document);\n var client = table.getBoundingClientRect();\n var left = isInline ?\n this.parent.element.getBoundingClientRect().left : client.left;\n var input = closest(element, 'td');\n var inputClient = input ? input.getBoundingClientRect() : element.parentElement.getBoundingClientRect();\n var div = this.parent.createElement('div', {\n className: 'e-tooltip-wrap e-lib e-control e-popup e-griderror',\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n ((isFHdr ? inputClient.top + inputClient.height : inputClient.bottom - client.top\n - (frzCols ? fCont.scrollTop : 0)) + table.scrollTop + 9) + 'px;left:' +\n (inputClient.left - left + table.scrollLeft + inputClient.width / 2) + 'px;' +\n 'max-width:' + inputClient.width + 'px;text-align:center;'\n });\n if (this.parent.cssClass) {\n div.classList.add(this.parent.cssClass);\n }\n if (isInline && client.left < left) {\n div.style.left = parseInt(div.style.left, 10) - client.left + left + 'px';\n }\n var content = this.parent.createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow;\n if (validationForBottomRowPos) {\n arrow = this.parent.createElement('div', { className: 'e-arrow-tip e-tip-bottom' });\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-outer e-tip-bottom' }));\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-inner e-tip-bottom' }));\n }\n else {\n arrow = this.parent.createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n }\n div.appendChild(content);\n div.appendChild(arrow);\n if (!customForm && (frzCols || this.parent.frozenRows) && this.parent.editSettings.mode !== 'Dialog') {\n var getEditCell = this.parent.editSettings.mode === 'Normal' ?\n closest(element, '.e-editcell') : closest(element, '.' + literals.table);\n getEditCell.style.position = 'relative';\n div.style.position = 'absolute';\n if (this.parent.editSettings.mode === 'Batch' ||\n (closest(element, '.' + literals.frozenContent) || closest(element, '.' + literals.frozenHeader))\n || (this.parent.frozenRows && !frzCols)) {\n formObj.appendChild(div);\n }\n else {\n this.mFormObj.element.appendChild(div);\n }\n }\n else {\n if (customForm) {\n this.virtualFormObj.element.appendChild(div);\n }\n else {\n this.formObj.element.appendChild(div);\n }\n }\n if (!validationForBottomRowPos && isInline && gcontent.getBoundingClientRect().bottom < inputClient.bottom + inputClient.height) {\n var contentDiv = this.parent.getContent().querySelector('.e-content');\n if (frzCols && this.parent.currentViewData.length === 0 && contentDiv.scrollTop === 0) {\n contentDiv.scrollTop = div.offsetHeight + arrow.scrollHeight;\n }\n else {\n gcontent.scrollTop = gcontent.scrollTop + div.offsetHeight + arrow.scrollHeight;\n }\n }\n var lineHeight = parseInt(document.defaultView.getComputedStyle(div, null).getPropertyValue('font-size'), 10);\n if (div.getBoundingClientRect().width < inputClient.width &&\n div.querySelector('label').getBoundingClientRect().height / (lineHeight * 1.2) >= 2) {\n div.style.width = div.style.maxWidth;\n }\n if ((frzCols || this.parent.frozenRows) && this.parent.editSettings.mode !== 'Dialog') {\n div.style.left = input.offsetLeft + (input.offsetWidth / 2 - div.offsetWidth / 2) + 'px';\n }\n else {\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n }\n if (isInline && !isScroll && !this.parent.allowPaging || frzCols || this.parent.frozenRows) {\n gcontent.style.position = 'static';\n var pos = calculateRelativeBasedPosition(input, div);\n div.style.top = pos.top + inputClient.height + 9 + 'px';\n }\n if (closest(element, '.' + literals.movableContent) && !this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling) {\n var elem = this.parent.getContent().querySelector('.' + literals.movableContent);\n elem.style.overflowX = 'visible';\n elem.style.overflowY = 'visible';\n this.isValidationApplied = true;\n }\n if (validationForBottomRowPos) {\n if (isScroll && !frzCols && this.parent.height !== 'auto' && !this.parent.frozenRows\n && !this.parent.enableVirtualization) {\n var scrollWidth = gcontent.scrollWidth > gcontent.offsetWidth ? getScrollBarWidth() : 0;\n var gHeight = this.parent.height.toString().indexOf('%') === -1 ?\n parseInt(this.parent.height, 10) : gcontent.offsetHeight;\n div.style.bottom = (gHeight - gcontent.querySelector('table').offsetHeight\n - scrollWidth) + inputClient.height + 9 + 'px';\n }\n else {\n div.style.bottom = inputClient.height + 9 + 'px';\n }\n if (rows.length < viewPortRowCount && this.parent.editSettings.newRowPosition === 'Bottom' && (this.editModule.args\n && this.editModule.args.requestType === 'add')) {\n var rowsCount = this.parent.frozenRows ? this.parent.frozenRows + (rows.length - 1) : rows.length - 1;\n var rowsHeight = rowsCount * this.parent.getRowHeight();\n var position = this.parent.getContent().clientHeight - rowsHeight;\n div.style.bottom = position + 9 + 'px';\n }\n div.style.top = null;\n }\n };\n /**\n * @param {Column} col - specfies the column\n * @returns {boolean} returns the whether column is grouped\n * @hidden\n */\n Edit.prototype.checkColumnIsGrouped = function (col) {\n return !col.visible && !(this.parent.groupSettings.columns.indexOf(col.field) > -1);\n };\n /**\n * @param {object} editors -specfies the editors\n * @returns {void}\n * @hidden\n */\n Edit.AddEditors = function (editors) {\n Edit.editCellType = extend(Edit.editCellType, editors);\n };\n Edit.editCellType = {\n 'dropdownedit': DropDownEditCell, 'numericedit': NumericEditCell,\n 'datepickeredit': DatePickerEditCell, 'datetimepickeredit': DatePickerEditCell,\n 'booleanedit': BooleanEditCell, 'defaultedit': DefaultEditCell,\n 'templateedit': TemplateEditCell\n };\n return Edit;\n}());\nexport { Edit };\n","import { isNullOrUndefined, extend, setValue, getValue, merge } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\nimport { classList } from '@syncfusion/ej2-base';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cellSaved, this.cellSaved);\n this.parent.off(events.batchAdd, this.batchAdd);\n this.parent.off(events.batchSave, this.batchSave);\n this.parent.off(events.beforeBatchAdd, this.beforeBatchAdd);\n this.parent.off(events.beforeBatchDelete, this.beforeBatchDelete);\n this.parent.off(events.beforeBatchSave, this.beforeBatchSave);\n this.parent.off('batchPageAction', this.batchPageAction);\n this.parent.off('batchCancelAction', this.batchCancelAction);\n this.parent.grid.off('immutable-batch-cancel', this.immutableBatchAction);\n this.parent.grid.off('next-cell-index', this.nextCellIndex);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n BatchEdit.prototype.getBatchRecords = function () {\n return this.batchRecords;\n };\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n BatchEdit.prototype.getAddRowIndex = function () {\n return this.addRowIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n BatchEdit.prototype.getSelectedIndex = function () {\n return this.selectedIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n BatchEdit.prototype.getBatchChildCount = function () {\n return this.batchChildCount;\n };\n BatchEdit.prototype.batchPageAction = function () {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[\"\" + primaryKey]; }).indexOf(this.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey]);\n data.splice(index, 1);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.column.index;\n var frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n var colCount = this.parent.getFrozenLeftColumnsCount() + actualCellIndex;\n if (colCount === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.column.index)\n });\n }\n }\n else if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.column.index)\n });\n }\n if (this.isAdd && this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var added = void 0;\n var level = 'level';\n var primaryKey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var currentDataIndex = void 0;\n var indexvalue = void 0;\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var parentRecord = this.selectedIndex > -1 ? this.batchRecords[parseInt(this.addRowIndex.toString(), 10)][\"\" + parentItem] : null;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentIdMapping = void 0;\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Top' || this.selectedIndex === -1 ? 0 :\n this.parent.editSettings.newRowPosition === 'Above' ? this.addRowIndex\n : this.addRowIndex + 1;\n rowObjectIndex = this.getActualRowObjectIndex(rowObjectIndex);\n if (this.newBatchRowAdded) {\n if (this.batchRecords.length) {\n idMapping = this.batchRecords[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = this.batchRecords[this.addRowIndex][this.parent.parentIdMapping];\n if (this.batchRecords[parseInt(this.addRowIndex.toString(), 10)][\"\" + parentItem]) {\n parentUniqueID = this.batchRecords[parseInt(this.addRowIndex.toString(), 10)][\"\" + parentItem][\"\" + uniqueID];\n }\n }\n this.batchAddedRecords = extendArray(this.batchAddedRecords);\n this.batchAddRowRecord = extendArray(this.batchAddRowRecord);\n this.batchAddRowRecord.push(this.batchRecords[this.addRowIndex]);\n added = this.parent.grid.getRowsObject()[parseInt(rowObjectIndex.toString(), 10)].changes;\n added.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + added.uniqueID, added, this.parent);\n if (!Object.prototype.hasOwnProperty.call(added, 'level')) {\n this.batchIndex = this.selectedIndex === -1 ? 0 : this.batchIndex;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n added.primaryParent = parentRecord;\n if (this.selectedIndex > -1) {\n added.parentItem = extend({}, this.batchRecords[this.addRowIndex]);\n added.parentUniqueID = added.parentItem.uniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n added.level = added.parentItem.level + 1;\n added.index = this.batchIndex;\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[\"\" + primaryKey_1]; }).indexOf(record[\"\" + primaryKey_1]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey_1, added.parentItem, 'add', this.parent, this.isSelfReference, added);\n }\n }\n else if ((this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')\n && !isNullOrUndefined(this.batchRecords[this.addRowIndex])) {\n added.level = this.batchRecords[parseInt(this.addRowIndex.toString(), 10)][\"\" + level];\n if (added.level && this.selectedIndex > -1) {\n added.parentItem = parentRecord;\n added.parentUniqueID = parentUniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n }\n added.index = this.parent.editSettings.newRowPosition === 'Below' ? this.batchIndex : this.batchIndex - 1;\n if (this.parent.editSettings.newRowPosition === 'Below' && this.selectedIndex > -1) {\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[\"\" + primaryKey_1]; }).indexOf(record[\"\" + primaryKey_1]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n var record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map(function (e) { return e[\"\" + primaryKey_1]; }).indexOf(record[\"\" + primaryKey_1]);\n }\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = parentIdMapping;\n }\n }\n added.index = added.index === -1 ? 0 : added.index;\n added.hasChildRecords = false;\n added.childRecords = [];\n this.batchRecords.splice(added.index, 0, added);\n this.currentViewRecords.splice(added.index, 0, added);\n if (currentDataIndex) {\n indexvalue = currentDataIndex;\n }\n else {\n indexvalue = added.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Above') {\n indexvalue = added.index === 0 ? indexvalue : indexvalue + 1;\n }\n data.splice(indexvalue, 0, added);\n this.batchAddedRecords.push(added);\n }\n this.parent.grid.getRowsObject()[parseInt(rowObjectIndex.toString(), 10)].data = added;\n this.newBatchRowAdded = false;\n }\n if (this.parent.frozenColumns || this.parent.getFrozenColumns()\n && this.parent.grid.getRowsObject()[parseInt(rowObjectIndex.toString(), 10)].edit === 'add') {\n merge(this.currentViewRecords[parseInt(rowObjectIndex.toString(), 10)], this.parent.grid.getRowsObject()[parseInt(rowObjectIndex.toString(), 10)].changes);\n }\n }\n };\n BatchEdit.prototype.beforeBatchAdd = function (e) {\n var isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[\"\" + isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[\"\" + isTabLastRow] = false;\n return;\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) &&\n !this.parent.editModule['isAddedRowByContextMenu'] && (this.parent.grid.selectedRowIndex === -1 || this.parent.editModule['batchEditModule'].isAdd)) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = this.batchRecords.length ? this.batchRecords[this.selectedIndex]\n : this.parent.getCurrentViewRecords()[this.selectedIndex];\n }\n else {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.parent.editModule['addRowIndex'] = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n classList(this.parent.grid.getDataRows()[0], ['e-batchrow'], []);\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\n // if (this.parent.frozenRows || this.parent.frozenColumns) {\n // actualIndex = this.batchIndex;\n // }\n }\n focusModule.getContent().matrix.current = [actualIndex, focusModule.getContent().matrix.current[1]];\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n var newlyAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var index = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[newlyAddedRecords.length - 1].getAttribute('data-rowindex'), 10);\n this.batchRecords.splice(index, 0, newlyAddedRecords[newlyAddedRecords.length - 1]);\n }\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.getAttribute('data-uid');\n }\n else {\n data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n childs = findChildrenRecords(data);\n uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n }\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('data-rowindex'), 10);\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[parseInt(i.toString(), 10)]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[parseInt(i.toString(), 10)]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[\"\" + primarykey]; }).indexOf(records[parseInt(i.toString(), 10)][\"\" + primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[parseInt(i.toString(), 10)])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[parseInt(i.toString(), 10)]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[parseInt(i.toString(), 10)].setAttribute('data-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[parseInt(i.toString(), 10)].setAttribute('data-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[parseInt(i.toString(), 10)].setAttribute('data-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[\"\" + addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[\"\" + addedRecords][parseInt(i.toString(), 10)][\"\" + parentItem])) {\n if (this.parent.getBatchChanges()[\"\" + addedRecords][parseInt(i.toString(), 10)][\"\" + parentItem][\"\" + primaryKey] === records[parseInt(this.addRowIndex.toString(), 10)][\"\" + primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[\"\" + changeRecords];\n if (e.batchChanges[\"\" + changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[parseInt(i.toString(), 10)], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[\"\" + deleterecords].length) {\n var deletedRecords = e.batchChanges[\"\" + deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[parseInt(i.toString(), 10)].uniqueID);\n var childs = findChildrenRecords(record[parseInt(i.toString(), 10)]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[parseInt(c.toString(), 10)].uniqueID);\n }\n e.batchChanges[\"\" + deleterecords] = e.batchChanges[\"\" + deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[\"\" + idFilter][\"\" + value];\n var id = 'uniqueIDCollection';\n delete this.parent[\"\" + id][\"\" + value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[\"\" + primaryKey]; }).indexOf(this.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey]);\n if (index !== -1) {\n data.splice(index, 1);\n }\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[\"\" + primaryKey]; })\n .indexOf(this.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + parentItem] ? this.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + parentItem][\"\" + primaryKey]\n : this.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[parseInt(index.toString(), 10)])) {\n var children = currentViewRecords[parseInt(index.toString(), 10)][\"\" + childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[parseInt(j.toString(), 10)][\"\" + primaryKey] === this.batchAddedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey]) {\n currentViewRecords[parseInt(index.toString(), 10)][\"\" + childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.parent[\"\" + targetElement])) {\n var row = this.parent[\"\" + targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[\"\" + targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[parseInt(i.toString(), 10)][\"\" + parentItem])) {\n index = currentViewRecords.map(function (e) { return e[\"\" + primaryKey]; })\n .indexOf(this.batchDeletedRecords[parseInt(i.toString(), 10)][\"\" + parentItem][\"\" + primaryKey]);\n var positionIndex = this.batchDeletedRecords[parseInt(i.toString(), 10)][\"\" + indexvalue] === 0 ? this.batchDeletedRecords[parseInt(i.toString(), 10)][\"\" + indexvalue] :\n this.batchDeletedRecords[parseInt(i.toString(), 10)][\"\" + indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[parseInt(index.toString(), 10)])) {\n currentViewRecords[parseInt(index.toString(), 10)][\"\" + childRecords].splice(positionIndex, 0, this.batchDeletedRecords[parseInt(i.toString(), 10)]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[\"\" + addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && !this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n for (var i_1 = 0; i_1 < addRecords.length; i_1++) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[parseInt(i_1.toString(), 10)].getAttribute('data-rowindex'), 10);\n data.splice(index_1, 0, addRecords[parseInt(i_1.toString(), 10)]);\n }\n }\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length) {\n var startIndex = totalRecords.map(function (e) { return e[\"\" + primarykey_1]; })\n .indexOf(currentViewRecords[0][\"\" + primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n addRecords.reverse();\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[parseInt(i.toString(), 10)]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n if (addRecords.length > 1 && this.parent.editModule['isAddedRowByContextMenu']) {\n var rowPosition = this.parent.editSettings.newRowPosition;\n this.parent.editSettings.newRowPosition = this.parent.editModule['previousNewRowPosition'];\n this.parent.editModule['previousNewRowPosition'] = rowPosition;\n }\n addRecords[parseInt(i.toString(), 10)].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[parseInt(i.toString(), 10)];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[parseInt(i.toString(), 10)].parentItem)) {\n updateParentRow(primarykey_1, addRecords[parseInt(i.toString(), 10)].parentItem, 'add', this.parent, this.isSelfReference, addRecords[parseInt(i.toString(), 10)]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[parseInt(i.toString(), 10)].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[parseInt(i.toString(), 10)], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[parseInt(i.toString(), 10)][\"\" + parentItem]) &&\n (isNullOrUndefined(this.parent.editModule['addRowIndex']) || this.isSelfReference)) {\n var indexValue = currentViewRecords.map(function (e) { return e[\"\" + primarykey_1]; })\n .indexOf(addRecords[parseInt(i.toString(), 10)][\"\" + parentItem][\"\" + primarykey_1]);\n var children = currentViewRecords[parseInt(indexValue.toString(), 10)][\"\" + childRecords];\n for (var j = 0; j < children.length; j++) {\n if (children[parseInt(j.toString(), 10)][\"\" + primarykey_1] === addRecords[parseInt(i.toString(), 10)][\"\" + primarykey_1]) {\n currentViewRecords[parseInt(indexValue.toString(), 10)][\"\" + childRecords].splice(j, 1);\n }\n }\n }\n }\n if (batchChanges[\"\" + deletedRecords].length) {\n for (i = 0; i < batchChanges[\"\" + deletedRecords].length; i++) {\n editAction({ value: batchChanges[\"\" + deletedRecords][parseInt(i.toString(), 10)], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n }\n }\n this.parent.parentData = [];\n for (var i_2 = 0; i_2 < data.length; i_2++) {\n data[parseInt(i_2.toString(), 10)][\"\" + index] = i_2;\n setValue('uniqueIDCollection.' + data[parseInt(i_2.toString(), 10)][\"\" + uniqueID] + '.index', i_2, this.parent);\n if (!data[parseInt(i_2.toString(), 10)][\"\" + level]) {\n this.parent.parentData.push(data[parseInt(i_2.toString(), 10)]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n if (this.parent.editModule['isAddedRowByContextMenu']) {\n this.parent.editModule['isAddedRowByContextMenu'] = false;\n }\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[parseInt(i.toString(), 10)][\"\" + index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n if (this.parent.getSelectedRows().length) {\n args[\"\" + index] = this.parent.getSelectedRows()[0][\"\" + rowIndex];\n }\n else {\n args[\"\" + index] = this.batchIndex;\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n this.isAddedRowByContextMenu = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n if (e.target.classList.contains('e-frame') && this.parent.getCurrentViewRecords().length === 0) {\n this.doubleClickTarget = null;\n }\n if (e.target.classList.contains('e-treegridcollapse') || e.target.classList.contains('e-treegridexpand')) {\n var tr = parentsUntil(e.target, 'e-row');\n var rowIndex = tr && parseInt(tr.getAttribute('data-rowindex'), 10);\n if (!isNullOrUndefined(rowIndex) && rowIndex >= 0 && this.parent.allowPaging) {\n /* eslint-disable-next-line */\n this.parent.grid.getDataRows()[rowIndex].dataset.uid = this.parent.grid.contentModule.getRows()[rowIndex].uid;\n }\n }\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.dataRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionBegin, args);\n }\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = treeObj.dataSource.adaptor;\n if ((isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[parseInt(rowIndex.toString(), 10)][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[parseInt(i.toString(), 10)].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[\"\" + infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[parseInt(page.toString(), 10)];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[parseInt(page.toString(), 10)];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[\"\" + updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('data-colindex'));\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('data-rowindex');\n tr.setAttribute('data-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n else if (this.parent.editSettings.mode === 'Cell' && (!column.allowEditing || column.isPrimaryKey)) {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[\"\" + idFilter][\"\" + value];\n var id = 'uniqueIDCollection';\n delete this.parent[\"\" + id][\"\" + value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[\"\" + promise];\n delete args[\"\" + promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('data-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n if (this.parent.enableVirtualization) {\n this.parent.grid.contentModule['editedRowIndex'] = this.parent.grid.editModule.editModule['index'];\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row, args.rowIndex);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[\"\" + editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[\"\" + eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n if (this.parent['isGantt'] && !this.parent.loadChildOnDemand) {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n else {\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n if (this.parent.enableVirtualization) {\n this.parent.grid.contentModule['virtualData'] = {};\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[parseInt(rowIndex.toString(), 10)];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[parseInt(rowIndex.toString(), 10)];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[parseInt(rowIndex.toString(), 10)];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[parseInt(rowIndex.toString(), 10)];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[parseInt(rowIndex.toString(), 10)];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[parseInt(rowIndex.toString(), 10)].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[parseInt(i.toString(), 10)].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[\"\" + key] === data[parseInt(i.toString(), 10)][\"\" + key]) {\n if (details.action === 'add') {\n data[parseInt(i.toString(), 10)].level = this.internalProperties.level;\n data[parseInt(i.toString(), 10)].taskData = this.internalProperties.taskData;\n data[parseInt(i.toString(), 10)].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[parseInt(i.toString(), 10)].parentItem = this.internalProperties.parentItem;\n data[parseInt(i.toString(), 10)].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[parseInt(i.toString(), 10)].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[parseInt(i.toString(), 10)].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[parseInt(i.toString(), 10)].uniqueID, data[parseInt(i.toString(), 10)], this.parent);\n }\n if (!data[parseInt(i.toString(), 10)].level) {\n this.parent.parentData.push(data[parseInt(i.toString(), 10)]);\n }\n }\n if (!this.parent.enableInfiniteScrolling) {\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[parseInt(j.toString(), 10)];\n if (!isNullOrUndefined(data1)) {\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[parseInt(l.toString(), 10)].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (var k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[parseInt(k.toString(), 10)].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[parseInt(count.toString(), 10)];\n if (!isNullOrUndefined(data2)) {\n var index = data2.index;\n var level = data2.level;\n var row = rows[parseInt(k.toString(), 10)];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[parseInt(treeColIndex.toString(), 10)];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[parseInt(l.toString(), 10)];\n var remove = /e-gridrowindex/i;\n var removed = /e-griddetailrowindex/i;\n var result = value.match(remove);\n var results = value.match(removed);\n if (result != null) {\n removeClass([treecell], value);\n }\n if (results != null) {\n removeClass([treecell], value);\n }\n }\n if (!rows[parseInt(k.toString(), 10)].classList.contains('e-detailrow')) {\n addClass([treecell], 'e-gridrowindex' + index + 'level' + level);\n }\n else {\n addClass([treecell], 'e-griddetailrowindex' + index + 'level' + level);\n }\n }\n }\n }\n };\n Edit.prototype.beginAdd = function () {\n var position;\n var index = this.addRowIndex;\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch') {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n records = this.batchEditModule.getBatchRecords();\n }\n }\n var rows = this.parent.grid.getDataRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[parseInt(index.toString(), 10)]) &&\n records[parseInt(index.toString(), 10)].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[parseInt(index.toString(), 10)]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else if (!this.parent.enableVirtualization) {\n index += findChildrenRecords(records[parseInt(index.toString(), 10)]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[\"\" + r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][\"\" + position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[\"\" + r].splice(0, 1);\n this.parent.grid.contentModule[\"\" + r].splice(rowObjectIndex, 0, newRowObject);\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][\"\" + position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][\"\" + position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[\"\" + frows].splice(0, 1);\n this.parent.grid.contentModule[\"\" + frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[parseInt(i.toString(), 10)].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n if (!this.parent.enableVirtualization || this.parent.enableVirtualization && !Object.keys(this.parent.grid.contentModule['emptyRowData']).length) {\n focussedElement.focus();\n }\n if (this.parent.enableVirtualization && !Object.keys(this.parent.grid.contentModule['emptyRowData']).length) {\n this.parent.grid.contentModule['createEmptyRowdata']();\n }\n }\n }\n if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1 && this['isAddedRowByMethod'] && !this.isAddedRowByContextMenu) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n var batchAddedRecords = this.parent.getBatchChanges()['addedRecords'];\n var newlyAddedRecord = void 0;\n if (batchAddedRecords.length) {\n for (var i = 0; i < batchAddedRecords.length; i++) {\n if (isNullOrUndefined(batchAddedRecords[parseInt(i.toString(), 10)].uniqueID)) {\n newlyAddedRecord = batchAddedRecords[parseInt(i.toString(), 10)];\n }\n }\n }\n var args = {\n action: 'add',\n data: newlyAddedRecord,\n index: index,\n seletedRow: 0\n };\n this.beginAddEdit(args);\n this.batchEditModule['batchAddRowRecord'].push(this.batchEditModule['addRowRecord']);\n this.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[\"\" + primaryKeys_2[0]] === args.data[parseInt(i.toString(), 10)][primaryKeys_2[0]]) {\n data_1[parseInt(i.toString(), 10)] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[parseInt(i.toString(), 10)].uniqueID);\n var childs = findChildrenRecords(data_1[parseInt(i.toString(), 10)]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[parseInt(c.toString(), 10)].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[data-rowindex=\"' + this.selectedIndex + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[data-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n if (args.index !== 0) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex;\n }\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if ((this.isAddedRowByMethod || (this.isAddedRowByContextMenu && this.parent.grid.selectedRowIndex !== -1)) &&\n (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[this.parent.grid.selectedRowIndex];\n if (this.parent.enableVirtualization && this.isAddedRowByContextMenu) {\n this.addRowRecord = this.parent.getCurrentViewRecords()[this.addRowIndex];\n }\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n if (isNullOrUndefined(this.addRowRecord) && this.parent.getCurrentViewRecords().length > this.addRowIndex &&\n args.requestType === 'save' && this.parent.getSelectedRecords().length !== 0) {\n this.addRowRecord = this.parent.getCurrentViewRecords()[this.addRowIndex];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = void 0;\n if (this.parent.enableVirtualization && args.index !== 0) {\n currentData = this.parent.flatData;\n }\n else if (this.parent.editSettings.mode === 'Batch' && this['isAddedRowByMethod'] && !isNullOrUndefined(this.addRowIndex)) {\n currentData = this.batchEditModule['batchRecords'];\n }\n else {\n currentData = this.parent.grid.getCurrentViewRecords();\n }\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.flatData.indexOf(this.addRowRecord);\n this.selectedIndex = this.addRowIndex;\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withinRange = this.parent.enableVirtualization && args.index !== 0 ? true :\n this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n if (!this.parent.isLocalData && this.parent.editModule.selectedIndex === -1) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = null;\n }\n else {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n }\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[parseInt(i.toString(), 10)].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[parseInt(i.toString(), 10)].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[parseInt(i.toString(), 10)]);\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { isNullOrUndefined as isNOU, getValue, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TreeGrid, Edit } from '@syncfusion/ej2-treegrid';\nimport { Deferred } from '@syncfusion/ej2-data';\n/**\n * To handle cell edit action on default columns and custom columns\n */\nvar CellEdit = /** @class */ (function () {\n function CellEdit(ganttObj) {\n /**\n * @private\n */\n this.isCellEdit = false;\n this.isResourceCellEdited = false;\n this.parent = ganttObj;\n this.bindTreeGridProperties();\n }\n /**\n * Bind all editing related properties from Gantt to TreeGrid\n *\n * @returns {void} .\n */\n CellEdit.prototype.bindTreeGridProperties = function () {\n this.parent.treeGrid.editSettings.allowEditing = this.parent.editSettings.allowEditing;\n this.parent.treeGrid.editSettings.allowNextRowEdit = this.parent.editSettings.allowNextRowEdit;\n this.parent.treeGrid.editSettings.mode = 'Cell';\n this.parent.treeGrid.cellEdit = this.ensureEditCell.bind(this);\n if (this.parent.editSettings.allowEditing) {\n TreeGrid.Inject(Edit);\n }\n };\n /**\n * Ensure current cell was editable or not\n *\n * @param {CellEditArgs} args .\n * @returns {void | Deferred} .\n */\n CellEdit.prototype.ensureEditCell = function (args) {\n var _this = this;\n var data = args.rowData;\n var field = args.columnName;\n this.editedColumn = this.parent.getColumnByField(field, this.parent.ganttColumns);\n var taskSettings = this.parent.taskFields;\n if (this.parent.readOnly) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Dialog') {\n args.cancel = true;\n return;\n }\n if (data.hasChildRecords && ((field === taskSettings.endDate && ((!isNullOrUndefined(data['isManual']) &&\n data['isManual'] === false) || this.parent.taskMode === 'Auto')) || field === taskSettings.duration\n || field === taskSettings.dependency || field === taskSettings.progress || field === taskSettings.work || field === 'taskType')) {\n if ((field === taskSettings.dependency && !this.parent.allowParentDependency) || field !== taskSettings.dependency) {\n args.cancel = true;\n }\n }\n else {\n var callBackPromise_1 = new Deferred();\n this.parent.trigger('cellEdit', args, function (arg) {\n if (data.level === 0 && _this.parent.viewType === 'ResourceView') {\n arg.cancel = true;\n }\n callBackPromise_1.resolve(arg);\n if (!arg.cancel) {\n if (arg.columnName === _this.parent.taskFields.notes) {\n _this.openNotesEditor(arg);\n }\n else {\n _this.isCellEdit = true;\n if (!isNOU(_this.parent.toolbarModule)) {\n _this.parent.toolbarModule.refreshToolbarItems();\n }\n }\n }\n });\n return callBackPromise_1;\n }\n };\n /**\n * To render edit dialog and to focus on notes tab\n *\n * @param {CellEditArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.openNotesEditor = function (args) {\n var taskSettings = this.parent.taskFields;\n var data = args.rowData;\n var field = args.columnName;\n if ((field === taskSettings.notes && !this.parent.showInlineNotes)) {\n args.cancel = true;\n var columnTypes = this.parent.editModule.dialogModule.updatedEditFields.map(function (x) { return x.type; });\n var index = columnTypes.indexOf('Notes');\n if (index !== -1) {\n this.parent.editModule.dialogModule.openEditDialog(data.ganttProperties.rowUniqueID);\n var tabObj = document.getElementById(this.parent.element.id + '_Tab').ej2_instances[0];\n tabObj.selectedItem = index;\n }\n }\n if (field === taskSettings.notes && this.parent.showInlineNotes === true) {\n this.isCellEdit = true;\n }\n };\n CellEdit.prototype.isValueChange = function (args, field) {\n var data = getValue('data', args);\n var editedValue = data[\"\" + field];\n var previousValue = getValue('previousData', args);\n if ((isNOU(editedValue) && !isNOU(previousValue)) || (!isNOU(editedValue) && isNOU(previousValue))) {\n return true;\n }\n else if (!isNOU(editedValue) && !isNOU(previousValue)) {\n if (editedValue instanceof Date) {\n return editedValue.getTime() !== data.taskData[field].getTime() ? true : false;\n }\n else if (field === this.parent.taskFields.resourceInfo) {\n return editedValue !== previousValue ? true : false;\n }\n else if (editedValue !== data.taskData[field]) {\n return true;\n }\n }\n return false;\n };\n /**\n * Initiate cell save action on Gantt with arguments from TreeGrid\n *\n * @param {object} args .\n * @param {object} editedObj .\n * @returns {void} .\n * @private\n */\n CellEdit.prototype.initiateCellEdit = function (args, editedObj) {\n var column = getValue('column', args);\n var data = getValue('data', args);\n var editedArgs = {};\n editedArgs.action = 'CellEditing';\n editedArgs.data = this.parent.getTaskByUniqueID(data.uniqueID);\n var previousValue = getValue('previousData', args);\n var editedValue = this.parent.allowUnscheduledTasks ? data[column.field] : ((isNullOrUndefined(data[column.field])\n || data[column.field] === '') && (this.parent.taskFields.duration === column.field ||\n this.parent.taskFields.startDate === column.field || this.parent.taskFields.endDate === column.field)) ? previousValue\n : data[column.field];\n if (!isNOU(data)) {\n data[column.field] = previousValue;\n editedArgs.data[column.field] = previousValue;\n this.parent.initiateEditAction(true);\n this.parent.setRecordValue(column.field, editedValue, editedArgs.data);\n if (column.field === this.parent.taskFields.name) {\n this.taskNameEdited(editedArgs);\n }\n else if (column.field === this.parent.taskFields.startDate) {\n this.startDateEdited(editedArgs);\n }\n else if (column.field === this.parent.taskFields.endDate) {\n this.endDateEdited(editedArgs);\n }\n else if (column.field === this.parent.taskFields.duration) {\n this.durationEdited(editedArgs);\n }\n else if (column.field === this.parent.taskFields.resourceInfo) {\n this.resourceEdited(editedArgs, editedObj, data);\n }\n else if (column.field === this.parent.taskFields.progress) {\n this.progressEdited(editedArgs);\n }\n else if (column.field === this.parent.taskFields.baselineStartDate\n || column.field === this.parent.taskFields.baselineEndDate) {\n this.baselineEdited(editedArgs);\n }\n else if (column.field === this.parent.taskFields.dependency) {\n this.dependencyEdited(editedArgs, previousValue);\n }\n else if (column.field === this.parent.taskFields.notes) {\n this.notedEdited(editedArgs);\n }\n else if (column.field === this.parent.taskFields.work) {\n this.workEdited(editedArgs);\n }\n else if (column.field === 'taskType' && !isNOU(this.parent.taskFields.work)) {\n this.typeEdited(editedArgs, editedObj);\n }\n else if (column.field === this.parent.taskFields.manual) {\n this.taskmodeEdited(editedArgs);\n }\n else {\n this.parent.setRecordValue('taskData.' + column.field, editedArgs.data[column.field], editedArgs.data);\n this.parent.editModule.initiateSaveAction(editedArgs);\n }\n }\n else {\n this.parent.editModule.endEditAction(args);\n }\n this.isCellEdit = false;\n if (!isNullOrUndefined(this.parent.editModule.cellEditModule.editedColumn)) {\n this.parent.editModule.cellEditModule.editedColumn = null;\n }\n if (!isNOU(this.parent.toolbarModule)) {\n this.parent.toolbarModule.refreshToolbarItems();\n }\n };\n /**\n * To update task name cell with new value\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.taskNameEdited = function (args) {\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.name, args.data[this.parent.taskFields.name], args.data);\n this.parent.setRecordValue('taskName', args.data[this.parent.taskFields.name], args.data.ganttProperties, true);\n this.updateEditedRecord(args);\n };\n /**\n * To update task notes cell with new value\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.notedEdited = function (args) {\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.notes, args.data[this.parent.taskFields.notes], args.data);\n this.parent.setRecordValue('notes', args.data[this.parent.taskFields.notes], args.data.ganttProperties, true);\n this.updateEditedRecord(args);\n };\n /**\n * To update task schedule mode cell with new value\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.taskmodeEdited = function (args) {\n this.parent.setRecordValue('isAutoSchedule', !args.data[this.parent.taskFields.manual], args.data.ganttProperties, true);\n this.parent.editModule.updateTaskScheduleModes(args.data);\n this.updateEditedRecord(args);\n };\n /**\n * To update task start date cell with new value\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.startDateEdited = function (args) {\n var ganttData = args.data;\n var ganttProb = args.data.ganttProperties;\n var currentValue = args.data[this.parent.taskFields.startDate];\n currentValue = currentValue ? new Date(currentValue.getTime()) : null;\n currentValue = this.parent.dateValidationModule.checkStartDate(currentValue, ganttData.ganttProperties, ganttData.ganttProperties.isMilestone);\n if (isNOU(currentValue)) {\n if (!ganttData.hasChildRecords) {\n this.parent.setRecordValue('startDate', null, ganttProb, true);\n this.parent.setRecordValue('duration', null, ganttProb, true);\n this.parent.setRecordValue('isMilestone', false, ganttProb, true);\n if (this.parent.allowUnscheduledTasks && isNOU(this.parent.taskFields.endDate)) {\n this.parent.setRecordValue('endDate', null, ganttProb, true);\n }\n }\n }\n else if (ganttProb.endDate || !isNOU(ganttProb.duration)) {\n this.parent.setRecordValue('startDate', new Date(currentValue.getTime()), ganttProb, true);\n this.parent.dateValidationModule.calculateEndDate(ganttData);\n }\n else if (isNOU(ganttProb.endDate) && isNOU(ganttProb.duration)) {\n this.parent.setRecordValue('startDate', new Date(currentValue.getTime()), ganttProb, true);\n }\n this.parent.setRecordValue('isMilestone', ganttProb.duration === 0 ? true : false, ganttProb, true);\n this.parent.dataOperation.updateWidthLeft(args.data);\n this.parent.dataOperation.updateMappingData(ganttData, 'startDate');\n this.parent.dataOperation.updateMappingData(ganttData, 'endDate');\n this.parent.dataOperation.updateMappingData(ganttData, 'duration');\n this.updateEditedRecord(args);\n };\n CellEdit.prototype.validateEndDateWithSegments = function (ganttProp) {\n var ganttSegments = [];\n var segments = ganttProp.segments;\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[parseInt(i.toString(), 10)];\n var endDate = segment.endDate;\n endDate = (!isNullOrUndefined(ganttProp.endDate)) && endDate.getTime() <\n ganttProp.endDate.getTime() && i !== segments.length - 1 ? endDate : ganttProp.endDate;\n segment.duration = this.parent.dataOperation.getDuration(segment.startDate, endDate, ganttProp.durationUnit, ganttProp.isAutoSchedule, ganttProp.isMilestone);\n if (segments.length > 0 && endDate.getTime() < segment.startDate.getTime()\n && endDate.getTime() <= ganttProp.endDate.getTime()) {\n segments[i - 1].duration = this.parent.dataOperation.getDuration(segments[i - 1].startDate, ganttProp.endDate, ganttProp.durationUnit, ganttProp.isAutoSchedule, ganttProp.isMilestone);\n continue;\n }\n ganttSegments.push(segment);\n }\n return ganttSegments;\n };\n /**\n * To update task end date cell with new value\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.endDateEdited = function (args) {\n var ganttProb = args.data.ganttProperties;\n var currentValue = args.data[this.parent.taskFields.endDate];\n currentValue = currentValue ? new Date(currentValue.getTime()) : null;\n if (isNOU(currentValue)) {\n this.parent.setRecordValue('endDate', currentValue, ganttProb, true);\n this.parent.setRecordValue('duration', null, ganttProb, true);\n this.parent.setRecordValue('isMilestone', false, ganttProb, true);\n }\n else {\n if ((currentValue.getHours() === 0 && this.parent.defaultEndTime !== 86400)) {\n this.parent.dateValidationModule.setTime(this.parent.defaultEndTime, currentValue);\n }\n currentValue = this.parent.dateValidationModule.checkEndDate(currentValue, ganttProb);\n this.parent.setRecordValue('endDate', currentValue, ganttProb, true);\n if (!isNOU(ganttProb.startDate) && isNOU(ganttProb.duration)) {\n if (this.parent.dateValidationModule.compareDates(ganttProb.endDate, ganttProb.startDate) === -1) {\n this.parent.setRecordValue('endDate', new Date(ganttProb.startDate.getTime()), ganttProb, true);\n this.parent.dateValidationModule.setTime(this.parent.defaultEndTime, ganttProb.endDate);\n }\n }\n else if (!isNOU(ganttProb.duration) && isNOU(ganttProb.startDate)) {\n this.parent.setRecordValue('startDate', this.parent.dateValidationModule.getStartDate(ganttProb.endDate, ganttProb.duration, ganttProb.durationUnit, ganttProb), ganttProb, true);\n }\n if (!isNullOrUndefined(ganttProb.segments)) {\n ganttProb.segments = this.validateEndDateWithSegments(ganttProb);\n }\n if (this.compareDatesFromRecord(ganttProb) === -1) {\n this.parent.dateValidationModule.calculateDuration(args.data);\n }\n else {\n this.parent.editModule.revertCellEdit(args);\n }\n this.parent.setRecordValue('isMilestone', (ganttProb.duration === 0 ? true : false), ganttProb, true);\n if (ganttProb.isMilestone) {\n this.parent.setRecordValue('startDate', this.parent.dateValidationModule.checkStartDate(ganttProb.startDate, ganttProb), ganttProb, true);\n }\n }\n if (!isNullOrUndefined(args.data.ganttProperties.segments) && args.data.ganttProperties.segments.length > 0) {\n this.parent.setRecordValue('segments', this.parent.dataOperation.setSegmentsInfo(args.data, false), args.data.ganttProperties, true);\n this.parent.dataOperation.updateMappingData(args.data, 'segments');\n }\n this.parent.dataOperation.updateWidthLeft(args.data);\n this.parent.dataOperation.updateMappingData(args.data, 'startDate');\n this.parent.dataOperation.updateMappingData(args.data, 'endDate');\n this.parent.dataOperation.updateMappingData(args.data, 'duration');\n this.parent.editModule.updateResourceRelatedFields(args.data, 'endDate');\n this.updateEditedRecord(args);\n };\n /**\n * To update duration cell with new value\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.durationEdited = function (args) {\n var ganttProb = args.data.ganttProperties;\n var durationString = args.data[this.parent.taskFields.duration];\n this.parent.dataOperation.updateDurationValue(durationString, ganttProb);\n this.updateDates(args);\n this.parent.editModule.updateResourceRelatedFields(args.data, 'duration');\n this.updateEditedRecord(args);\n };\n /**\n * To update start date, end date based on duration\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.updateDates = function (args) {\n var ganttProb = args.data.ganttProperties;\n var endDate = this.parent.dateValidationModule.getDateFromFormat(ganttProb.endDate);\n var startDate = this.parent.dateValidationModule.getDateFromFormat(ganttProb.startDate);\n var currentDuration = ganttProb.duration;\n if (isNOU(currentDuration)) {\n this.parent.setRecordValue('isMilestone', false, ganttProb, true);\n if (args.data[this.parent.taskFields.duration] != null) {\n this.parent.setRecordValue('endDate', null, ganttProb, true);\n }\n }\n else {\n if (isNOU(startDate) && !isNOU(endDate)) {\n this.parent.setRecordValue('startDate', this.parent.dateValidationModule.getStartDate(endDate, currentDuration, ganttProb.durationUnit, ganttProb), ganttProb, true);\n }\n if (currentDuration !== 0 && ganttProb.isMilestone) {\n this.parent.setRecordValue('isMilestone', false, ganttProb, true);\n this.parent.setRecordValue('startDate', this.parent.dateValidationModule.checkStartDate(ganttProb.startDate, ganttProb), ganttProb, true);\n }\n if (!isNullOrUndefined(ganttProb.segments) && ganttProb.segments.length > 0) {\n this.parent.setRecordValue('segments', this.parent.dataOperation.setSegmentsInfo(args.data, false), ganttProb, true);\n this.parent.dataOperation.updateMappingData(args.data, 'segments');\n }\n this.parent.setRecordValue('isMilestone', (ganttProb.duration === 0 ? true : false), ganttProb, true);\n this.parent.dateValidationModule.calculateEndDate(args.data);\n }\n this.parent.dataOperation.updateWidthLeft(args.data);\n this.parent.dataOperation.updateMappingData(args.data, 'endDate');\n this.parent.dataOperation.updateMappingData(args.data, 'startDate');\n this.parent.dataOperation.updateMappingData(args.data, 'duration');\n };\n /**\n * To update progress cell with new value\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.progressEdited = function (args) {\n var ganttRecord = args.data;\n this.parent.setRecordValue('progress', (ganttRecord[this.parent.taskFields.progress] > 100 ? 100 : ganttRecord[this.parent.taskFields.progress]), ganttRecord.ganttProperties, true);\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.progress, (ganttRecord[this.parent.taskFields.progress] > 100 ? 100 : ganttRecord[this.parent.taskFields.progress]), args.data);\n if (!ganttRecord.ganttProperties.isAutoSchedule) {\n this.parent.setRecordValue('autoWidth', this.parent.dataOperation.calculateWidth(ganttRecord, false), ganttRecord.ganttProperties, true);\n }\n if (!isNullOrUndefined(args.data.ganttProperties.segments) && args.data.ganttProperties.segments.length > 0 &&\n !isNullOrUndefined(this.parent.editModule.taskbarEditModule)) {\n this.parent.editModule.taskbarEditModule.updateSegmentProgress(args.data.ganttProperties);\n }\n if (!args.data.hasChildRecords) {\n var width = ganttRecord.ganttProperties.isAutoSchedule ? ganttRecord.ganttProperties.width :\n ganttRecord.ganttProperties.autoWidth;\n this.parent.setRecordValue('progressWidth', this.parent.dataOperation.getProgressWidth(width, ganttRecord.ganttProperties.progress), ganttRecord.ganttProperties, true);\n }\n this.updateEditedRecord(args);\n };\n /**\n * To update baselines with new baseline start date and baseline end date\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.baselineEdited = function (args) {\n var ganttRecord = args.data.ganttProperties;\n var baseLineStartDate = args.data[this.parent.taskFields.baselineStartDate];\n var baseLineEndDate = args.data[this.parent.taskFields.baselineEndDate];\n if (baseLineEndDate && baseLineEndDate.getHours() === 0 && this.parent.defaultEndTime !== 86400) {\n this.parent.dateValidationModule.setTime(this.parent.defaultEndTime, baseLineEndDate);\n }\n this.parent.setRecordValue('baselineStartDate', this.parent.dateValidationModule.checkBaselineStartDate(baseLineStartDate), ganttRecord, true);\n this.parent.setRecordValue('baselineEndDate', this.parent.dateValidationModule.checkBaselineEndDate(baseLineEndDate), ganttRecord, true);\n if (ganttRecord.baselineStartDate && ganttRecord.baselineEndDate) {\n this.parent.setRecordValue('baselineLeft', this.parent.dataOperation.calculateBaselineLeft(ganttRecord), ganttRecord, true);\n this.parent.setRecordValue('baselineWidth', this.parent.dataOperation.calculateBaselineWidth(ganttRecord), ganttRecord, true);\n }\n this.updateEditedRecord(args);\n };\n /**\n * To update task's resource cell with new value\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @param {object} editedObj .\n * @param {IGanttData} previousData .\n * @returns {void} .\n */\n CellEdit.prototype.resourceEdited = function (args, editedObj, previousData) {\n var resourceSettings = this.parent.resourceFields;\n var editedResourceId = editedObj[this.parent.taskFields.resourceInfo];\n if (editedResourceId) {\n this.isResourceCellEdited = true;\n var tempResourceInfo = this.parent.dataOperation.setResourceInfo(editedObj);\n var editedResouceLength = tempResourceInfo.length;\n var previousResource = previousData.ganttProperties.resourceInfo;\n var index = void 0;\n var editedResources = [];\n var resourceData = this.parent.resources;\n var newIndex = void 0;\n var _loop_1 = function (count) {\n if (previousResource) {\n var previousResourceLength = previousResource.length;\n for (newIndex = 0; newIndex < previousResourceLength; newIndex++) {\n if (previousResource[newIndex][resourceSettings.id] === editedResourceId[count]) {\n index = newIndex;\n break;\n }\n else {\n index = -1;\n }\n }\n }\n if (!isNOU(index) && index !== -1) {\n editedResources.push(previousResource[parseInt(index.toString(), 10)]);\n }\n else {\n var resource = resourceData.filter(function (resourceInfo) {\n return (editedResourceId[count] === resourceInfo[resourceSettings.id]);\n });\n var ganttDataResource = extend({}, resource[0]);\n ganttDataResource[resourceSettings.unit] = 100;\n editedResources.push(ganttDataResource);\n }\n };\n for (var count = 0; count < editedResouceLength; count++) {\n _loop_1(count);\n }\n args.data.ganttProperties.resourceInfo = editedResources;\n this.parent.dataOperation.updateMappingData(args.data, 'resourceInfo');\n this.parent.editModule.updateResourceRelatedFields(args.data, 'resource');\n if (this.parent.viewType === 'ResourceView') {\n this.parent.editModule.dialogModule.isResourceUpdate = true;\n this.parent.editModule.dialogModule.previousResource = previousResource;\n }\n this.updateDates(args);\n this.updateEditedRecord(args);\n }\n };\n /**\n * To update task's predecessor cell with new value\n *\n * @param {ITaskbarEditedEventArgs} editedArgs .\n * @param {object} cellEditArgs .\n * @returns {void} .\n */\n CellEdit.prototype.dependencyEdited = function (editedArgs, cellEditArgs) {\n this.parent.predecessorModule.updateUnscheduledDependency(editedArgs.data);\n if (!this.parent.connectorLineEditModule.updatePredecessor(editedArgs.data, editedArgs.data[this.parent.taskFields.dependency], editedArgs)) {\n this.parent.editModule.revertCellEdit(cellEditArgs);\n }\n };\n /**\n * To update task's work cell with new value\n *\n * @param {ITaskbarEditedEventArgs} editedArgs .\n * @returns {void} .\n */\n CellEdit.prototype.workEdited = function (editedArgs) {\n var ganttProb = editedArgs.data.ganttProperties;\n var workValue = editedArgs.data[this.parent.taskFields.work];\n this.parent.setRecordValue('work', workValue, ganttProb, true);\n this.parent.editModule.updateResourceRelatedFields(editedArgs.data, 'work');\n this.updateDates(editedArgs);\n this.updateEditedRecord(editedArgs);\n };\n /**\n * To update task type cell with new value\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @param {object} editedObj .\n * @returns {void} .\n */\n CellEdit.prototype.typeEdited = function (args, editedObj) {\n var key = 'taskType';\n var ganttProb = args.data.ganttProperties;\n var taskType = editedObj[\"\" + key];\n this.parent.setRecordValue('taskType', taskType, ganttProb, true);\n //this.parent.dataOperation.updateMappingData(args.data, 'taskType');\n this.updateEditedRecord(args);\n };\n /**\n * To compare start date and end date from Gantt record\n *\n * @param {ITaskData} ganttRecord .\n * @returns {number} .\n */\n CellEdit.prototype.compareDatesFromRecord = function (ganttRecord) {\n var sDate = this.parent.dateValidationModule.getValidStartDate(ganttRecord);\n var eDate = this.parent.dateValidationModule.getValidEndDate(ganttRecord);\n return this.parent.dateValidationModule.compareDates(sDate, eDate);\n };\n /**\n * To start method save action with edited cell value\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n */\n CellEdit.prototype.updateEditedRecord = function (args) {\n this.parent.editModule.initiateUpdateAction(args);\n };\n /**\n * To remove all public private properties\n *\n * @returns {void} .\n * @private\n */\n CellEdit.prototype.destroy = function () {\n // Destroy Method\n this.parent.editModule.cellEditModule = undefined;\n };\n return CellEdit;\n}());\nexport { CellEdit };\n","import { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport * as cls from '../base/css-constants';\n/**\n * File for handling taskbar editing tooltip in Gantt.\n */\nvar EditTooltip = /** @class */ (function () {\n function EditTooltip(gantt, taskbarEdit) {\n this.parent = gantt;\n this.taskbarEdit = taskbarEdit;\n }\n /**\n * To create tooltip.\n *\n * @param {string} opensOn .\n * @param {boolean} mouseTrail .\n * @param {string} target .\n * @returns {void}\n * @private\n */\n EditTooltip.prototype.createTooltip = function (opensOn, mouseTrail, target) {\n var _this = this;\n this.toolTipObj = new Tooltip({\n opensOn: opensOn,\n position: 'TopRight',\n enableRtl: this.parent.enableRtl,\n mouseTrail: mouseTrail,\n cssClass: cls.ganttTooltip,\n target: target ? target : null,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n this.toolTipObj.beforeRender = function (args) {\n var argsData = {\n data: _this.taskbarEdit.taskBarEditRecord,\n args: args,\n content: _this.toolTipObj.content\n };\n _this.parent.trigger('beforeTooltipRender', argsData);\n };\n this.toolTipObj.afterOpen = function (args) {\n _this.updateTooltipPosition(args);\n };\n this.toolTipObj.isStringTemplate = true;\n this.toolTipObj.appendTo(this.parent.chartPane);\n };\n /**\n * Method to update tooltip position\n *\n * @param {TooltipEventArgs} args .\n * @returns {void} .\n */\n EditTooltip.prototype.updateTooltipPosition = function (args) {\n var parentWithZoomStyle = this.parent.element.closest('[style*=\"zoom\"]');\n if (isNullOrUndefined(parentWithZoomStyle)) {\n var containerPosition = this.parent.getOffsetRect(this.parent.chartPane);\n var leftEnd = containerPosition.left + this.parent.chartPane.offsetWidth;\n var tooltipPositionX = args.element.offsetLeft;\n if (leftEnd < (tooltipPositionX + args.element.offsetWidth)) {\n tooltipPositionX += leftEnd - (tooltipPositionX + args.element.offsetWidth);\n }\n args.element.style.left = tooltipPositionX + 'px';\n }\n args.element.style.visibility = 'visible';\n };\n /**\n * To show/hide taskbar edit tooltip.\n *\n * @param {boolean} bool .\n * @param {number} segmentIndex .\n * @returns {void}\n * @private\n */\n EditTooltip.prototype.showHideTaskbarEditTooltip = function (bool, segmentIndex) {\n if (bool && this.parent.tooltipSettings.showTooltip) {\n this.createTooltip('Custom', false);\n this.parent.tooltipModule.toolTipObj.close();\n this.updateTooltip(segmentIndex);\n if (this.taskbarEdit.connectorSecondAction === 'ConnectorPointLeftDrag') {\n this.toolTipObj.open(this.taskbarEdit.connectorSecondElement.querySelector('.' + cls.connectorPointLeft));\n }\n else if (this.taskbarEdit.connectorSecondAction === 'ConnectorPointRightDrag') {\n this.toolTipObj.open(this.taskbarEdit.connectorSecondElement.querySelector('.' + cls.connectorPointRight));\n }\n else {\n this.toolTipObj.open(this.taskbarEdit.taskBarEditElement);\n }\n }\n else if (!isNullOrUndefined(this.toolTipObj)) {\n this.toolTipObj.destroy();\n this.toolTipObj = null;\n }\n };\n /**\n * To update tooltip content and position.\n *\n * @param {number} segmentIndex .\n * @returns {void} .\n * @private\n */\n EditTooltip.prototype.updateTooltip = function (segmentIndex) {\n var ganttProp = this.taskbarEdit.taskBarEditRecord.ganttProperties;\n var taskWidth = segmentIndex === -1 ? ganttProp.width :\n ganttProp.segments[segmentIndex].width;\n var progressWidth = segmentIndex === -1 ? ganttProp.progressWidth :\n ganttProp.segments[segmentIndex].progressWidth;\n var left = segmentIndex === -1 ? ganttProp.left : ganttProp.left + ganttProp.segments[segmentIndex].left;\n if (!isNullOrUndefined(this.toolTipObj)) {\n if (this.taskbarEdit.taskBarEditAction === 'ConnectorPointLeftDrag' ||\n this.taskbarEdit.taskBarEditAction === 'ConnectorPointRightDrag') {\n this.toolTipObj.content = this.getTooltipText(segmentIndex);\n this.toolTipObj.offsetY = -3;\n }\n else {\n this.toolTipObj.content = this.getTooltipText(segmentIndex);\n this.toolTipObj.refresh(this.taskbarEdit.taskBarEditElement);\n if (this.taskbarEdit.taskBarEditAction === 'LeftResizing') {\n if (this.parent.enableRtl) {\n this.toolTipObj.offsetX = 0;\n }\n else {\n this.toolTipObj.offsetX = -taskWidth;\n }\n }\n else if (this.taskbarEdit.taskBarEditAction === 'RightResizing' ||\n this.taskbarEdit.taskBarEditAction === 'ParentResizing') {\n if (this.parent.enableRtl) {\n this.toolTipObj.offsetX = -taskWidth;\n }\n else {\n this.toolTipObj.offsetX = 0;\n }\n }\n else if (this.taskbarEdit.taskBarEditAction === 'ProgressResizing') {\n if (this.parent.enableRtl) {\n this.toolTipObj.offsetX = -(progressWidth);\n }\n else {\n this.toolTipObj.offsetX = -(taskWidth - progressWidth);\n }\n }\n else if (this.taskbarEdit.taskBarEditAction === 'MilestoneDrag') {\n this.toolTipObj.offsetX = -(this.parent.chartRowsModule.milestoneHeight / 2);\n }\n else if (taskWidth > 5) {\n this.toolTipObj.offsetX = -(taskWidth + left - this.taskbarEdit.tooltipPositionX);\n }\n }\n }\n };\n /**\n * To get updated tooltip text.\n *\n * @param {number} segmentIndex .\n * @returns {void} .\n * @private\n */\n EditTooltip.prototype.getTooltipText = function (segmentIndex) {\n var tooltipString = '';\n var instance = this.parent.globalize;\n var editRecord = this.taskbarEdit.taskBarEditRecord.ganttProperties;\n if (!isNullOrUndefined(editRecord.segments) && editRecord.segments.length > 0 && segmentIndex !== -1\n && this.taskbarEdit.taskBarEditAction !== 'ProgressResizing') {\n editRecord = editRecord.segments[segmentIndex];\n }\n if (this.parent.tooltipSettings.editing) {\n var templateNode = this.parent.tooltipModule.templateCompiler(this.parent.tooltipSettings.editing, this.parent, this.taskbarEdit.taskBarEditRecord, 'TooltipEditingTemplate');\n if (getValue('tooltipEle', this.toolTipObj)) {\n this.parent.renderTemplates();\n }\n tooltipString = templateNode[0];\n }\n else {\n var startDate = void 0;\n var endDate = void 0;\n var duration = void 0;\n if (!isNullOrUndefined(editRecord.startDate)) {\n startDate = '' + this.parent.localeObj.getConstant('startDate') +\n ':' +\n instance.formatDate(editRecord.startDate, { format: this.parent.getDateFormat() }) + '';\n }\n if (!isNullOrUndefined(editRecord.endDate)) {\n endDate = '' + this.parent.localeObj.getConstant('endDate') +\n ':' +\n instance.formatDate(editRecord.endDate, { format: this.parent.getDateFormat() }) + '';\n }\n if (!isNullOrUndefined(editRecord.duration)) {\n duration = '' + this.parent.localeObj.getConstant('duration') +\n ':' +\n this.parent.getDurationString(editRecord.duration, editRecord.durationUnit) + '';\n }\n switch (this.taskbarEdit.taskBarEditAction) {\n case 'ProgressResizing':\n var progress = '' + this.parent.localeObj.getConstant('progress') +\n ':' + editRecord.progress + '';\n tooltipString = '' +\n progress + '
';\n break;\n case 'LeftResizing':\n tooltipString = '' +\n startDate + duration + '
';\n break;\n case 'RightResizing':\n case 'ParentResizing':\n tooltipString = '' +\n endDate + duration + '
';\n break;\n case 'ChildDrag':\n case 'ParentDrag':\n case 'MilestoneDrag':\n case 'ManualParentDrag':\n var sDate = '';\n var eDate = '';\n if (!isNullOrUndefined(this.taskbarEdit.taskBarEditRecord.ganttProperties.startDate)) {\n sDate = startDate;\n }\n if (!isNullOrUndefined(this.taskbarEdit.taskBarEditRecord.ganttProperties.endDate)) {\n eDate = endDate;\n }\n tooltipString = '' + sDate + eDate + '
';\n break;\n case 'ConnectorPointLeftDrag':\n case 'ConnectorPointRightDrag':\n tooltipString = this.parent.connectorLineModule.tooltipTable;\n if (isNullOrUndefined(this.toolTipObj)) {\n this.parent.connectorLineModule.tooltipTable.innerHTML =\n this.parent.connectorLineModule.getConnectorLineTooltipInnerTd(this.parent.editModule.taskbarEditModule.taskBarEditRecord.ganttProperties.taskName, this.parent.editModule.taskbarEditModule.fromPredecessorText, '', '');\n }\n break;\n }\n }\n return tooltipString;\n };\n return EditTooltip;\n}());\nexport { EditTooltip };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__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};\nimport { isNullOrUndefined, createElement, extend, addClass, remove, removeClass, closest, merge } from '@syncfusion/ej2-base';\nimport { parentsUntil } from '../base/utils';\nimport { DateProcessor } from '../base/date-processor';\nimport * as cls from '../base/css-constants';\nimport { EditTooltip } from '../renderer/edit-tooltip';\n/**\n * File for handling taskbar editing operation in Gantt.\n */\nvar TaskbarEdit = /** @class */ (function (_super) {\n __extends(TaskbarEdit, _super);\n function TaskbarEdit(ganttObj) {\n var _this = _super.call(this, ganttObj) || this;\n _this.isMouseDragged = false;\n _this.dependencyCancel = false;\n _this.editElement = null;\n _this.elementOffsetLeft = 0;\n _this.elementOffsetTop = 0;\n _this.elementOffsetWidth = 0;\n _this.elementOffsetHeight = 0;\n _this.segmentIndex = -1;\n _this.currentItemTop = 0;\n _this.currentItemPrevTop = 0;\n _this.topValue = 0;\n _this.draggedRecordMarginTop = 0;\n _this.parent = ganttObj;\n _this.initPublicProp();\n _this.wireEvents();\n _this.editTooltip = new EditTooltip(_this.parent, _this);\n return _this;\n }\n TaskbarEdit.prototype.wireEvents = function () {\n this.parent.on('chartMouseDown', this.mouseDownHandler, this);\n this.parent.on('chartMouseUp', this.mouseUpHandler, this);\n this.parent.on('chartMouseLeave', this.mouseLeaveHandler, this);\n this.parent.on('chartMouseMove', this.mouseMoveAction, this);\n this.parent.on('chartMouseClick', this.mouseClickHandler, this);\n };\n /**\n * To initialize the public property.\n *\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.initPublicProp = function () {\n this.taskBarEditElement = null;\n this.taskBarEditRecord = null;\n this.taskBarEditAction = null;\n this.connectorSecondElement = null;\n this.connectorSecondRecord = null;\n this.connectorSecondAction = null;\n this.highlightedSecondElement = null;\n this.fromPredecessorText = null;\n this.toPredecessorText = null;\n this.finalPredecessor = null;\n this.drawPredecessor = false;\n this.roundOffDuration = true;\n this.dragMouseLeave = false;\n this.isMouseDragged = false;\n this.previousItemProperty = ['left', 'progress', 'duration', 'isMilestone', 'startDate', 'endDate', 'width', 'progressWidth',\n 'autoLeft', 'autoDuration', 'autoStartDate', 'autoEndDate', 'autoWidth', 'segments'];\n this.tapPointOnFocus = false;\n this.touchEdit = false;\n };\n TaskbarEdit.prototype.mouseDownHandler = function (e) {\n if (this.parent.editSettings.allowTaskbarEditing && !this.parent.readOnly) {\n this.canDrag = false;\n if (this.parent.isAdaptive && this.taskBarEditElement) {\n var targetElement = this.getElementByPosition(e);\n var element = parentsUntil(targetElement, cls.taskBarMainContainer);\n if (element && element.innerHTML === this.taskBarEditElement.innerHTML &&\n !(targetElement.classList.contains(cls.connectorPointLeft) ||\n targetElement.classList.contains(cls.connectorPointRight)) &&\n !this.tapPointOnFocus) {\n this.updateTaskBarEditElement(e);\n this.canDrag = true;\n e.preventDefault();\n }\n }\n else if (!this.parent.isAdaptive) {\n this.updateTaskBarEditElement(e);\n }\n }\n };\n TaskbarEdit.prototype.mouseClickHandler = function (e) {\n if (!this.parent.editSettings.allowTaskbarEditing) {\n return;\n }\n var targetElement = this.getElementByPosition(e);\n var element = parentsUntil(targetElement, cls.taskBarMainContainer);\n if (this.parent.selectionModule && this.parent.selectionModule.enableSelectMultiTouch) {\n if (this.tapPointOnFocus) {\n this.updateTaskBarEditElement(e);\n }\n return;\n }\n if (this.tapPointOnFocus && element && element.innerHTML !== this.taskBarEditElement.innerHTML) {\n this.connectorSecondRecord = this.parent.ganttChartModule.getRecordByTaskBar(element);\n this.connectorSecondAction = 'ConnectorPointLeftDrag';\n this.connectorSecondElement = element;\n this.fromPredecessorText = 'Finish';\n if (this.validateConnectorPoint()) {\n this.taskBarEditingAction(e, true);\n }\n this.showHideActivePredecessors(false);\n this.initPublicProp();\n }\n else if (targetElement.classList.contains(cls.connectorPointLeftHover) ||\n targetElement.classList.contains(cls.connectorPointRightHover)) {\n this.canDrag = false;\n this.multipleSelectionEnabled();\n this.showHideTaskBarEditingElements(targetElement, this.taskBarEditElement);\n this.tapPointOnFocus = true;\n this.taskBarEditAction = 'ConnectorPointRightDrag';\n this.connectorSecondRecord = this.taskBarEditRecord;\n this.taskBarEditingAction(e, false);\n }\n else {\n if (this.tapPointOnFocus) {\n this.showHideActivePredecessors(false);\n this.showHideTaskBarEditingElements(element, this.taskBarEditElement);\n }\n this.updateTaskBarEditElement(e);\n }\n };\n TaskbarEdit.prototype.showHideActivePredecessors = function (show) {\n var ganttProp = this.taskBarEditRecord.ganttProperties;\n var predecessors = ganttProp.predecessor;\n var id = this.parent.viewType === 'ResourceView' ? ganttProp.taskId : ganttProp.rowUniqueID;\n if (predecessors) {\n for (var i = 0; i < predecessors.length; i++) {\n var predecessor = predecessors[i];\n if (id.toString() === predecessor.from || id.toString() === predecessor.to) {\n this.applyActiveColor(predecessor.from, predecessor.to, show);\n }\n }\n }\n var chartContent = this.parent.ganttChartModule.chartBodyContainer;\n if (show) {\n addClass([this.taskBarEditElement], [cls.activeChildTask]);\n addClass([chartContent], [cls.touchMode]);\n }\n else {\n removeClass([this.taskBarEditElement], [cls.activeChildTask]);\n removeClass([chartContent], [cls.touchMode]);\n }\n this.touchEdit = show;\n if (!isNullOrUndefined(this.parent.toolbarModule)) {\n this.parent.toolbarModule.refreshToolbarItems();\n }\n };\n TaskbarEdit.prototype.applyActiveColor = function (from, to, enable) {\n var taskId = this.parent.viewType === 'ProjectView' ? this.taskBarEditRecord.ganttProperties.taskId.toString() :\n this.taskBarEditRecord.ganttProperties.rowUniqueID.toString();\n var ganttRecord = (taskId === from) ? this.parent.connectorLineModule.getRecordByID(to) :\n this.parent.connectorLineModule.getRecordByID(from);\n var $tr = this.parent.ganttChartModule.getChartRows()[this.parent.currentViewData.indexOf(ganttRecord)];\n if (!isNullOrUndefined($tr)) {\n var $taskbar = $tr.querySelector('.' + cls.taskBarMainContainer);\n var $connectorElement = this.parent.element.querySelector('#ConnectorLineparent' + from + 'child' + to);\n if (enable) {\n addClass([$taskbar], [cls.activeConnectedTask]);\n if ($connectorElement) {\n addClass([$connectorElement], [cls.activeConnectedTask]);\n }\n }\n else {\n removeClass([$taskbar], [cls.activeConnectedTask]);\n if ($connectorElement) {\n removeClass([$connectorElement], [cls.activeConnectedTask]);\n }\n }\n }\n };\n TaskbarEdit.prototype.validateConnectorPoint = function () {\n var parentRecord = this.taskBarEditRecord.ganttProperties;\n var childRecord = this.connectorSecondRecord.ganttProperties;\n var isValid = true;\n var parentId = this.parent.viewType === 'ResourceView' ? parentRecord.taskId : parentRecord.rowUniqueID;\n var childId = this.parent.viewType === 'ResourceView' ? childRecord.taskId : childRecord.rowUniqueID;\n if (this.connectorSecondRecord.hasChildRecords) {\n isValid = false;\n }\n else if (childRecord.predecessor) {\n for (var i = 0; i < childRecord.predecessor.length; i++) {\n var predecessor = childRecord.predecessor[i];\n if (predecessor.from === parentId.toString() &&\n predecessor.to === childId.toString()) {\n this.parent.connectorLineEditModule.childRecord = this.connectorSecondRecord;\n this.parent.connectorLineEditModule.predecessorIndex = i;\n this.parent.connectorLineEditModule.renderPredecessorDeleteConfirmDialog();\n isValid = false;\n break;\n }\n else if (predecessor.from === childId.toString() &&\n predecessor.to === parentId.toString()) {\n this.parent.connectorLineEditModule.childRecord = this.taskBarEditRecord;\n this.parent.connectorLineEditModule.predecessorIndex = i;\n this.parent.connectorLineEditModule.renderPredecessorDeleteConfirmDialog();\n isValid = false;\n break;\n }\n }\n }\n return isValid;\n };\n // eslint-disable-next-line\n TaskbarEdit.prototype.mouseLeaveHandler = function (e) {\n this.dragMouseLeave = true;\n };\n /**\n * To update taskbar edited elements on mouse down action.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.updateTaskBarEditElement = function (e) {\n var target = this.getElementByPosition(e);\n var element;\n if (target.classList.contains(cls.manualParentRightResizer) || target.classList.contains(cls.manualParentMainContainer)\n || target.classList.contains(cls.manualParentTaskBar)) {\n element = parentsUntil(target, cls.manualParentMainContainer);\n }\n else if (target.classList.contains(cls.manualParentMilestone)) {\n element = parentsUntil(target, cls.manualParentMilestone);\n }\n else {\n element = parentsUntil(target, cls.taskBarMainContainer);\n if (!isNullOrUndefined(element) && !target.classList.contains('e-connectorpoint-left') &&\n !target.classList.contains('e-connectorpoint-right')) {\n var currentRecord = this.parent.ganttChartModule.getRecordByTaskBar(element);\n if (!isNullOrUndefined(currentRecord.ganttProperties.segments) && currentRecord.ganttProperties.segments.length > 0) {\n element = parentsUntil(target, cls.childTaskBarInnerDiv);\n }\n }\n }\n if (this.parent.editSettings.allowTaskbarEditing && element) {\n this.showHideTaskBarEditingElements(element, this.taskBarEditElement);\n this.editElement = element;\n this.realTaskbarElement = this.editElement;\n var index = this.editElement.getAttribute('data-segment-index');\n if (!isNullOrUndefined(index)) {\n this.segmentIndex = Number(index);\n }\n else {\n this.segmentIndex = -1;\n }\n this.taskBarEditRecord = this.parent.ganttChartModule.getRecordByTaskBar(this.editElement);\n if (e.type === 'mousedown' || e.type === 'touchstart' || e.type === 'click') {\n this.taskBarEditAction = this.getTaskBarAction(e);\n var index_1 = this.editElement.getAttribute('data-segment-index');\n var currentRecord = this.parent.ganttChartModule.getRecordByTaskBar(element);\n var ganttprop = currentRecord.ganttProperties;\n var parentleft = this.editElement.parentElement.offsetLeft;\n this.currentData = currentRecord;\n var resizeElement = createElement('div', { styles: 'height:100%;border-style:dashed;border-bottom:none;border-top:none;border-width:1px;position:absolute;z-index:10000' });\n addClass([resizeElement], 'e-taskbar-resize-div');\n resizeElement.style.setProperty(\"width\", ganttprop.width + \"px\");\n var currentindex = this.editElement.getAttribute('data-segment-index');\n resizeElement.style.setProperty(\"left\", ((!isNullOrUndefined(ganttprop.segments) ? parentleft + ganttprop.segments[Number(currentindex)].left + \"px\" : (ganttprop.left) + \"px\")));\n var resizeTable = this.parent.createElement('table');\n var resizetableBody = this.parent.createElement(\"tbody\");\n resizetableBody.appendChild(resizeElement);\n resizeTable.appendChild(resizetableBody);\n var Check = this.parent.ganttChartModule.chartBodyContainer.querySelector('.e-clone-taskbar');\n var createTable = null;\n if ((this.taskBarEditAction === 'ChildDrag' || this.taskBarEditAction === 'LeftResizing') && !isNullOrUndefined(index_1) && !isNullOrUndefined(index_1) ? Number(index_1) === 0 : false) {\n var cloneTaskBar = this.editElement.parentElement.cloneNode(true);\n }\n else {\n var cloneTaskBar = this.editElement.cloneNode(true);\n }\n if (!Check) {\n addClass([cloneTaskBar], 'e-clone-taskbar');\n cloneTaskBar.style.setProperty(\"position\", \"absolute\");\n cloneTaskBar.style.setProperty(\"top\", 0 + \"px\");\n createTable = this.parent.createElement('table');\n var tableBody = this.parent.createElement(\"tbody\");\n tableBody.appendChild(cloneTaskBar);\n createTable.appendChild(tableBody);\n }\n if ((this.taskBarEditAction === 'ChildDrag' || this.taskBarEditAction === 'LeftResizing') && !isNullOrUndefined(index_1) && !isNullOrUndefined(index_1) ? Number(index_1) === 0 : false) {\n var segmentedTasks = cloneTaskBar.getElementsByClassName('e-segmented-taskbar');\n this.cloneTaskbarElement = segmentedTasks[Number(index_1)];\n }\n else {\n this.cloneTaskbarElement = cloneTaskBar;\n }\n this.taskBarEditElement = this.cloneTaskbarElement;\n this.taskbarElement = createTable;\n this.taskbarResizer = resizeTable;\n this.currentIndex = index_1;\n this.roundOffDuration = true;\n if ((this.taskBarEditAction === 'ConnectorPointLeftDrag' || this.taskBarEditAction === 'ConnectorPointRightDrag') &&\n isNullOrUndefined(this.parent.taskFields.dependency)) {\n this.taskBarEditAction = null;\n }\n this.updateMouseDownProperties(e);\n if (this.parent.viewType === 'ResourceView') {\n if (this.taskBarEditRecord.level === 0) {\n return;\n }\n else if (this.parent.enableMultiTaskbar) {\n var parentRecord = this.parent.getTaskByUniqueID(this.taskBarEditRecord.parentItem.uniqueID);\n if (!isNullOrUndefined(parentRecord) && !parentRecord.expanded) {\n this.prevZIndex = (this.taskBarEditElement).style.zIndex;\n (this.taskBarEditElement).style.zIndex = '1000';\n if (this.taskBarEditElement.querySelector('.e-gantt-child-taskbar')) {\n addClass([this.taskBarEditElement.querySelector('.e-gantt-child-taskbar')], 'e-collapsed-taskbar-drag');\n }\n }\n }\n }\n }\n }\n else {\n if (this.parent.isAdaptive) {\n if (this.taskBarEditElement) {\n this.showHideTaskBarEditingElements(element, this.taskBarEditElement);\n }\n this.initPublicProp();\n }\n else {\n this.showHideTaskBarEditingElements(element, this.editElement);\n }\n }\n };\n /**\n * To show/hide taskbar editing elements.\n *\n * @param {Element} element .\n * @param {Element} secondElement .\n * @param {boolean} fadeConnectorLine .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.showHideTaskBarEditingElements = function (element, secondElement, fadeConnectorLine) {\n secondElement = secondElement ? secondElement : this.editElement;\n var isShowProgressResizer = this.parent.taskFields.progress ? true : false;\n var isShowConnectorPoints = true;\n if (this.parent.readOnly) {\n return;\n }\n if (this.parent.viewType === 'ResourceView' && this.parent.enableMultiTaskbar && element) {\n var record = this.parent.ganttChartModule.getRecordByTaskBar(element);\n var parentRecord = this.parent.getParentTask(record.parentItem);\n if (!isNullOrUndefined(parentRecord)) {\n if (!parentRecord.expanded) {\n isShowProgressResizer = false;\n isShowConnectorPoints = false;\n }\n }\n }\n if (element) {\n if (element.querySelector('.' + cls.taskBarLeftResizer)) {\n addClass([element.querySelector('.' + cls.taskBarLeftResizer)], [cls.leftResizeGripper]);\n addClass([element.querySelector('.' + cls.taskBarRightResizer)], [cls.rightResizeGripper]);\n if (isShowProgressResizer) {\n var progressElement = element.querySelector('.' + cls.childProgressResizer);\n if (!isNullOrUndefined(progressElement)) {\n addClass([progressElement], [cls.progressResizeGripper]);\n progressElement.style.top = '3px';\n }\n }\n }\n else if (this.parent.isAdaptive && isShowProgressResizer) {\n var record = this.parent.ganttChartModule.getRecordByTaskBar(element);\n if (record.hasChildRecords) {\n addClass([element], [cls.activeParentTask]);\n }\n }\n addClass(this.parent.ganttChartModule.scrollElement.querySelectorAll('.' + cls.connectorLineContainer), [cls.connectorLineZIndex]);\n if (!isNullOrUndefined(this.parent.taskFields.dependency)\n && (element.querySelector('.' + cls.connectorPointLeft)\n || element.parentElement.querySelector('.' + cls.connectorPointLeft))\n && isShowConnectorPoints) {\n var connectorElement = !isNullOrUndefined(element.querySelector('.' + cls.connectorPointLeft)) ?\n element : element.parentElement;\n addClass([connectorElement.querySelector('.' + cls.connectorPointLeft)], [cls.connectorPointLeftHover]);\n addClass([connectorElement.querySelector('.' + cls.connectorPointRight)], [cls.connectorPointRightHover]);\n }\n }\n else if (!fadeConnectorLine) {\n removeClass(this.parent.ganttChartModule.scrollElement.querySelectorAll('.' + cls.connectorLineContainer), [cls.connectorLineZIndex]);\n }\n if (secondElement && element !== secondElement) {\n if (secondElement.querySelector('.' + cls.taskBarLeftResizer)) {\n removeClass([secondElement.querySelector('.' + cls.taskBarLeftResizer)], [cls.leftResizeGripper]);\n removeClass([secondElement.querySelector('.' + cls.taskBarRightResizer)], [cls.rightResizeGripper]);\n if (secondElement.querySelector('.' + cls.childProgressResizer)) {\n removeClass([secondElement.querySelector('.' + cls.childProgressResizer)], [cls.progressResizeGripper]);\n }\n }\n if (!isNullOrUndefined(this.parent.taskFields.dependency)\n && (secondElement.querySelector('.' + cls.connectorPointLeft)\n || secondElement.parentElement.querySelector('.' + cls.connectorPointLeft))) {\n var connectorElement = !isNullOrUndefined(secondElement.querySelector('.' + cls.connectorPointLeft)) ?\n secondElement : secondElement.parentElement;\n removeClass([connectorElement.querySelector('.' + cls.connectorPointLeft)], [cls.connectorPointLeftHover]);\n removeClass([connectorElement.querySelector('.' + cls.connectorPointRight)], [cls.connectorPointRightHover]);\n }\n else if (this.parent.isAdaptive) {\n var record = this.parent.ganttChartModule.getRecordByTaskBar(secondElement);\n if (record && record.hasChildRecords) {\n removeClass([secondElement], [cls.activeParentTask]);\n }\n }\n this.editElement = null;\n }\n };\n /**\n * To get taskbar edit actions.\n *\n * @param {PointerEvent} e .\n * @returns {string} .\n * @private\n */\n TaskbarEdit.prototype.getTaskBarAction = function (e) {\n var mouseDownElement = this.getElementByPosition(e);\n var data = this.taskBarEditRecord;\n var action = '';\n if (mouseDownElement.classList.contains(cls.taskBarLeftResizer)) {\n action = 'LeftResizing';\n }\n else if (mouseDownElement.classList.contains(cls.taskBarRightResizer)) {\n action = 'RightResizing';\n }\n else if ((mouseDownElement.classList.contains(cls.childProgressResizer) ||\n closest(mouseDownElement, '.' + cls.childProgressResizer)) && (this.parent.taskFields.progress)) {\n action = 'ProgressResizing';\n }\n else if (mouseDownElement.classList.contains(cls.connectorPointLeft)) {\n action = 'ConnectorPointLeftDrag';\n }\n else if (mouseDownElement.classList.contains(cls.connectorPointRight)) {\n action = 'ConnectorPointRightDrag';\n }\n else if (mouseDownElement.classList.contains(cls.manualParentRightResizer)) {\n action = 'ParentResizing';\n }\n else if (mouseDownElement.classList.contains(cls.manualParentTaskBar) ||\n mouseDownElement.classList.contains(cls.manualParentMainContainer) ||\n mouseDownElement.classList.contains(cls.manualParentMilestone)) {\n action = 'ManualParentDrag';\n }\n else if (data) {\n action = data.hasChildRecords ? this.parent.taskMode === 'Auto' ? 'ParentDrag' : ''\n : data.ganttProperties.isMilestone ? 'MilestoneDrag' : 'ChildDrag';\n }\n return action;\n };\n /**\n * To update property while perform mouse down.\n *\n * @param {PointerEvent} event .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.updateMouseDownProperties = function (event) {\n var e = this.getCoordinate(event);\n var parentWithZoomStyle = this.parent.element.closest('[style*=\"zoom\"]');\n if (parentWithZoomStyle) {\n var zoom1 = parseFloat(getComputedStyle(parentWithZoomStyle).zoom);\n e.pageX = e.pageX / zoom1;\n e.pageY = e.pageY / zoom1;\n }\n if (e.pageX || e.pageY) {\n var containerPosition = this.parent.getOffsetRect(this.parent.ganttChartModule.chartBodyContainer);\n if (this.parent.enableRtl) {\n this.mouseDownX = Math.abs(e.pageX - (containerPosition.left +\n Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left)));\n }\n else {\n this.mouseDownX = (e.pageX - containerPosition.left) +\n this.parent.ganttChartModule.scrollObject.previousScroll.left;\n }\n this.tooltipPositionX = this.mouseDownX;\n this.mouseDownY = this.dragMoveY = e.pageY - containerPosition.top +\n this.parent.ganttChartModule.scrollObject.previousScroll.top;\n }\n if (this.parent.viewType == \"ResourceView\" && this.parent.allowTaskbarDragAndDrop) {\n var toolbarHeight = 0;\n if (!isNullOrUndefined(this.parent.toolbarModule) && !isNullOrUndefined(this.parent.toolbarModule.element)) {\n toolbarHeight = this.parent.toolbarModule.element.offsetHeight;\n }\n this.topValue = this.parent.getOffsetRect(event.target).top - this.parent.getOffsetRect(this.parent.element).top -\n parseInt((closest(event.target, '.e-taskbar-main-container'))['style'].marginTop) -\n this.parent.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'] -\n toolbarHeight + document.getElementsByClassName('e-chart-scroll-container e-content')[0].scrollTop;\n this.currentItemPrevTop = this.currentItemTop = this.topValue;\n }\n if (this.taskBarEditAction === 'ConnectorPointLeftDrag' || this.taskBarEditAction === 'ConnectorPointRightDrag') {\n this.fromPredecessorText = this.taskBarEditAction === 'ConnectorPointLeftDrag' ? 'start' : 'finish';\n this.parent.connectorLineModule.tooltipTable.innerHTML = this.parent.connectorLineModule.getConnectorLineTooltipInnerTd(this.taskBarEditRecord.ganttProperties.taskName, this.fromPredecessorText, '', '');\n }\n };\n TaskbarEdit.prototype.isMouseDragCheck = function () {\n if (!this.isMouseDragged && this.taskBarEditAction && ((this.mouseDownX !== this.mouseMoveX) &&\n ((this.mouseDownX + 3) < this.mouseMoveX || (this.mouseDownX - 3) > this.mouseMoveX)\n || (this.mouseDownY !== this.mouseMoveY) &&\n ((this.mouseDownY + 3) < this.mouseMoveY || (this.mouseDownY - 3) > this.mouseMoveY))) {\n this.isMouseDragged = true;\n this.parent.initiateEditAction(true);\n var item = this.taskBarEditRecord.ganttProperties;\n this.previousItem = this.parent.timelineModule.extendFunction(item, this.previousItemProperty);\n if (this.taskBarEditAction !== 'ConnectorPointLeftDrag' &&\n this.taskBarEditAction !== 'ConnectorPointRightDrag') {\n this.editTooltip.showHideTaskbarEditTooltip(true, this.segmentIndex);\n }\n this.taskBarEditElement.setAttribute('aria-grabbed', 'true');\n }\n };\n /**\n * To handle mouse move action in chart\n *\n * @param {PointerEvent} event .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.mouseMoveAction = function (event) {\n var _this = this;\n if (this.parent.isAdaptive) {\n if (!this.canDrag) {\n return;\n }\n else {\n this.multipleSelectionEnabled();\n }\n }\n var containerPosition = this.parent.getOffsetRect(this.parent.ganttChartModule.chartBodyContainer);\n var e = this.getCoordinate(event);\n if (this.parent.enableRtl) {\n this.mouseMoveX = Math.abs(e.pageX - (containerPosition.left +\n Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left)));\n }\n else {\n this.mouseMoveX = e.pageX - containerPosition.left +\n this.parent.ganttChartModule.scrollObject.previousScroll.left;\n }\n this.mouseMoveY = e.pageY - containerPosition.top +\n this.parent.ganttChartModule.scrollObject.previousScroll.top;\n this.dragMouseLeave = false;\n this.isMouseDragCheck();\n if (this.isMouseDragged && this.taskBarEditAction) {\n if (!isNullOrUndefined(this.taskbarElement) && !isNullOrUndefined(this.editElement) && (this.taskBarEditAction !== \"ConnectorPointRightDrag\" && this.taskBarEditAction !== \"ConnectorPointLeftDrag\") && !(this.parent.viewType === 'ResourceView' && this.currentData.hasChildRecords)) {\n var currentElement = this.editElement.parentElement;\n currentElement.style.setProperty(\"position\", \"absolute\");\n if ((this.taskBarEditAction === 'ChildDrag' || this.taskBarEditAction === 'LeftResizing') && !isNullOrUndefined(this.currentIndex) && !isNullOrUndefined(this.currentIndex) ? Number(this.currentIndex) === 0 : false) {\n this.taskbarElement.childNodes[0].childNodes[0].style.setProperty(\"top\", currentElement.parentElement.offsetTop + \"px\");\n currentElement.parentElement.appendChild(this.taskbarElement);\n }\n else {\n currentElement.appendChild(this.taskbarElement);\n }\n if (this.taskBarEditAction !== 'ProgressResizing') {\n var rootElement = this.parent.ganttChartModule.chartBodyContainer.querySelectorAll(\".e-chart-rows-container\");\n rootElement[0].appendChild(this.taskbarResizer);\n }\n }\n var args_1 = {\n cancel: false,\n requestType: 'taskbarediting',\n taskBarEditAction: this.taskBarEditAction,\n data: this.taskBarEditRecord\n };\n if (this.segmentIndex !== -1) {\n args_1.requestType = 'mergeSegment';\n }\n this.parent.trigger('actionBegin', args_1, function (arg) {\n if (args_1.taskBarEditAction === \"ConnectorPointRightDrag\" || args_1.taskBarEditAction === \"ConnectorPointLeftDrag\"\n || args_1.taskBarEditAction === \"LeftResizing\" || args_1.taskBarEditAction === \"RightResizing\"\n || args_1.taskBarEditAction === \"ProgressResizing\" || args_1.taskBarEditAction === \"ChildDrag\" || args_1.taskBarEditAction === \"ParentDrag\" || args_1.taskBarEditAction === \"MilestoneDrag\" || args_1.taskBarEditAction === \"ManualParentDrag\") {\n _this.parent.showIndicator = false;\n }\n if (!isNullOrUndefined(_this.parent.loadingIndicator) && _this.parent.loadingIndicator.indicatorType === \"Shimmer\" && _this.parent.showIndicator) {\n _this.parent.showMaskRow();\n }\n else if (_this.parent.showIndicator) {\n _this.parent.showSpinner();\n }\n if (arg.cancel === false) {\n _this.taskBarEditingAction(event, false);\n }\n });\n }\n else if (!this.parent.isAdaptive && !this.taskBarEditAction) {\n this.updateTaskBarEditElement(event);\n }\n };\n /**\n * Method to update taskbar editing action on mous move.\n *\n * @param {PointerEvent} e .\n * @param {boolean} isMouseClick .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.taskBarEditingAction = function (e, isMouseClick) {\n var _this = this;\n var args = {};\n var recordIndex = this.parent.ganttChartModule.getIndexByTaskBar(this.taskBarEditElement);\n if (this.taskBarEditRecord !== null) {\n args.editingFields = this.taskBarEditRecord.ganttProperties;\n args.data = this.taskBarEditRecord;\n if (this.parent.viewType === 'ResourceView' && args.data.level === 0) {\n return;\n }\n args.recordIndex = recordIndex;\n args.taskBarEditAction = this.taskBarEditAction;\n args.roundOffDuration = this.roundOffDuration;\n args.cancel = false;\n args.previousData = this.previousItem;\n args.segmentIndex = this.segmentIndex;\n this.roundOffDuration = args.roundOffDuration;\n this.targetElement = args.target = closest(e.target, '.e-gantt-child-taskbar');\n this.updateMouseMoveProperties(e);\n if (this.taskBarEditAction === 'ProgressResizing') {\n this.performProgressResize(e);\n }\n else if (this.taskBarEditAction === 'LeftResizing') {\n this.enableLeftResizing(e);\n }\n else if (this.taskBarEditAction === 'RightResizing' || this.taskBarEditAction === 'ParentResizing') {\n this.enableRightResizing(e);\n }\n else if (this.taskBarEditAction === 'ParentDrag' || this.taskBarEditAction === 'ChildDrag' ||\n this.taskBarEditAction === 'MilestoneDrag' || this.taskBarEditAction === 'ManualParentDrag') {\n this.enableDragging(e);\n }\n else if (this.taskBarEditAction === 'ConnectorPointLeftDrag' ||\n this.taskBarEditAction === 'ConnectorPointRightDrag') {\n this.updateConnectorLineSecondProperties(e);\n this.triggerDependencyEvent(e);\n if (!this.parent.isAdaptive) {\n this.drawFalseLine();\n }\n }\n if (this.parent.viewType == 'ResourceView' && this.parent.allowTaskbarDragAndDrop) {\n if (this.dragMoveY > this.mouseMoveY) {\n this.mouseMoveY = this.dragMoveY - this.mouseMoveY;\n this.currentItemTop = this.currentItemTop - this.mouseMoveY;\n }\n else {\n this.mouseMoveY -= this.dragMoveY;\n this.currentItemTop = this.currentItemTop + this.mouseMoveY;\n }\n var containerPosition = this.parent.getOffsetRect(this.parent.ganttChartModule.chartBodyContainer);\n this.dragMoveY = e.pageY - containerPosition.top + this.parent.ganttChartModule.scrollObject.previousScroll.top;\n this.topValue = this.currentItemTop;\n this.currentItemPrevTop = (this.currentItemPrevTop === 0 ||\n this.topValue == this.currentItemTop) ? this.topValue :\n this.currentItemPrevTop;\n }\n this.setItemPosition();\n this.updateEditedItem();\n this.editTooltip.updateTooltip(this.segmentIndex);\n if (isMouseClick) {\n this.taskBarEditedAction(e);\n }\n this.parent.trigger('taskbarEditing', args, function (arg) {\n if (arg.cancel && _this.taskBarEditRecord !== null) {\n _this.tapPointOnFocus = false;\n merge(_this.taskBarEditRecord.ganttProperties, arg.previousData);\n }\n });\n }\n };\n /**\n * To update property while perform mouse move.\n *\n * @param {PointerEvent} event .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.updateMouseMoveProperties = function (event) {\n var containerPosition = this.parent.getOffsetRect(this.parent.ganttChartModule.chartBodyContainer);\n var e = this.getCoordinate(event);\n var parentWithZoomStyle = this.parent.element.closest('[style*=\"zoom\"]');\n if (parentWithZoomStyle) {\n var zoom1 = parseFloat(getComputedStyle(parentWithZoomStyle).zoom);\n e.pageX = e.pageX / zoom1;\n e.pageY = e.pageY / zoom1;\n }\n if (e.pageX || e.pageY) {\n if (this.parent.enableRtl) {\n this.mouseMoveX = Math.abs(e.pageX - (containerPosition.left +\n Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left)));\n }\n else {\n this.mouseMoveX = e.pageX - containerPosition.left +\n this.parent.ganttChartModule.scrollObject.previousScroll.left;\n }\n this.tooltipPositionX = this.mouseMoveX;\n this.mouseMoveY = e.pageY - containerPosition.top +\n this.parent.ganttChartModule.scrollObject.previousScroll.top;\n }\n var isConnectorLineEdit = (this.taskBarEditAction === 'ConnectorPointLeftDrag' ||\n this.taskBarEditAction === 'ConnectorPointRightDrag') ?\n true : false;\n if ((this.taskBarEditRecord.ganttProperties.width > 3 && !(this.taskBarEditAction === 'ProgressResizing' &&\n (this.taskBarEditRecord.ganttProperties.progress === 0 || this.taskBarEditRecord.ganttProperties.progress === 100))) ||\n isConnectorLineEdit) {\n var mouseX = 0;\n if (this.parent.enableRtl) {\n mouseX = Math.abs(Math.abs(this.mouseMoveX) - Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left) +\n containerPosition.left);\n }\n else {\n mouseX = this.mouseMoveX - this.parent.ganttChartModule.scrollObject.previousScroll.left +\n containerPosition.left;\n }\n var mouseY = this.mouseMoveY - this.parent.ganttChartModule.scrollObject.previousScroll.top +\n containerPosition.top;\n if ((mouseX + 20) >\n containerPosition.left + this.parent.ganttChartModule.chartBodyContainer.offsetWidth) {\n this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.left;\n this.startScrollTimer('right');\n }\n else if ((mouseX + 40) >\n containerPosition.left + this.parent.ganttChartModule.chartBodyContainer.offsetWidth && this.parent.enableRtl && this.parent.ganttChartModule.scrollObject.previousScroll.left == 0) {\n this.parent.ganttChartModule.scrollObject.previousScroll.left = -1;\n this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.left;\n this.startScrollTimer('right');\n }\n else if ((mouseX - 20) < containerPosition.left) {\n this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.left;\n this.startScrollTimer('left');\n }\n else if (((mouseY + 80) >\n containerPosition.top + this.parent.ganttChartModule.chartBodyContainer.offsetHeight)) {\n this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.top;\n this.startScrollTimer('bottom');\n }\n else if (((mouseY - 20) < containerPosition.top)) {\n this.timerCount = this.parent.ganttChartModule.scrollObject.previousScroll.top;\n this.startScrollTimer('top');\n }\n else {\n this.stopScrollTimer();\n }\n }\n else {\n this.stopScrollTimer();\n }\n };\n /**\n * To start the scroll timer.\n *\n * @param {string} direction .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.startScrollTimer = function (direction) {\n var _this = this;\n this.stopScrollTimer();\n var leftSign = 0;\n this.scrollTimer = window.setInterval(function () {\n if (Math.sign(_this.timerCount) == -1) {\n leftSign = -1;\n _this.timerCount = Math.abs(_this.timerCount);\n }\n if (direction === 'right') {\n _this.timerCount = (_this.timerCount + 1) >= _this.parent.timelineModule.totalTimelineWidth ?\n _this.parent.timelineModule.totalTimelineWidth : (_this.timerCount + 1);\n }\n else if (direction === 'bottom') {\n _this.timerCount = _this.timerCount + 1;\n }\n else {\n _this.timerCount = (_this.timerCount - 1) < 0 ? 0 : (_this.timerCount - 1);\n }\n if (direction === 'bottom' || direction === 'top') {\n _this.parent.ganttChartModule.scrollObject.setScrollTop(_this.timerCount);\n }\n else {\n _this.parent.ganttChartModule.scrollObject.setScrollLeft(_this.timerCount, leftSign);\n }\n if (_this.taskBarEditAction === 'ConnectorPointLeftDrag'\n || _this.taskBarEditAction === 'ConnectorPointRightDrag') {\n _this.drawFalseLine();\n }\n }, 0);\n };\n /**\n * To stop the scroll timer.\n *\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.stopScrollTimer = function () {\n window.clearInterval(this.scrollTimer);\n this.scrollTimer = null;\n };\n /**\n * To update left and width while perform taskbar drag operation.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n TaskbarEdit.prototype.enableDragging = function (e) {\n var item = this.taskBarEditRecord.ganttProperties;\n var differenceWidth = 0;\n if (this.taskBarEditElement.classList.contains('e-segmented-taskbar') &&\n !this.taskBarEditElement.classList.contains('e-segment-first')) {\n var segments = this.taskBarEditRecord.ganttProperties.segments.map(function (e) { return (__assign({}, e)); });\n var segment = segments[this.segmentIndex];\n if (this.mouseDownX > this.mouseMoveX) {\n differenceWidth = isNullOrUndefined(this.previousMouseMove) ?\n (this.mouseDownX - this.mouseMoveX) : (this.previousMouseMove - this.mouseMoveX);\n this.previousMouseMove = this.mouseMoveX;\n segment.left = segment.left - differenceWidth;\n }\n else {\n differenceWidth = isNullOrUndefined(this.previousMouseMove) ?\n (this.mouseMoveX - this.mouseDownX) : (this.mouseMoveX - this.previousMouseMove);\n this.previousMouseMove = this.mouseMoveX;\n segment.left = segment.left + differenceWidth;\n }\n var previousSegment = segments[this.segmentIndex - 1];\n var nextSegment = segments[this.segmentIndex + 1];\n var left = void 0;\n if (this.taskBarEditElement.classList.contains('e-segment-inprogress')) {\n left = segment.left < (previousSegment.left + previousSegment.width) ? (previousSegment.left + previousSegment.width) :\n ((segment.width + segment.left) > (nextSegment.left)) ? nextSegment.left - segment.width : segment.left;\n }\n else {\n left = segment.left < (previousSegment.left + previousSegment.width) ? (previousSegment.left + previousSegment.width) :\n (item.left + segment.width + segment.left) >= this.parent.timelineModule.totalTimelineWidth ?\n (this.parent.timelineModule.totalTimelineWidth - segment.width) : segment.left;\n }\n segment.left = left;\n this.parent.setRecordValue('segments', segments, item, true);\n this.parent.dataOperation.updateMappingData(this.taskBarEditRecord, 'segments');\n }\n else {\n if (this.mouseDownX > this.mouseMoveX) {\n differenceWidth = this.mouseDownX - this.mouseMoveX;\n if (differenceWidth > 0) {\n this.parent.setRecordValue('left', this.previousItem.left - differenceWidth, item, true);\n }\n }\n else {\n differenceWidth = this.mouseMoveX - this.mouseDownX;\n this.parent.setRecordValue('left', this.previousItem.left + differenceWidth, item, true);\n }\n var left = item.left < 0 ? 0 : (item.left + item.width) >= this.parent.timelineModule.totalTimelineWidth ?\n (this.parent.timelineModule.totalTimelineWidth - item.width) : item.left;\n this.parent.setRecordValue('left', left, item, true);\n }\n };\n /**\n * To update left and width while perform progress resize operation.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n TaskbarEdit.prototype.performProgressResize = function (e) {\n var item = this.taskBarEditRecord.ganttProperties;\n var diffrenceWidth = 0;\n if (this.mouseDownX > this.mouseMoveX) {\n if (this.mouseMoveX > item.left &&\n (this.mouseMoveX < (item.left + item.width)) && item.left > 0) {\n diffrenceWidth = this.mouseMoveX - item.left;\n this.parent.setRecordValue('progressWidth', diffrenceWidth, item, true);\n }\n else {\n if (this.mouseMoveX >= (item.left + item.width)) {\n this.parent.setRecordValue('progressWidth', item.width, item, true);\n }\n else {\n this.parent.setRecordValue('progressWidth', 0, item, true);\n }\n }\n }\n else {\n if (this.mouseMoveX > item.left &&\n (this.mouseMoveX < (item.left + item.width))) {\n diffrenceWidth = this.mouseMoveX - item.left;\n this.parent.setRecordValue('progressWidth', diffrenceWidth, item, true);\n }\n else {\n if (this.mouseMoveX <= item.left) {\n this.parent.setRecordValue('progressWidth', 0, item, true);\n }\n else {\n this.parent.setRecordValue('progressWidth', item.width, item, true);\n }\n }\n }\n var widthValue = item.progressWidth > item.width ?\n item.width : item.progressWidth;\n widthValue = item.progressWidth < 0 ? 0 : item.progressWidth;\n this.parent.setRecordValue('progressWidth', widthValue, item, true);\n var diff = item.width - item.progressWidth;\n if (diff <= 4) {\n this.progressBorderRadius = 4 - diff;\n }\n else {\n this.progressBorderRadius = 0;\n }\n };\n /**\n * To update left and width while perform taskbar left resize operation.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.enableLeftResizing = function (e) {\n var item = this.taskBarEditRecord.ganttProperties;\n var differenceWidth = 0;\n if (this.taskBarEditElement.classList.contains('e-segmented-taskbar')) {\n this.enableSplitTaskLeftResize(item);\n }\n else {\n if (this.mouseDownX > this.mouseMoveX) {\n if (this.mouseMoveX < (item.left + item.width)) {\n differenceWidth = this.mouseDownX - this.mouseMoveX;\n if (item.left > 0) {\n this.parent.setRecordValue('left', this.previousItem.left - differenceWidth, item, true);\n this.parent.setRecordValue('width', this.previousItem.width + differenceWidth, item, true);\n }\n }\n else {\n if (this.mouseMoveX > (item.left + item.width)) {\n differenceWidth = this.mouseDownX - this.mouseMoveX;\n this.parent.setRecordValue('left', this.previousItem.left - differenceWidth, item, true);\n this.parent.setRecordValue('width', 3, item, true);\n }\n }\n }\n else {\n if (this.mouseMoveX < (item.left + item.width)) {\n differenceWidth = this.mouseMoveX - this.mouseDownX;\n if ((item.left) < (item.left + item.width) &&\n ((this.previousItem.left + differenceWidth) <= (this.previousItem.left + this.previousItem.width))) {\n this.parent.setRecordValue('left', this.previousItem.left + differenceWidth, item, true);\n this.parent.setRecordValue('width', this.previousItem.width - differenceWidth, item, true);\n }\n }\n else {\n differenceWidth = this.mouseMoveX - this.mouseDownX;\n this.parent.setRecordValue('left', this.previousItem.left + differenceWidth, item, true);\n this.parent.setRecordValue('width', 3, item, true);\n }\n }\n this.updateEditPosition(e, item);\n this.parent.setRecordValue('left', (this.previousItem.left + this.previousItem.width - item.width), item, true);\n }\n };\n TaskbarEdit.prototype.enableSplitTaskLeftResize = function (item) {\n var segments = this.taskBarEditRecord.ganttProperties.segments.map(function (e) { return (__assign({}, e)); });\n var segment = segments[this.segmentIndex];\n var differenceWidth = 0;\n //when decrease the left and increase the width\n if (this.mouseDownX > this.mouseMoveX) {\n if (this.mouseMoveX < (item.left + segment.width + segment.left)) {\n differenceWidth = isNullOrUndefined(this.previousMouseMove) ?\n (this.mouseDownX - this.mouseMoveX) : (this.previousMouseMove - this.mouseMoveX);\n this.previousMouseMove = this.mouseMoveX;\n // when resize other than 0th segment\n if (segment.left > 0) {\n segment.left = segment.left - differenceWidth;\n segment.width = segment.width + differenceWidth;\n if (this.segmentIndex !== 0) {\n var previousSegment = segments[this.segmentIndex - 1];\n if ((item.left + segment.left) < (item.left + previousSegment.left + previousSegment.width)) {\n var difference = (item.left + previousSegment.left + previousSegment.width) - (item.left + segment.left);\n segment.width -= difference;\n segment.left = segment.left + difference;\n }\n }\n }\n else if (segment.left <= 0 && this.segmentIndex === 0) {\n this.parent.setRecordValue('left', item.left - differenceWidth, item, true);\n this.parent.setRecordValue('width', item.width + differenceWidth, item, true);\n segment.width = segment.width + differenceWidth;\n for (var i = 1; i < item.segments.length; i++) {\n var segment_1 = segments[i];\n segment_1.left = segment_1.left + differenceWidth;\n }\n }\n }\n else {\n if (this.mouseMoveX > (item.left + segment.width + segment.left)) {\n differenceWidth = isNullOrUndefined(this.previousMouseMove) ?\n (this.mouseDownX - this.mouseMoveX) : (this.previousMouseMove - this.mouseMoveX);\n this.previousMouseMove = this.mouseMoveX;\n segment.left = segment.left - differenceWidth;\n segment.width = this.parent.perDayWidth;\n }\n }\n }\n else {\n // when increase left value and decrease width of segment\n if (this.mouseMoveX < (item.left + segment.width + segment.left - this.parent.perDayWidth)) {\n differenceWidth = isNullOrUndefined(this.previousMouseMove) ?\n (this.mouseMoveX - this.mouseDownX) : (this.mouseMoveX - this.previousMouseMove);\n this.previousMouseMove = this.mouseMoveX;\n // when decrease the first segment width\n if (this.segmentIndex === 0 && segment.left <= 0) {\n this.parent.setRecordValue('left', item.left + differenceWidth, item, true);\n this.parent.setRecordValue('width', item.width - differenceWidth, item, true);\n segment.width = segment.width - differenceWidth;\n for (var i = 1; i < item.segments.length; i++) {\n var segment_2 = segments[i];\n segment_2.left = segment_2.left - differenceWidth;\n }\n // when decrease remaining segments\n }\n else if ((segment.left) < (segment.left + segment.width) &&\n ((segment.left + differenceWidth) <= (segment.left + segment.width))) {\n segment.left = segment.left + differenceWidth;\n segment.width = segment.width - differenceWidth;\n }\n // when mouse move goes beyond one day width of task bar.\n }\n else {\n if (this.mouseMoveX < (item.left + segment.left + segment.width)) {\n if (segment.width > this.parent.perDayWidth) {\n differenceWidth = isNullOrUndefined(this.previousMouseMove) ?\n (this.mouseMoveX - this.mouseDownX) : (this.mouseMoveX - this.previousMouseMove);\n this.previousMouseMove = this.mouseMoveX;\n var singleDayDifference = (segment.width - differenceWidth) < this.parent.perDayWidth ?\n this.parent.perDayWidth > segment.width ?\n this.parent.perDayWidth - segment.width : segment.width - this.parent.perDayWidth : 0;\n differenceWidth -= singleDayDifference;\n if (this.segmentIndex === 0) {\n this.parent.setRecordValue('width', item.width - differenceWidth, item, true);\n this.parent.setRecordValue('left', item.left + differenceWidth, item, true);\n for (var i = 1; i < item.segments.length; i++) {\n var segment_3 = segments[i];\n segment_3.left = segment_3.left - differenceWidth;\n }\n }\n else {\n segment.left = segment.left + differenceWidth;\n segment.width = segment.width - differenceWidth;\n }\n }\n }\n }\n }\n this.parent.setRecordValue('segments', segments, item, true);\n this.parent.dataOperation.updateMappingData(this.taskBarEditRecord, 'segments');\n };\n /**\n * Update mouse position and edited item value\n *\n * @param {PointerEvent} e .\n * @param {ITaskData} item .\n * @returns {void} .\n */\n TaskbarEdit.prototype.updateEditPosition = function (e, item) {\n this.updateIsMilestone(item);\n this.parent.setRecordValue('progressWidth', this.parent.dataOperation.getProgressWidth(item.width, item.progress), item, true);\n };\n /**\n * To update milestone property.\n *\n * @param {ITaskData} item .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.updateIsMilestone = function (item) {\n if (item.width <= 3) {\n this.parent.setRecordValue('width', 3, item, true);\n this.parent.setRecordValue('isMilestone', true, item, true);\n }\n else {\n this.parent.setRecordValue('width', item.width, item, true);\n this.parent.setRecordValue('isMilestone', false, item, true);\n }\n };\n /**\n * To update left and width while perform taskbar right resize operation.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.enableRightResizing = function (e) {\n var item = this.taskBarEditRecord.ganttProperties;\n var differenceWidth = 0;\n if (this.taskBarEditElement.classList.contains('e-segmented-taskbar')) {\n var segments = this.taskBarEditRecord.ganttProperties.segments.map(function (e) { return (__assign({}, e)); });\n var segment = segments[this.segmentIndex];\n if (this.mouseDownX > this.mouseMoveX) {\n if (this.mouseMoveX > (item.left + segment.left) && (this.mouseDownX - this.mouseMoveX) > 3) {\n differenceWidth = isNullOrUndefined(this.previousMouseMove) ?\n (this.mouseDownX - this.mouseMoveX) : (this.previousMouseMove - this.mouseMoveX);\n this.previousMouseMove = this.mouseMoveX;\n segment.width = segment.width - differenceWidth;\n }\n else {\n if (this.mouseMoveX < (item.left + segment.left)) {\n var segmentWidth = (this.parent.timelineModule.isSingleTier &&\n (this.parent.timelineModule.customTimelineSettings.bottomTier.unit === \"Hour\" ||\n this.parent.timelineModule.customTimelineSettings.topTier.unit === \"Hour\" ||\n this.parent.timelineModule.customTimelineSettings.bottomTier.unit === \"Minutes\" ||\n this.parent.timelineModule.customTimelineSettings.topTier.unit === \"Minutes\")) ||\n (this.parent.timelineModule.customTimelineSettings.bottomTier.unit === \"Hour\" ||\n this.parent.timelineModule.customTimelineSettings.bottomTier.unit === \"Minutes\") ?\n this.parent.timelineModule.customTimelineSettings.timelineUnitSize :\n this.parent.perDayWidth;\n segment.width = segmentWidth;\n }\n }\n }\n else {\n if (this.mouseMoveX > segment.left) {\n differenceWidth = isNullOrUndefined(this.previousMouseMove) ?\n (this.mouseMoveX - this.mouseDownX) : (this.mouseMoveX - this.previousMouseMove);\n this.previousMouseMove = this.mouseMoveX;\n segment.width = segment.width + differenceWidth;\n }\n }\n var width = void 0;\n var nextSegment = this.segmentIndex !== segments.length - 1 ? segments[this.segmentIndex + 1] : null;\n if (!isNullOrUndefined(nextSegment)) {\n if (!this.taskBarEditElement.classList.contains('e-segment-last')) {\n width = (segment.left + segment.width) > nextSegment.left ? (nextSegment.left - segment.left) : segment.width;\n }\n segment.width = width;\n }\n if (this.segmentIndex === item.segments.length - 1) {\n if (this.segmentIndex === 0) {\n this.parent.setRecordValue('width', segment.width, item, true);\n }\n }\n this.parent.setRecordValue('segments', segments, item, true);\n this.parent.dataOperation.updateMappingData(this.taskBarEditRecord, 'segments');\n }\n else {\n if (this.mouseDownX > this.mouseMoveX) {\n if (this.mouseMoveX > item.left && (this.mouseDownX - this.mouseMoveX) > 3) {\n differenceWidth = this.mouseDownX - this.mouseMoveX;\n this.parent.setRecordValue('width', this.previousItem.width - differenceWidth, item, true);\n }\n else {\n if (this.mouseMoveX < item.left) {\n this.parent.setRecordValue('width', 3, item, true);\n }\n }\n }\n else {\n if (this.mouseMoveX > item.left) {\n differenceWidth = this.mouseMoveX - this.mouseDownX;\n this.parent.setRecordValue('width', this.previousItem.width + differenceWidth, item, true);\n }\n }\n this.updateEditPosition(e, item);\n }\n };\n /**\n * To updated startDate and endDate while perform taskbar edit operation.\n *\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.updateEditedItem = function () {\n var item = this.taskBarEditRecord.ganttProperties;\n var left;\n var projectStartDate;\n var endDate;\n var startDate;\n switch (this.taskBarEditAction) {\n case 'ProgressResizing':\n this.parent.setRecordValue('progress', this.getProgressPercent(item.width, item.progressWidth), item, true);\n break;\n case 'LeftResizing':\n if (this.segmentIndex === -1) {\n left = this.getRoundOffStartLeft(item, this.roundOffDuration);\n projectStartDate = this.getDateByLeft(left);\n if (isNullOrUndefined(item.endDate)) {\n endDate = this.parent.dateValidationModule.getValidEndDate(item);\n this.parent.setRecordValue('endDate', endDate, item, true);\n }\n startDate = this.parent.dateValidationModule.checkStartDate(projectStartDate, item, null);\n this.parent.setRecordValue('startDate', new Date(startDate.getTime()), item, true);\n if (this.parent.dateValidationModule.compareDates(item.startDate, item.endDate) === 0\n && isNullOrUndefined(item.isMilestone) && item.isMilestone === false && item.duration === 0) {\n this.parent.setRecordValue('duration', 1, item, true);\n }\n if (item.isMilestone) {\n this.parent.setRecordValue('endDate', new Date(startDate.getTime()), item, true);\n }\n this.parent.dateValidationModule.calculateDuration(this.taskBarEditRecord);\n this.parent.editModule.updateResourceRelatedFields(this.taskBarEditRecord, 'duration');\n }\n else {\n this.updateSplitLeftResize(item);\n }\n break;\n case 'RightResizing':\n case 'ParentResizing':\n if (this.segmentIndex === -1) {\n left = this.getRoundOffEndLeft(item, this.roundOffDuration);\n var tempEndDate = this.getDateByLeft(left);\n if (isNullOrUndefined(item.startDate)) {\n startDate = this.parent.dateValidationModule.getValidStartDate(item);\n this.parent.setRecordValue('startDate', startDate, item, true);\n }\n var tempdate = isNullOrUndefined(item.startDate) ? startDate : item.startDate;\n endDate = item.isMilestone ? tempdate :\n this.parent.dateValidationModule.checkEndDate(tempEndDate, this.taskBarEditRecord.ganttProperties);\n this.parent.setRecordValue('endDate', new Date(endDate.getTime()), item, true);\n this.parent.dateValidationModule.calculateDuration(this.taskBarEditRecord);\n this.parent.editModule.updateResourceRelatedFields(this.taskBarEditRecord, 'duration');\n }\n else {\n this.updateSplitRightResizing(item);\n }\n break;\n case 'ParentDrag':\n case 'ChildDrag':\n case 'MilestoneDrag':\n case 'ManualParentDrag':\n if (this.segmentIndex === -1 || this.segmentIndex === 0) {\n this.updateChildDrag(item);\n }\n else {\n this.setSplitTaskDrag(item);\n }\n break;\n }\n };\n TaskbarEdit.prototype.updateChildDrag = function (item) {\n var left = this.getRoundOffStartLeft(item, this.roundOffDuration);\n var projectStartDate = this.getDateByLeft(left, item.isMilestone, item);\n var endDate;\n if (this.segmentIndex === 0) {\n this.parent.setRecordValue('startDate', this.parent.dateValidationModule.checkStartDate(projectStartDate, item, null), item, true);\n item.segments[0].startDate = projectStartDate;\n item.segments[0].endDate = this.parent.dataOperation.getEndDate(item.segments[0].startDate, item.segments[0].duration, item.durationUnit, item, false);\n this.parent.setRecordValue('segments', item.segments, item, true);\n this.parent.dataOperation.updateMappingData(this.taskBarEditRecord, 'segments');\n this.parent.chartRowsModule.incrementSegments(item.segments, 0, this.taskBarEditRecord);\n this.parent.setRecordValue('endDate', item.segments[item.segments.length - 1].endDate, item, true);\n }\n else {\n if (!isNullOrUndefined(item.endDate) && isNullOrUndefined(item.startDate)) {\n endDate = this.parent.dateValidationModule.checkStartDate(projectStartDate, item, null);\n endDate = this.parent.dateValidationModule.checkEndDate(endDate, this.taskBarEditRecord.ganttProperties);\n this.parent.setRecordValue('endDate', endDate, item, true);\n }\n else {\n this.parent.setRecordValue('startDate', this.parent.dateValidationModule.checkStartDate(projectStartDate, item, null), item, true);\n if (!isNullOrUndefined(item.duration)) {\n this.parent.dateValidationModule.calculateEndDate(this.taskBarEditRecord);\n }\n }\n }\n };\n TaskbarEdit.prototype.updateSplitLeftResize = function (item) {\n var segment = item.segments[this.segmentIndex];\n var left = this.segmentIndex === 0 ? this.getRoundOffStartLeft(item, this.roundOffDuration) :\n this.getRoundOffStartLeft(segment, this.roundOffDuration);\n var projectStartDate = this.segmentIndex === 0 ? this.getDateByLeft(left) : this.getDateByLeft(item.left + left);\n var startDate = this.parent.dataOperation.checkStartDate(projectStartDate, item, false);\n var duration = this.parent.dataOperation.getDuration(startDate, segment.endDate, item.durationUnit, item.isAutoSchedule, item.isMilestone);\n segment.startDate = new Date(startDate.getTime());\n segment.duration = duration;\n this.parent.setRecordValue('duration', this.sumOfDuration(item.segments), item, true);\n if (this.segmentIndex === 0) {\n this.parent.setRecordValue('startDate', segment.startDate, item, true);\n }\n this.parent.editModule.updateResourceRelatedFields(this.taskBarEditRecord, 'duration');\n if (!isNullOrUndefined(item.segments[this.segmentIndex - 1])) {\n var segmentOffsetDuration = this.parent.dataOperation.getDuration(item.segments[this.segmentIndex - 1].endDate, item.segments[this.segmentIndex].startDate, item.durationUnit, item.isAutoSchedule, item.isMilestone);\n segment.offsetDuration = segmentOffsetDuration;\n }\n this.parent.setRecordValue('segments', item.segments, item, true);\n this.parent.dataOperation.updateMappingData(this.taskBarEditRecord, 'segments');\n };\n TaskbarEdit.prototype.updateSplitRightResizing = function (item) {\n var segment = item.segments[this.segmentIndex];\n var left = this.getRoundOffEndLeft(item, this.roundOffDuration);\n var tempEndDate = this.getDateByLeft(left);\n var endDate = this.parent.dataOperation.checkEndDate(tempEndDate, item, false);\n var duration = this.parent.dataOperation.getDuration(segment.startDate, endDate, item.durationUnit, item.isAutoSchedule, item.isMilestone);\n segment.endDate = new Date(endDate.getTime());\n segment.duration = duration;\n // update next segment offset duration\n if (!isNullOrUndefined(item.segments[this.segmentIndex + 1])) {\n var nextSegment = item.segments[this.segmentIndex + 1];\n var segmentOffset = this.parent.dataOperation.getDuration(item.segments[this.segmentIndex].endDate, nextSegment.startDate, item.durationUnit, item.isAutoSchedule, item.isMilestone);\n segment.offsetDuration = segmentOffset;\n }\n this.parent.setRecordValue('segments', item.segments, item, true);\n this.parent.dataOperation.updateMappingData(this.taskBarEditRecord, 'segments');\n this.parent.setRecordValue('duration', this.sumOfDuration(item.segments), item, true);\n this.parent.setRecordValue('endDate', item.segments[item.segments.length - 1].endDate, item, true);\n this.parent.editModule.updateResourceRelatedFields(this.taskBarEditRecord, 'duration');\n };\n TaskbarEdit.prototype.sumOfDuration = function (segments) {\n var duration = 0;\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n duration += segment.duration;\n }\n return duration;\n };\n TaskbarEdit.prototype.setSplitTaskDrag = function (item) {\n var segment = item.segments[this.segmentIndex];\n var left = this.getRoundOffStartLeft(segment, this.roundOffDuration);\n var projectStartDate = this.getDateByLeft(item.left + left);\n projectStartDate = this.parent.dateValidationModule.checkStartDate(projectStartDate, item, null);\n segment.startDate = projectStartDate;\n segment.endDate = this.parent.dataOperation.getEndDate(segment.startDate, segment.duration, item.durationUnit, item, false);\n segment.duration = this.parent.dataOperation.getDuration(segment.startDate, segment.endDate, item.durationUnit, item.isAutoSchedule, item.isMilestone);\n this.parent.setRecordValue('duration', this.sumOfDuration(item.segments), item, true);\n this.parent.setRecordValue('endDate', item.segments[item.segments.length - 1].endDate, item, true);\n if (!isNullOrUndefined(this.parent.taskFields.endDate)) {\n this.parent.dataOperation.updateMappingData(this.taskBarEditRecord, 'endDate');\n }\n //set offset if previous record present\n if (!isNullOrUndefined(item.segments[this.segmentIndex - 1])) {\n var offsetDuration = this.parent.dataOperation.getDuration(item.segments[this.segmentIndex - 1].endDate, item.segments[this.segmentIndex].startDate, item.durationUnit, item.isAutoSchedule, item.isMilestone);\n if (segment.startDate.getDay() === 1 && offsetDuration === 0 && !this.parent.includeWeekend) {\n offsetDuration = 1;\n }\n segment.offsetDuration = offsetDuration;\n }\n //set next record offset if present\n if (!isNullOrUndefined(item.segments[this.segmentIndex + 1])) {\n var nextSegment = item.segments[this.segmentIndex + 1];\n var offsetDuration = this.parent.dataOperation.getDuration(item.segments[this.segmentIndex].endDate, nextSegment.startDate, item.durationUnit, item.isAutoSchedule, item.isMilestone);\n if (nextSegment.startDate.getDay() === 1 && offsetDuration === 0 && !this.parent.includeWeekend) {\n offsetDuration = 1;\n }\n nextSegment.offsetDuration = offsetDuration;\n }\n this.parent.setRecordValue('segments', item.segments, item, true);\n this.parent.dataOperation.updateMappingData(this.taskBarEditRecord, 'segments');\n };\n /**\n * To get roundoff enddate.\n *\n * @param {ITaskData} ganttRecord .\n * @param {boolean} isRoundOff .\n * @returns {number} .\n * @private\n */\n TaskbarEdit.prototype.getRoundOffEndLeft = function (ganttRecord, isRoundOff) {\n var tierMode = this.parent.timelineModule.bottomTier !== 'None' ? this.parent.timelineModule.bottomTier :\n this.parent.timelineModule.topTier;\n var totalLeft = ganttRecord.width + ganttRecord.left;\n if (this.segmentIndex !== -1) {\n var segment = ganttRecord.segments[this.segmentIndex];\n totalLeft = totalLeft - ganttRecord.width + segment.width + segment.left;\n }\n var remainingContribution = (1 / (this.parent.timelineModule.getIncrement(this.getDateByLeft(totalLeft), 1, 'Day') / (1000 * 60 * 60 * 24)));\n var remainingLeft = this.parent.perDayWidth - (this.parent.perDayWidth / remainingContribution);\n var positionValue = remainingLeft / this.parent.perDayWidth;\n if (isRoundOff === undefined) {\n isRoundOff = false;\n }\n /*Rounding the decimal value for week-month-year schedule mode*/\n if (!isRoundOff) {\n if ((tierMode !== 'Hour' && tierMode !== 'Minutes')) {\n if (positionValue > 0.5) {\n totalLeft = totalLeft - remainingLeft + this.parent.perDayWidth;\n }\n else if (positionValue < 0.5) {\n totalLeft = (totalLeft - remainingLeft) + (this.parent.perDayWidth / 2);\n }\n }\n }\n else if (isRoundOff) {\n if (tierMode === 'Hour') {\n var inHour = (this.parent.perDayWidth / 24);\n remainingContribution =\n (1 / (this.parent.timelineModule.getIncrement(this.getDateByLeft(totalLeft), 1, 'Hour') / (1000 * 60 * 60)));\n remainingLeft = (this.parent.perDayWidth / 24) - ((this.parent.perDayWidth / 24) / remainingContribution);\n if (remainingLeft !== 0) {\n totalLeft = (totalLeft - remainingLeft) + inHour;\n }\n }\n else if (tierMode === 'Minutes') {\n var inMinutes = (this.parent.perDayWidth / (24 * 60));\n remainingContribution =\n (1 / (this.parent.timelineModule.getIncrement(this.getDateByLeft(totalLeft), 1, 'Minutes') / (1000 * 60)));\n remainingLeft = (this.parent.perDayWidth / (24 * 60)) - ((this.parent.perDayWidth / (24 * 60)) / remainingContribution);\n if (remainingLeft !== 0) {\n totalLeft = (totalLeft - remainingLeft) + inMinutes;\n }\n }\n else {\n if (remainingLeft !== 0) {\n totalLeft = (totalLeft - remainingLeft) + this.parent.perDayWidth;\n }\n }\n }\n return totalLeft;\n };\n /**\n * To get roundoff startdate.\n *\n * @param {ITaskData | ITaskSegment} ganttRecord .\n * @param {boolean} isRoundOff .\n * @returns {number} .\n * @private\n */\n TaskbarEdit.prototype.getRoundOffStartLeft = function (ganttRecord, isRoundOff) {\n var left = isNullOrUndefined(ganttRecord) ? ganttRecord.left\n : ganttRecord.left;\n var tierMode = this.parent.timelineModule.bottomTier !== 'None' ? this.parent.timelineModule.bottomTier :\n this.parent.timelineModule.topTier;\n var remainingContribution = (1 / (this.parent.timelineModule.getIncrement(this.getDateByLeft(left, isNullOrUndefined(ganttRecord) ? ganttRecord.isMilestone : null, ganttRecord), 1, 'Day') / (1000 * 60 * 60 * 24)));\n var remainDays = this.parent.perDayWidth - (this.parent.perDayWidth / remainingContribution);\n var remainDaysInDecimal = remainDays / this.parent.perDayWidth;\n if (isRoundOff === undefined) {\n isRoundOff = false;\n }\n /*Rounding the decimal value for week-month-year schedule mode*/\n if (!isRoundOff) {\n if ((tierMode !== 'Hour' && tierMode !== 'Minutes')) {\n if (remainDaysInDecimal <= 0.5) {\n left = left - remainDays;\n }\n else if (remainDaysInDecimal > 0.5) {\n left = (left - remainDays) + this.parent.perDayWidth / 2;\n }\n }\n }\n else if (isRoundOff) {\n if (tierMode === 'Hour') {\n remainingContribution =\n (1 / (this.parent.timelineModule.getIncrement(this.getDateByLeft(left), 1, 'Hour') / (1000 * 60 * 60)));\n remainDays = (this.parent.perDayWidth / 24) - ((this.parent.perDayWidth / 24) / remainingContribution);\n left = left - remainDays;\n }\n else if (tierMode === 'Minutes') {\n remainingContribution =\n (1 / (this.parent.timelineModule.getIncrement(this.getDateByLeft(left), 1, 'Minutes') / (1000 * 60)));\n remainDays = (this.parent.perDayWidth / (24 * 60)) - ((this.parent.perDayWidth / (24 * 60)) / remainingContribution);\n left = left - remainDays;\n }\n else {\n left = left - remainDays;\n }\n }\n return left;\n };\n /**\n * To get date by left value.\n *\n * @param {number} left .\n * @returns {Date} .\n * @private\n */\n TaskbarEdit.prototype.getDateByLeft = function (left, isMilestone, property) {\n var pStartDate = new Date(this.parent.timelineModule.timelineStartDate.toString());\n var milliSecondsPerPixel = (24 * 60 * 60 * 1000) / this.parent.perDayWidth;\n pStartDate.setTime(pStartDate.getTime() + (left * milliSecondsPerPixel));\n /* To render the milestone in proper date while editing */\n if (isMilestone && !isNullOrUndefined(property.predecessor) && property.predecessor.length > 0) {\n pStartDate.setDate(pStartDate.getDate() - 1);\n this.parent.dateValidationModule.setTime(this.parent.defaultEndTime, pStartDate);\n pStartDate = this.parent.dateValidationModule.checkStartDate(pStartDate, property, true);\n }\n var tierMode = this.parent.timelineModule.bottomTier !== 'None' ? this.parent.timelineModule.topTier :\n this.parent.timelineModule.bottomTier;\n if (tierMode !== 'Hour' && tierMode !== 'Minutes') {\n if (this.parent.isInDst(new Date(this.parent.timelineModule.timelineStartDate.toString())) && !this.parent.isInDst(pStartDate)) {\n pStartDate.setTime(pStartDate.getTime() + (60 * 60 * 1000));\n }\n else if (!this.parent.isInDst(new Date(this.parent.timelineModule.timelineStartDate.toString())) && this.parent.isInDst(pStartDate)) {\n pStartDate.setTime(pStartDate.getTime() - (60 * 60 * 1000));\n }\n }\n return pStartDate;\n };\n /**\n * To set item position.\n *\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.setItemPosition = function () {\n if (!isNullOrUndefined(this.editElement)) {\n var currentElement = this.editElement.parentElement;\n if (this.parent.viewType == 'ResourceView' && this.parent.allowTaskbarDragAndDrop && this.taskBarEditAction === 'ChildDrag') {\n currentElement.style.position = null;\n }\n else {\n currentElement.style.setProperty(\"position\", \"absolute\");\n }\n }\n var item = this.taskBarEditRecord.ganttProperties;\n var position = this.parent.enableRtl ? \"right\" : \"left\";\n var segment = !isNullOrUndefined(item.segments) ? item.segments[this.segmentIndex] : null;\n var width = this.taskBarEditAction === 'MilestoneDrag' || item.isMilestone ?\n this.parent.chartRowsModule.milestoneHeight : item.width;\n var rightResizer = this.parent.isAdaptive ? (width - 2) : (width - 10);\n if (!isNullOrUndefined(segment)) {\n rightResizer = this.parent.isAdaptive ? (segment.width - 2) : (segment.width - 10);\n }\n this.taskBarEditElement.style.setProperty(\"opacity\", '.75');\n var taskBarMainContainer = (!this.taskBarEditElement.classList.contains(cls.taskBarMainContainer)) ? ((this.taskBarEditAction === 'ChildDrag' || this.taskBarEditAction === 'LeftResizing') && this.segmentIndex === 0) ? this.taskBarEditElement.parentElement : closest(this.taskBarEditElement, 'tr.' + cls.chartRow)\n .querySelector('.' + cls.taskBarMainContainer) : this.taskBarEditElement;\n var segmentedTaskBarContainer = this.taskBarEditElement.classList.contains('e-segmented-taskbar');\n var traceChildProgressBar = this.taskBarEditElement.querySelector('.' + cls.traceChildProgressBar);\n var traceChildTaskBar = this.taskBarEditElement.querySelector('.' + cls.traceChildTaskBar);\n var childProgressResizer = this.taskBarEditElement.querySelector('.' + cls.childProgressResizer);\n var taskBarRightResizer = this.taskBarEditElement.querySelector('.' + cls.taskBarRightResizer);\n var traceParentTaskBar = this.taskBarEditElement.querySelector('.' + cls.traceParentTaskBar);\n var traceParentProgressBar = this.taskBarEditElement.querySelector('.' + cls.traceParentProgressBar);\n var traceConnectorPointRight = this.taskBarEditElement.querySelector('.' + cls.rightConnectorPointOuterDiv);\n var manualParentTaskbar = this.taskBarEditElement;\n var manualTaskbar = this.taskBarEditElement.querySelector('.' + cls.manualParentTaskBar);\n var manualParentRight = this.taskBarEditElement.querySelector('.' + cls.manualParentRightResizer);\n var manualParentLeft = this.taskBarEditElement.querySelector('.' + cls.manualParentLeftResizer);\n var resizeLine = this.parent.ganttChartModule.chartBodyContainer.querySelector('.e-taskbar-resize-div');\n if (this.taskBarEditAction !== 'ConnectorPointRightDrag' &&\n this.taskBarEditAction !== 'ConnectorPointLeftDrag') {\n if (this.taskBarEditAction !== 'ParentResizing' && this.taskBarEditAction !== 'ManualParentDrag') {\n if (segmentedTaskBarContainer && !isNullOrUndefined(item.segments)\n && (this.taskBarEditAction === 'RightResizing' || this.segmentIndex !== 0)) {\n if (!isNullOrUndefined(resizeLine)) {\n resizeLine.style.width = (segment.width) + \"px\";\n }\n this.taskBarEditElement.style.width = (segment.width) + 'px';\n if (this.parent.enableRtl) {\n this.taskBarEditElement.style.right = (segment.left) + 'px';\n }\n else {\n this.taskBarEditElement.style.left = (segment.left) + 'px';\n if (!isNullOrUndefined(resizeLine)) {\n resizeLine.style.left = (segment.left + this.editElement.parentElement.offsetLeft) + \"px\";\n }\n }\n }\n taskBarMainContainer.style.setProperty(position, (item.left) + 'px');\n taskBarMainContainer.style.width = (width) + 'px';\n if (this.parent.viewType === 'ResourceView' && this.parent.allowTaskbarDragAndDrop && this.parent.rowDragAndDropModule &&\n (this.taskBarEditAction === 'ChildDrag' || this.taskBarEditAction === 'MilestoneDrag')) {\n taskBarMainContainer.style.setProperty('top', (this.topValue) + 'px');\n taskBarMainContainer.style.zIndex = '4';\n }\n if (this.taskBarEditAction === 'LeftResizing' && this.segmentIndex === 0) {\n this.taskBarEditElement.style.setProperty(\"opacity\", '.75');\n var parent_1 = this.taskBarEditElement.parentElement;\n var segmentedTasks = parent_1.getElementsByClassName('e-segmented-taskbar');\n for (var i = 0; i < item.segments.length; i++) {\n var segment_4 = item.segments[i];\n var segmentElement = segmentedTasks[i];\n segmentElement.style.width = (segment_4.width) + 'px';\n if (i === 0) {\n resizeLine.style.width = (segment_4.width) + \"px\";\n resizeLine.style.left = (segment_4.left + item.left) + \"px\";\n }\n if (this.parent.enableRtl) {\n segmentElement.style.right = (segment_4.left) + 'px';\n }\n else {\n segmentElement.style.left = (segment_4.left) + 'px';\n }\n }\n }\n if (this.taskBarEditAction === 'ChildDrag' && this.segmentIndex === 0) {\n resizeLine.style.width = (width) + \"px\";\n resizeLine.style.left = (item.left) + \"px\";\n taskBarMainContainer.style.setProperty(\"opacity\", '.75');\n }\n }\n if (traceConnectorPointRight) {\n if (this.parent.enableRtl) {\n traceConnectorPointRight.style.left = (this.parent.isAdaptive ? (width + 10) : (width - 2)) + 'px';\n }\n else {\n traceConnectorPointRight.style.left = (this.parent.isAdaptive ? (width + 10) : (width + 2)) + 'px';\n }\n }\n if (this.taskBarEditAction === 'MilestoneDrag' || item.isMilestone) {\n taskBarMainContainer.style.setProperty(position, (item.left - (width / 2)) + 'px');\n resizeLine.style.left = (item.left - (width / 2)) + 'px';\n resizeLine.style.width = (width) + \"px\";\n }\n else if (this.taskBarEditAction === 'ProgressResizing') {\n if (this.segmentIndex === -1) {\n traceChildTaskBar.style.setProperty(position, (item.left + item.progressWidth - 10) + 'px');\n if (!isNullOrUndefined(traceChildProgressBar)) {\n traceChildProgressBar.style.width = item.progressWidth + 'px';\n traceChildProgressBar.style.borderBottomRightRadius = this.progressBorderRadius + 'px';\n traceChildProgressBar.style.borderTopRightRadius = this.progressBorderRadius + 'px';\n var width_1 = this.parent.enableRtl ? item.progressWidth + 8 : item.progressWidth - 8;\n childProgressResizer.style.setProperty(position, width_1 + 'px');\n }\n }\n else {\n this.updateSegmentProgress(this.taskBarEditRecord.ganttProperties);\n traceChildProgressBar.style.width = item.segments[this.segmentIndex].progressWidth + 'px';\n traceChildProgressBar.style.borderBottomRightRadius = this.progressBorderRadius + 'px';\n traceChildProgressBar.style.borderTopRightRadius = this.progressBorderRadius + 'px';\n var width_2 = this.parent.enableRtl ? item.segments[this.segmentIndex].progressWidth + 8 : item.segments[this.segmentIndex].progressWidth - 8;\n childProgressResizer.style.setProperty(position, width_2 + 'px');\n }\n }\n else if (this.taskBarEditAction === 'RightResizing' && !isNullOrUndefined(traceChildTaskBar)) {\n resizeLine.style.width = (width) + 'px';\n traceChildTaskBar.style.width = (width) + 'px';\n if (!isNullOrUndefined(traceChildProgressBar)) {\n traceChildProgressBar.style.width = (item.progressWidth) + 'px';\n taskBarRightResizer.style.setProperty(position, rightResizer + 'px');\n if (!isNullOrUndefined(childProgressResizer)) {\n childProgressResizer.style.setProperty(position, item.progressWidth - 10 + 'px');\n }\n }\n }\n else if (this.taskBarEditAction === 'ParentDrag') {\n resizeLine.style.left = (item.left) + 'px';\n resizeLine.style.width = (width) + \"px\";\n resizeLine.style.width = (item.width) + 'px';\n if (!isNullOrUndefined(traceParentTaskBar)) {\n traceParentTaskBar.style.width = (width) + 'px';\n resizeLine.style.width = (item.width) + 'px';\n }\n if (!isNullOrUndefined(traceChildProgressBar)) {\n traceParentProgressBar.style.width = (item.progressWidth) + 'px';\n }\n }\n else if (this.taskBarEditAction === 'ParentResizing') {\n resizeLine.style.width = (item.width) + 'px';\n resizeLine.style.left = item.left + 'px';\n manualParentTaskbar.style.width = manualTaskbar.style.width = (item.width) + 'px';\n manualParentRight.style.setProperty(position, item.width - manualParentLeft.offsetLeft + 'px');\n }\n else if (this.taskBarEditAction === 'ManualParentDrag') {\n resizeLine.style.width = (item.width) + 'px';\n resizeLine.style.left = item.left + 'px';\n manualParentTaskbar.style.setProperty(position, item.left - item.autoLeft + 'px');\n }\n else {\n if (!isNullOrUndefined(traceChildTaskBar) && !segmentedTaskBarContainer) {\n traceChildTaskBar.style.width = (item.width) + 'px';\n traceChildTaskBar.style.left = (item.left) + 'px';\n this.taskBarEditElement.style.width = (item.width) + 'px';\n this.taskBarEditElement.style.left = (item.left) + \"px\";\n resizeLine.style.left = (item.left) + 'px';\n resizeLine.style.width = (item.width) + \"px\";\n }\n if (!isNullOrUndefined(traceChildProgressBar)) {\n taskBarRightResizer.style.setProperty(position, rightResizer + 'px');\n traceChildProgressBar.style.width = (item.progressWidth) + 'px';\n if (!isNullOrUndefined(childProgressResizer)) {\n childProgressResizer.style.setProperty(position, item.progressWidth - 10 + 'px');\n }\n }\n if (segmentedTaskBarContainer) {\n taskBarRightResizer.style.setProperty(position, rightResizer + 'px');\n traceChildProgressBar.style.width = (segment.progressWidth) + 'px';\n if (!isNullOrUndefined(childProgressResizer)) {\n childProgressResizer.style.setProperty(position, segment.progressWidth - 10 + 'px');\n }\n }\n }\n }\n };\n /**\n * To handle mouse up event in chart\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.mouseUpHandler = function (e) {\n var mouseDragged = this.isMouseDragged;\n this.previousMouseMove = null;\n this.editTooltip.showHideTaskbarEditTooltip(false, this.segmentIndex);\n if (this.taskBarEditAction && this.isMouseDragged) {\n if ((!this.dragMouseLeave && this.taskBarEditedAction) || (this.parent.viewType === 'ResourceView' &&\n this.parent.allowTaskbarDragAndDrop)) {\n this.taskBarEditedAction(e);\n this.isMouseDragged = false;\n }\n else {\n this.parent.isOnEdit = false;\n this.cancelTaskbarEditActionInMouseLeave();\n if (this.parent.enableCriticalPath && this.parent.criticalPathModule) {\n var criticalModule = this.parent.criticalPathModule;\n criticalModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);\n }\n }\n }\n if (this.parent.viewType === 'ResourceView' && this.parent.enableMultiTaskbar && !isNullOrUndefined(this.taskBarEditElement)) {\n if (!isNullOrUndefined(this.taskBarEditElement.querySelector('.e-gantt-child-taskbar'))) {\n if (this.taskBarEditElement.querySelector('.e-gantt-child-taskbar').classList.contains('e-collapsed-taskbar-drag')) {\n removeClass([this.taskBarEditElement.querySelector('.e-gantt-child-taskbar')], 'e-collapsed-taskbar-drag');\n this.taskBarEditElement.style.zIndex = this.prevZIndex;\n this.prevZIndex = '';\n }\n }\n }\n if (!this.parent.isAdaptive || mouseDragged) {\n this.initPublicProp();\n }\n this.stopScrollTimer();\n };\n /**\n * To perform taskbar edit operation.\n *\n * @param {PointerEvent} event .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.taskBarEditedAction = function (event) {\n var args = {};\n var x1 = this.mouseDownX;\n var y1 = this.mouseDownY;\n var item = this.taskBarEditRecord;\n var recordIndex = this.parent.ganttChartModule.getIndexByTaskBar(this.taskBarEditElement);\n var x2 = this.mouseMoveX;\n var e = this.getCoordinate(event);\n var resMouseY = e.pageY - this.parent.ganttChartModule.chartBodyContainer.offsetTop;\n if ((this.taskBarEditAction === 'ConnectorPointLeftDrag' ||\n this.taskBarEditAction === 'ConnectorPointRightDrag') && !this.drawPredecessor) {\n this.dependencyCancel = true;\n }\n if ((this.taskBarEditAction === 'ConnectorPointLeftDrag' ||\n this.taskBarEditAction === 'ConnectorPointRightDrag') && this.drawPredecessor && (!this.connectorSecondRecord.hasChildRecords ||\n this.connectorSecondRecord.hasChildRecords && this.parent.allowParentDependency)) {\n this.parent.connectorLineEditModule.updatePredecessor(this.connectorSecondRecord, this.finalPredecessor);\n if (this.parent.UpdateOffsetOnTaskbarEdit) {\n this.parent.connectorLineEditModule['calculateOffset'](this.connectorSecondRecord);\n }\n }\n else {\n if (x1 !== x2 || (Math.abs(y1 - resMouseY) >= (this.parent.rowHeight - this.parent.taskbarHeight) / 2)) {\n if (item !== null) {\n args.editingFields = item.ganttProperties;\n args.data = item;\n args.recordIndex = recordIndex;\n args.previousData = this.previousItem;\n args.taskBarEditAction = this.taskBarEditAction;\n args.action = 'TaskbarEditing';\n args.roundOffDuration = this.roundOffDuration;\n args.target = this.targetElement;\n this.taskbarEditedArgs = args;\n this.taskbarEdited(args);\n }\n }\n }\n this.parent['isProjectDateUpdated'] = false;\n };\n /**\n * To cancel the taskbar edt action.\n *\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.cancelTaskbarEditActionInMouseLeave = function () {\n this.parent.editModule.reUpdatePreviousRecords(true);\n };\n TaskbarEdit.prototype.updateSegmentProgress = function (taskData) {\n var segments = taskData.segments;\n var fixedWidth = true;\n var totalTaskWidth = this.splitTasksDuration(segments) * this.parent.perDayWidth;\n var totalProgressWidth = this.parent.dataOperation.getProgressWidth(totalTaskWidth, taskData.progress);\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n delete segment.progressWidth;\n if (totalProgressWidth > 0 && totalProgressWidth > segment.width) {\n totalProgressWidth = totalProgressWidth - segment.width;\n segment.progressWidth = segment.width;\n segment.showProgress = false;\n }\n else if (fixedWidth) {\n segment.progressWidth = totalProgressWidth;\n segment.showProgress = true;\n totalProgressWidth = totalProgressWidth - segment.width;\n fixedWidth = false;\n }\n }\n };\n /**\n * To trigger taskbar edited event.\n *\n * @param {ITaskbarEditedEventArgs} arg .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.taskbarEdited = function (arg) {\n var args = extend({}, arg);\n var ganttRecord = args.data;\n var taskData = ganttRecord.ganttProperties;\n var draggedRecIndex = this.parent.currentViewData.indexOf(ganttRecord);\n if ((args.taskBarEditAction === 'MilestoneDrag' || args.taskBarEditAction === 'ChildDrag') && this.parent.viewType === \"ResourceView\"\n && this.parent.allowTaskbarDragAndDrop && this.dragMoveY > 0) {\n if (this.parent.rowDragAndDropModule) {\n var flatRecordCol = this.parent.currentViewData;\n if (flatRecordCol[this.taskBarEditRecord.parentItem.index] && ((this.parent.editedRecords.indexOf(flatRecordCol[this.taskBarEditRecord.parentItem.index]) === -1))) {\n this.parent.editedRecords.push(flatRecordCol[this.taskBarEditRecord.parentItem.index]);\n }\n var ganttrec = void 0;\n var resHeight = 0;\n var rowCount = 0;\n var childIndex_1;\n var droppedRecord = void 0;\n var treeGridrows = this.parent.treeGrid.getRows().length;\n for (var i = 0; i < treeGridrows; i++) {\n if (resHeight < this.dragMoveY && this.parent.getRowByIndex(i).style.display !== 'none') {\n rowCount = i;\n resHeight = resHeight + parseInt(this.parent.getRowByIndex(i).style.height);\n if (!flatRecordCol[i].parentItem) {\n ganttrec = flatRecordCol[i];\n }\n else {\n ganttrec = this.parent.getRecordByID(flatRecordCol[i].parentItem.taskId);\n }\n }\n }\n var draggedRecordtaskbar = this.parent.getRowByIndex(draggedRecIndex).getElementsByClassName('e-taskbar-main-container');\n var taskbarContainer = this.parent.getRowByIndex(rowCount).getElementsByClassName('e-taskbar-main-container');\n for (var j = 0; j < taskbarContainer.length; j++) {\n if (taskbarContainer[j]['offsetTop'] < this.dragMoveY && draggedRecordtaskbar[0].getAttribute('rowuniqueid') !==\n taskbarContainer[j].getAttribute('rowuniqueid')) {\n this.draggedRecordMarginTop = taskbarContainer[j]['style'].marginTop;\n childIndex_1 = taskbarContainer[j].getAttribute('rowuniqueid');\n }\n }\n if (childIndex_1) {\n droppedRecord = this.parent.currentViewData.filter(function (data) {\n if (data['rowUniqueID'] === childIndex_1) {\n return data;\n }\n else {\n return null;\n }\n });\n }\n if (droppedRecord) {\n var droppedRecordIndex = this.parent.currentViewData.indexOf(droppedRecord[0]);\n var position = (droppedRecord[0].hasChildRecords || (!droppedRecord[0].parentItem &&\n droppedRecord[0].childRecords.length == 0)) ? 'child' : 'below';\n if (this.parent.rowDragAndDropModule) {\n this.parent.rowDragAndDropModule.reorderRows([draggedRecIndex], droppedRecordIndex, position);\n }\n this.dragMoveY = 0;\n }\n }\n if (this.parent.viewType === 'ResourceView' && this.parent.showOverAllocation) {\n this.parent.ganttChartModule.renderOverAllocationContainer();\n }\n }\n if (args.taskBarEditAction === 'ProgressResizing') {\n if (args.previousData.progress !== taskData.progress) {\n this.parent.setRecordValue('progress', this.getProgressPercent(taskData.width, taskData.progressWidth), taskData, true);\n if (ganttRecord.parentItem) {\n this.parent.editModule.updateParentProgress(ganttRecord.parentItem);\n }\n if (!isNullOrUndefined(taskData.segments)) {\n this.updateSegmentProgress(taskData);\n }\n }\n }\n else {\n var segments = args.data.ganttProperties.segments;\n if (!isNullOrUndefined(segments) && segments.length > 0\n && ((this.taskBarEditAction === 'LeftResizing' && this.segmentIndex !== 0)\n || (this.taskBarEditAction === 'ChildDrag' && this.segmentIndex !== 0)\n || (this.taskBarEditAction === 'RightResizing'))) {\n var segment = segments[this.segmentIndex];\n var ganttProp = this.taskBarEditRecord.ganttProperties;\n var previousSegment = this.segmentIndex === 0 ? null\n : segments[this.segmentIndex - 1];\n var nextSegment = this.segmentIndex === segments.length - 1 ? null\n : segments[this.segmentIndex + 1];\n var sDate = !isNullOrUndefined(nextSegment) ?\n new Date(nextSegment.startDate.getTime()) : this.parent.cloneProjectEndDate;\n var eDate = !isNullOrUndefined(previousSegment) ?\n new Date(previousSegment.endDate.getTime()) : this.parent.cloneProjectStartDate;\n var cStartDate = new Date(segment.startDate.getTime());\n var cEndDate = new Date(segment.endDate.getTime());\n if (this.parent.timelineModule.topTier === 'Day' && this.parent.timelineModule.bottomTier === 'Hour') {\n cStartDate.setHours(cStartDate.getHours() - 1);\n cEndDate.setHours(cEndDate.getHours() + 1);\n }\n else {\n sDate.setHours(0, 0, 0, 0);\n eDate.setHours(0, 0, 0, 0);\n cStartDate.setDate(cStartDate.getDate() - 1);\n cEndDate.setDate(cEndDate.getDate() + 1);\n cStartDate.setHours(0, 0, 0, 0);\n cEndDate.setHours(0, 0, 0, 0);\n }\n if (cStartDate.getTime() <= eDate.getTime() && !isNullOrUndefined(previousSegment) && !isNullOrUndefined(segment)) {\n var segmentIndexes = [\n { 'firstSegmentIndex': previousSegment.segmentIndex, 'secondSegmentIndex': segment.segmentIndex }\n ];\n this.parent.chartRowsModule.mergeTask(ganttProp.taskId, segmentIndexes);\n }\n else if (cEndDate.getTime() >= sDate.getTime() && this.segmentIndex !== segments.length - 1) {\n var segmentIndexes = [\n { 'firstSegmentIndex': segment.segmentIndex, 'secondSegmentIndex': nextSegment.segmentIndex }\n ];\n this.parent.chartRowsModule.mergeTask(ganttProp.taskId, segmentIndexes);\n }\n else if (cEndDate.getTime() >= sDate.getTime()) {\n segment.endDate.setDate(this.parent.cloneProjectEndDate.getDate() - 1);\n segment.startDate = this.parent.dataOperation.getStartDate(segment.endDate, segment.duration, ganttProp.durationUnit, ganttProp);\n // eslint-disable-next-line\n for (var i = segments.length - 2; i >= 0; i++) {\n var segment_5 = segments[i];\n var eDate_1 = segment_5.endDate;\n eDate_1.setDate(eDate_1.getDate() - segment_5.offsetDuration);\n segment_5.endDate = eDate_1;\n segment_5.startDate = this.parent.dataOperation.getStartDate(segment_5.endDate, segment_5.duration, ganttProp.durationUnit, ganttProp);\n }\n }\n }\n this.parent.dataOperation.updateWidthLeft(args.data);\n }\n this.parent.dataOperation.updateTaskData(ganttRecord);\n this.parent.editModule.initiateUpdateAction(args);\n };\n /**\n * To get progress in percentage.\n *\n * @param {number} parentwidth .\n * @param {number} progresswidth .\n * @returns {number} .\n * @private\n */\n TaskbarEdit.prototype.getProgressPercent = function (parentwidth, progresswidth) {\n return Math.ceil(((progresswidth / parentwidth) * 100));\n };\n /**\n * false line implementation.\n *\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.drawFalseLine = function () {\n var x1 = this.mouseDownX;\n var y1 = this.mouseDownY;\n var x2 = this.mouseMoveX;\n var y2 = this.mouseMoveY;\n var length = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));\n var angle = Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;\n var transform = 'rotate(' + (this.parent.enableRtl ? -angle : angle) + 'deg)';\n var left;\n var width = 0;\n if (!isNullOrUndefined(document.querySelectorAll(\".e-chart-row\")[0])) {\n width = document.querySelectorAll(\".e-chart-row\")[0].offsetWidth;\n }\n if (this.taskBarEditAction === 'ConnectorPointLeftDrag') {\n if (this.parent.enableRtl) {\n left = ((width - (this.elementOffsetLeft + (this.parent.chartRowsModule.connectorPointWidth / 2)))) -\n Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left);\n }\n else {\n left = (this.elementOffsetLeft - (this.parent.chartRowsModule.connectorPointWidth / 2)) -\n this.parent.ganttChartModule.scrollObject.previousScroll.left;\n }\n }\n if (this.taskBarEditAction === 'ConnectorPointRightDrag') {\n if (this.parent.enableRtl) {\n left = (width - (this.elementOffsetLeft + this.elementOffsetWidth +\n (this.parent.chartRowsModule.connectorPointWidth / 2))) - Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left);\n }\n else {\n left = (this.elementOffsetLeft + this.elementOffsetWidth) +\n (this.parent.chartRowsModule.connectorPointWidth / 2) - Math.abs(this.parent.ganttChartModule.scrollObject.previousScroll.left);\n }\n }\n var top = ((this.elementOffsetTop) + (this.elementOffsetHeight / 2) +\n this.parent.ganttChartModule.chartBodyContainer.offsetTop) - this.parent.ganttChartModule.scrollObject.previousScroll.top;\n this.removeFalseLine(false);\n this.falseLine = createElement('div', {\n className: cls.falseLine, id: 'ganttfalseline' + this.parent.element.id,\n styles: 'position: absolute;transform:' + transform + ';' +\n 'border-top-width: 1px;border-top-style: dashed;z-index: 5;width:' + (length - 3) + 'px;' +\n 'top:' + top + 'px;'\n });\n if (this.parent.enableRtl) {\n this.falseLine.style.left = 'auto';\n this.falseLine.style.right = left + 'px';\n this.falseLine.style.transformOrigin = '100% 0%';\n }\n else {\n this.falseLine.style.right = 'auto';\n this.falseLine.style.left = left + 'px';\n this.falseLine.style.transformOrigin = '0% 100%';\n }\n this.parent.ganttChartModule.chartBodyContainer.appendChild(this.falseLine);\n };\n /**\n *\n * @param {boolean} isRemoveConnectorPointDisplay .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.removeFalseLine = function (isRemoveConnectorPointDisplay) {\n if (this.falseLine) {\n remove(this.falseLine);\n this.falseLine = null;\n if (isRemoveConnectorPointDisplay) {\n this.elementOffsetLeft = 0;\n this.elementOffsetTop = 0;\n this.elementOffsetWidth = 0;\n this.elementOffsetHeight = 0;\n removeClass(this.parent.ganttChartModule.scrollElement.querySelectorAll('.' + cls.connectorLineContainer), [cls.connectorLineZIndex]);\n }\n }\n };\n /**\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.updateConnectorLineSecondProperties = function (e) {\n var target = this.getElementByPosition(e);\n var element = parentsUntil(target, cls.taskBarMainContainer);\n this.connectorSecondAction = null;\n var scrollTop = 0;\n if (parentsUntil(target, cls.connectorPointLeft)) {\n this.connectorSecondAction = 'ConnectorPointLeftDrag';\n this.toPredecessorText = 'Start';\n }\n else if (parentsUntil(target, cls.connectorPointRight)) {\n this.connectorSecondAction = 'ConnectorPointRightDrag';\n this.toPredecessorText = 'Finish';\n }\n else {\n this.connectorSecondAction = null;\n this.toPredecessorText = null;\n }\n if (this.taskBarEditElement !== element && this.taskBarEditElement !== this.highlightedSecondElement) {\n if (this.parent.virtualScrollModule && this.parent.enableVirtualization) {\n var top_1 = this.parent.virtualScrollModule.getTopPosition();\n scrollTop = top_1;\n }\n if ((this.parent.virtualScrollModule && this.parent.enableVirtualization &&\n !this.elementOffsetLeft) || !this.parent.enableVirtualization) {\n if (!this.parent.allowParentDependency) {\n this.elementOffsetLeft = this.realTaskbarElement.offsetLeft;\n this.elementOffsetTop = this.realTaskbarElement.parentElement.offsetTop + this.realTaskbarElement.offsetHeight / 3 + scrollTop;\n }\n else {\n if (this.taskBarEditElement.children[0].classList.contains('e-manualparent-main-container')) {\n this.elementOffsetLeft = this.realTaskbarElement.children[0]['offsetLeft'] + this.realTaskbarElement.offsetLeft;\n this.elementOffsetTop = ((this.realTaskbarElement.parentElement.offsetTop + this.realTaskbarElement.offsetHeight / 3 - 5) + this.taskBarEditElement.children[0]['offsetTop']) + scrollTop;\n }\n else {\n this.elementOffsetLeft = this.realTaskbarElement.offsetLeft;\n this.elementOffsetTop = this.realTaskbarElement.parentElement.offsetTop + this.realTaskbarElement.offsetHeight / 3 + scrollTop;\n }\n }\n this.elementOffsetWidth = this.realTaskbarElement.offsetWidth;\n this.elementOffsetHeight = this.realTaskbarElement.offsetHeight;\n }\n this.showHideTaskBarEditingElements(element, this.highlightedSecondElement, true);\n }\n if (isNullOrUndefined(this.connectorSecondAction) && !isNullOrUndefined(this.connectorSecondElement) &&\n (!this.connectorSecondRecord.hasChildRecords || this.connectorSecondRecord.hasChildRecords &&\n this.parent.allowParentDependency)) {\n this.editTooltip.showHideTaskbarEditTooltip(false, this.segmentIndex);\n removeClass([this.connectorSecondElement.querySelector('.' + cls.connectorPointLeft)], [cls.connectorPointAllowBlock]);\n removeClass([this.connectorSecondElement.querySelector('.' + cls.connectorPointRight)], [cls.connectorPointAllowBlock]);\n }\n this.connectorSecondElement = this.connectorSecondAction ? element : null;\n this.highlightedSecondElement = element;\n this.connectorSecondRecord = isNullOrUndefined(this.connectorSecondElement) ?\n null : this.parent.ganttChartModule.getRecordByTaskBar(this.connectorSecondElement);\n };\n // eslint-disable-next-line\n TaskbarEdit.prototype.triggerDependencyEvent = function (e, mouseUp) {\n var parentWithZoomStyle = this.parent.element.closest('[style*=\"zoom\"]');\n var zoomedPageY;\n if (parentWithZoomStyle) {\n var zoom1 = parseFloat(getComputedStyle(parentWithZoomStyle).zoom);\n zoomedPageY = e.pageY / zoom1;\n }\n var fromItem = this.taskBarEditRecord.ganttProperties;\n var toItem = this.connectorSecondRecord ? this.connectorSecondRecord.ganttProperties : null;\n var predecessor;\n var currentTarget;\n var target = this.getElementByPosition(e);\n var element = target;\n var uniqueId = this.parent.viewType === 'ResourceView' ? fromItem.taskId : fromItem.rowUniqueID;\n if (this.taskBarEditAction === 'ConnectorPointLeftDrag') {\n predecessor = uniqueId + (this.parent.enableRtl ? 'F' : 'S');\n }\n else if (this.taskBarEditAction === 'ConnectorPointRightDrag') {\n predecessor = uniqueId + (this.parent.enableRtl ? 'S' : 'F');\n }\n if (this.connectorSecondAction) {\n if (this.connectorSecondAction === 'ConnectorPointLeftDrag') {\n predecessor += this.parent.enableRtl ? 'F' : 'S';\n currentTarget = this.parent.enableRtl ? 'finish' : 'start';\n }\n else if (this.connectorSecondAction === 'ConnectorPointRightDrag') {\n predecessor += this.parent.enableRtl ? 'S' : 'F';\n currentTarget = this.parent.enableRtl ? 'start' : 'finish';\n }\n }\n if (isNullOrUndefined(toItem)) {\n this.drawPredecessor = false;\n return;\n }\n if (toItem.predecessorsName) {\n this.finalPredecessor = toItem.predecessorsName + ',' + predecessor;\n }\n else {\n this.finalPredecessor = predecessor;\n }\n var isValidLink = this.parent.connectorLineEditModule.validatePredecessorRelation(this.connectorSecondRecord, this.finalPredecessor);\n // eslint-disable-next-line\n var predecessorArray = this.parent.predecessorModule.calculatePredecessor(predecessor, this.connectorSecondRecord);\n var args = {};\n args.fromItem = fromItem;\n args.toItem = toItem;\n args.newPredecessorString = this.finalPredecessor;\n args.predecessor = predecessorArray && predecessorArray[0];\n args.isValidLink = isValidLink;\n args.requestType = 'ValidateDependency';\n this.parent.trigger('actionBegin', args);\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\" && args.requestType != \"ValidateDependency\") {\n this.parent.showMaskRow();\n }\n else if (args.requestType != \"ValidateDependency\") {\n this.parent.showSpinner();\n }\n args.isValidLink = !isValidLink && args.isValidLink ? false : args.isValidLink;\n if (args.isValidLink) {\n if (!this.editTooltip.toolTipObj && !this.parent.isAdaptive) {\n this.editTooltip.showHideTaskbarEditTooltip(true, this.segmentIndex);\n }\n if (this.editTooltip.toolTipObj) {\n this.parent.connectorLineModule.tooltipTable.innerHTML = this.parent.connectorLineModule.getConnectorLineTooltipInnerTd(this.parent.editModule.taskbarEditModule.taskBarEditRecord.ganttProperties.taskName, this.parent.editModule.taskbarEditModule.fromPredecessorText, '', '');\n var table = this.parent.connectorLineModule.tooltipTable.querySelector('#toPredecessor').querySelectorAll('td');\n table[1].innerText = toItem.taskName;\n table[2].innerText = this.parent.localeObj.getConstant(currentTarget);\n var tooltipElement = this.parent.connectorLineModule.tooltipTable.parentElement.parentElement;\n if (tooltipElement.offsetTop + tooltipElement.offsetHeight > zoomedPageY) {\n tooltipElement.style.top = (e.pageY - tooltipElement.offsetHeight - 20) + 'px';\n }\n }\n this.drawPredecessor = true;\n }\n else {\n if (this.parent.isAdaptive) {\n if (target.classList.contains(cls.connectorPointLeft) ||\n target.classList.contains(cls.connectorPointRight)) {\n this.showHideActivePredecessors(true);\n }\n }\n else {\n addClass([element], [cls.connectorPointAllowBlock]);\n }\n this.drawPredecessor = false;\n }\n };\n // Get XY coordinates for touch and non-touch device\n TaskbarEdit.prototype.getCoordinate = function (event) {\n var coordinates = {};\n if (this.parent.isAdaptive && event && event.type !== 'click') {\n var e = event;\n if (e.type === 'touchmove' || e.type === 'touchstart' || e.type === 'touchend') {\n coordinates.pageX = e.changedTouches[0].pageX;\n coordinates.pageY = e.changedTouches[0].pageY;\n }\n }\n else if (event) {\n var e = event;\n coordinates.pageX = e.pageX;\n coordinates.pageY = e.pageY;\n }\n return coordinates;\n };\n // Get current target element by mouse position\n // window.pageXOffset && window.pageYOffset is used to find the accurate element position in IPad/IPhone\n TaskbarEdit.prototype.getElementByPosition = function (event) {\n if (!this.parent.isAdaptive) {\n return event.target;\n }\n else {\n var e = this.getCoordinate(event);\n return document.elementFromPoint((e.pageX - window.pageXOffset), (e.pageY - window.pageYOffset));\n }\n };\n TaskbarEdit.prototype.multipleSelectionEnabled = function () {\n if (this.parent.selectionModule &&\n this.parent.selectionSettings.mode !== 'Cell'\n && this.parent.selectionSettings.type === 'Multiple') {\n this.parent.selectionModule.hidePopUp();\n }\n };\n TaskbarEdit.prototype.unWireEvents = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('chartMouseDown', this.mouseDownHandler);\n this.parent.off('chartMouseUp', this.mouseUpHandler);\n this.parent.off('chartMouseLeave', this.mouseLeaveHandler);\n this.parent.off('chartMouseMove', this.mouseMoveAction);\n this.parent.off('chartMouseClick', this.mouseClickHandler);\n };\n /**\n * @returns {void} .\n * @private\n */\n TaskbarEdit.prototype.destroy = function () {\n this.unWireEvents();\n this.stopScrollTimer();\n this.parent.editModule.taskbarEditModule = undefined;\n };\n return TaskbarEdit;\n}(DateProcessor));\nexport { TaskbarEdit };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, closest, Collection, Complex, attributes, detach, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, select, isVisible } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Browser, formatUnit, L10n } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, isNullOrUndefined as isNOU, selectAll, addClass, removeClass, remove } from '@syncfusion/ej2-base';\nimport { EventHandler, rippleEffect, Touch, compile, Animation } from '@syncfusion/ej2-base';\nimport { getRandomId, SanitizeHtmlHelper, Draggable } from '@syncfusion/ej2-base';\nimport { Toolbar } from '../toolbar/toolbar';\nvar CLS_TAB = 'e-tab';\nvar CLS_HEADER = 'e-tab-header';\nvar CLS_BLA_TEM = 'blazor-template';\nvar CLS_CONTENT = 'e-content';\nvar CLS_NEST = 'e-nested';\nvar CLS_ITEMS = 'e-items';\nvar CLS_ITEM = 'e-item';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_RTL = 'e-rtl';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_DISABLE = 'e-disable';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_FOCUS = 'e-focused';\nvar CLS_ICONS = 'e-icons';\nvar CLS_ICON = 'e-icon';\nvar CLS_ICON_TAB = 'e-icon-tab';\nvar CLS_ICON_CLOSE = 'e-close-icon';\nvar CLS_CLOSE_SHOW = 'e-close-show';\nvar CLS_TEXT = 'e-tab-text';\nvar CLS_INDICATOR = 'e-indicator';\nvar CLS_WRAP = 'e-tab-wrap';\nvar CLS_TEXT_WRAP = 'e-text-wrap';\nvar CLS_TAB_ICON = 'e-tab-icon';\nvar CLS_TB_ITEMS = 'e-toolbar-items';\nvar CLS_TB_ITEM = 'e-toolbar-item';\nvar CLS_TB_POP = 'e-toolbar-pop';\nvar CLS_TB_POPUP = 'e-toolbar-popup';\nvar CLS_HOR_NAV = 'e-hor-nav';\nvar CLS_POPUP_OPEN = 'e-popup-open';\nvar CLS_POPUP_CLOSE = 'e-popup-close';\nvar CLS_PROGRESS = 'e-progress';\nvar CLS_IGNORE = 'e-ignore';\nvar CLS_OVERLAY = 'e-overlay';\nvar CLS_HSCRCNT = 'e-hscroll-content';\nvar CLS_VSCRCNT = 'e-vscroll-content';\nvar CLS_VTAB = 'e-vertical-tab';\nvar CLS_VERTICAL = 'e-vertical';\nvar CLS_VLEFT = 'e-vertical-left';\nvar CLS_VRIGHT = 'e-vertical-right';\nvar CLS_HBOTTOM = 'e-horizontal-bottom';\nvar CLS_FILL = 'e-fill-mode';\nvar TABITEMPREFIX = 'tabitem_';\nvar CLS_REORDER_ACTIVE_ITEM = 'e-reorder-active-item';\n/**\n * Objects used for configuring the Tab selecting item action properties.\n */\nvar TabActionSettings = /** @class */ (function (_super) {\n __extends(TabActionSettings, _super);\n function TabActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideLeftIn')\n ], TabActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(600)\n ], TabActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], TabActionSettings.prototype, \"easing\", void 0);\n return TabActionSettings;\n}(ChildProperty));\nexport { TabActionSettings };\n/**\n * Objects used for configuring the Tab animation properties.\n */\nvar TabAnimationSettings = /** @class */ (function (_super) {\n __extends(TabAnimationSettings, _super);\n function TabAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideLeftIn', duration: 600, easing: 'ease' }, TabActionSettings)\n ], TabAnimationSettings.prototype, \"previous\", void 0);\n __decorate([\n Complex({ effect: 'SlideRightIn', duration: 600, easing: 'ease' }, TabActionSettings)\n ], TabAnimationSettings.prototype, \"next\", void 0);\n return TabAnimationSettings;\n}(ChildProperty));\nexport { TabAnimationSettings };\n/**\n * Objects used for configuring the Tab item header properties.\n */\nvar Header = /** @class */ (function (_super) {\n __extends(Header, _super);\n function Header() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Header.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Header.prototype, \"iconCss\", void 0);\n __decorate([\n Property('left')\n ], Header.prototype, \"iconPosition\", void 0);\n return Header;\n}(ChildProperty));\nexport { Header };\n/**\n * An array of object that is used to configure the Tab.\n */\nvar TabItem = /** @class */ (function (_super) {\n __extends(TabItem, _super);\n function TabItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Header)\n ], TabItem.prototype, \"header\", void 0);\n __decorate([\n Property(null)\n ], TabItem.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], TabItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], TabItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TabItem.prototype, \"disabled\", void 0);\n __decorate([\n Property(true)\n ], TabItem.prototype, \"visible\", void 0);\n __decorate([\n Property()\n ], TabItem.prototype, \"id\", void 0);\n __decorate([\n Property(-1)\n ], TabItem.prototype, \"tabIndex\", void 0);\n return TabItem;\n}(ChildProperty));\nexport { TabItem };\n/**\n * Tab is a content panel to show multiple contents in a single space, one at a time.\n * Each Tab item has an associated content, that will be displayed based on the active Tab header item.\n * ```html\n *
\n * \n * ```\n */\nvar Tab = /** @class */ (function (_super) {\n __extends(Tab, _super);\n /**\n * Initializes a new instance of the Tab class.\n *\n * @param {TabModel} options - Specifies Tab model properties as options.\n * @param {string | HTMLElement} element - Specifies the element that is rendered as a Tab.\n */\n function Tab(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.show = {};\n _this.hide = {};\n _this.maxHeight = 0;\n _this.title = 'Close';\n _this.isInteracted = false;\n _this.lastIndex = 0;\n _this.isAdd = false;\n _this.isIconAlone = false;\n _this.draggableItems = [];\n _this.resizeContext = _this.refreshActiveTabBorder.bind(_this);\n /**\n * Contains the keyboard configuration of the Tab.\n */\n _this.keyConfigs = {\n tab: 'tab',\n home: 'home',\n end: 'end',\n enter: 'enter',\n space: 'space',\n delete: 'delete',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow'\n };\n return _this;\n }\n /**\n * Removes the component from the DOM and detaches all its related event handlers, attributes and classes.\n *\n * @returns {void}\n */\n Tab.prototype.destroy = function () {\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n if (!isNOU(this.tbObj)) {\n this.tbObj.destroy();\n this.tbObj = null;\n }\n this.unWireEvents();\n this.element.removeAttribute('aria-disabled');\n this.expTemplateContent();\n if (!this.isTemplate) {\n while (this.element.firstElementChild) {\n remove(this.element.firstElementChild);\n }\n }\n else {\n var cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n this.element.classList.remove(CLS_TEMPLATE);\n if (!isNOU(cntEle)) {\n cntEle.innerHTML = this.cnt;\n }\n }\n if (this.btnCls) {\n this.btnCls = null;\n }\n this.hdrEle = null;\n this.cntEle = null;\n this.tbItems = null;\n this.tbItem = null;\n this.tbPop = null;\n this.prevItem = null;\n this.popEle = null;\n this.bdrLine = null;\n this.content = null;\n this.dragItem = null;\n this.cloneElement = null;\n this.draggingItems = [];\n if (this.draggableItems && this.draggableItems.length > 0) {\n for (var i = 0; i < this.draggableItems.length; i++) {\n this.draggableItems[i].destroy();\n this.draggableItems[i] = null;\n }\n this.draggableItems = [];\n }\n _super.prototype.destroy.call(this);\n this.trigger('destroyed');\n };\n /**\n * Refresh the tab component\n *\n * @returns {void}\n */\n Tab.prototype.refresh = function () {\n if (this.isReact) {\n this.clearTemplate();\n }\n _super.prototype.refresh.call(this);\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n /**\n * Initialize component\n *\n * @private\n * @returns {void}\n */\n Tab.prototype.preRender = function () {\n var nested = closest(this.element, '.' + CLS_CONTENT);\n this.prevIndex = 0;\n this.isNested = false;\n this.isPopup = false;\n this.initRender = true;\n this.isSwiped = false;\n this.itemIndexArray = [];\n this.templateEle = [];\n if (this.allowDragAndDrop) {\n this.dragArea = !isNOU(this.dragArea) ? this.dragArea : '#' + this.element.id + ' ' + ('.' + CLS_HEADER);\n }\n if (!isNOU(nested)) {\n nested.parentElement.classList.add(CLS_NEST);\n this.isNested = true;\n }\n var name = Browser.info.name;\n var css = (name === 'msie') ? 'e-ie' : (name === 'edge') ? 'e-edge' : (name === 'safari') ? 'e-safari' : '';\n setStyle(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.setCssClass(this.element, this.cssClass, true);\n attributes(this.element, { 'aria-disabled': 'false' });\n this.setCssClass(this.element, css, true);\n this.updatePopAnimationConfig();\n };\n /**\n * Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n Tab.prototype.render = function () {\n this.btnCls = this.createElement('span', { className: CLS_ICONS + ' ' + CLS_ICON_CLOSE, attrs: { title: this.title } });\n this.tabId = this.element.id.length > 0 ? ('-' + this.element.id) : getRandomId();\n this.renderContainer();\n this.wireEvents();\n this.initRender = false;\n if (this.isReact && this.portals && this.portals.length > 0) {\n this.renderReactTemplates(function () {\n this.refreshActiveBorder();\n });\n }\n };\n Tab.prototype.renderContainer = function () {\n var ele = this.element;\n this.items.forEach(function (item, index) {\n if (isNOU(item.id) && !isNOU(item.setProperties)) {\n item.setProperties({ id: TABITEMPREFIX + index.toString() }, true);\n }\n });\n if (this.items.length > 0 && ele.children.length === 0) {\n ele.appendChild(this.createElement('div', { className: CLS_CONTENT }));\n this.setOrientation(this.headerPlacement, this.createElement('div', { className: CLS_HEADER }));\n this.isTemplate = false;\n }\n else if (this.element.children.length > 0) {\n this.isTemplate = true;\n ele.classList.add(CLS_TEMPLATE);\n var header = ele.querySelector('.' + CLS_HEADER);\n if (header && this.headerPlacement === 'Bottom') {\n this.setOrientation(this.headerPlacement, header);\n }\n }\n if (!isNOU(select('.' + CLS_HEADER, this.element)) && !isNOU(select('.' + CLS_CONTENT, this.element))) {\n this.renderHeader();\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n if (!isNOU(this.tbItems)) {\n rippleEffect(this.tbItems, { selector: '.e-tab-wrap' });\n }\n this.renderContent();\n if (selectAll('.' + CLS_TB_ITEM, this.element).length > 0) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.bdrLine = this.createElement('div', { className: CLS_INDICATOR + ' ' + CLS_HIDDEN + ' ' + CLS_IGNORE });\n var scrCnt = select('.' + this.scrCntClass, this.tbItems);\n if (!isNOU(scrCnt)) {\n scrCnt.insertBefore(this.bdrLine, scrCnt.firstChild);\n }\n else {\n this.tbItems.insertBefore(this.bdrLine, this.tbItems.firstChild);\n }\n this.setContentHeight(true);\n this.select(this.selectedItem);\n }\n this.setRTL(this.enableRtl);\n }\n };\n Tab.prototype.renderHeader = function () {\n var _this = this;\n var hdrPlace = this.headerPlacement;\n var tabItems = [];\n this.hdrEle = this.getTabHeader();\n this.addVerticalClass();\n if (!this.isTemplate) {\n tabItems = this.parseObject(this.items, 0);\n }\n else {\n if (this.element.children.length > 1 && this.element.children[1].classList.contains(CLS_HEADER)) {\n this.setProperties({ headerPlacement: 'Bottom' }, true);\n }\n var count = this.hdrEle.children.length;\n var hdrItems = [];\n for (var i = 0; i < count; i++) {\n hdrItems.push(this.hdrEle.children.item(i));\n }\n if (count > 0) {\n var tabItems_1 = this.createElement('div', { className: CLS_ITEMS });\n this.hdrEle.appendChild(tabItems_1);\n hdrItems.forEach(function (item, index) {\n _this.lastIndex = index;\n var attr = {\n className: CLS_ITEM, id: CLS_ITEM + _this.tabId + '_' + index\n };\n var txt = _this.createElement('span', {\n className: CLS_TEXT, attrs: { 'role': 'presentation' }\n }).outerHTML;\n var cont = _this.createElement('div', {\n className: CLS_TEXT_WRAP, innerHTML: txt + _this.btnCls.outerHTML\n }).outerHTML;\n var wrap = _this.createElement('div', {\n className: CLS_WRAP, innerHTML: cont,\n attrs: { role: 'tab', tabIndex: '-1', 'aria-selected': 'false', 'aria-controls': CLS_CONTENT + _this.tabId + '_' + index, 'aria-disabled': 'false' }\n });\n wrap.querySelector('.' + CLS_TEXT).appendChild(item);\n tabItems_1.appendChild(_this.createElement('div', attr));\n selectAll('.' + CLS_ITEM, tabItems_1)[index].appendChild(wrap);\n });\n }\n }\n this.tbObj = new Toolbar({\n width: (hdrPlace === 'Left' || hdrPlace === 'Right') ? 'auto' : '100%',\n height: (hdrPlace === 'Left' || hdrPlace === 'Right') ? '100%' : 'auto',\n overflowMode: this.overflowMode,\n items: (tabItems.length !== 0) ? tabItems : [],\n clicked: this.clickHandler.bind(this),\n scrollStep: this.scrollStep,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n cssClass: this.cssClass\n });\n this.tbObj.isStringTemplate = true;\n this.tbObj.createElement = this.createElement;\n this.tbObj.appendTo(this.hdrEle);\n attributes(this.hdrEle, { role: 'tablist' });\n if (!isNOU(this.element.getAttribute('aria-label'))) {\n this.hdrEle.setAttribute('aria-label', this.element.getAttribute('aria-label'));\n this.element.removeAttribute('aria-label');\n }\n else if (!isNOU(this.element.getAttribute('aria-labelledby'))) {\n this.hdrEle.setAttribute('aria-labelledby', this.element.getAttribute('aria-labelledby'));\n this.element.removeAttribute('aria-labelledby');\n }\n this.setCloseButton(this.showCloseButton);\n var toolbarHeader = this.tbObj.element.querySelector('.' + CLS_TB_ITEMS);\n if (!isNOU(toolbarHeader)) {\n if (isNOU(toolbarHeader.id) || toolbarHeader.id === '') {\n toolbarHeader.id = this.element.id + '_' + 'tab_header_items';\n }\n }\n };\n Tab.prototype.renderContent = function () {\n this.cntEle = select('.' + CLS_CONTENT, this.element);\n var hdrItem = selectAll('.' + CLS_TB_ITEM, this.element);\n if (this.isTemplate) {\n this.cnt = (this.cntEle.children.length > 0) ? this.cntEle.innerHTML : '';\n var contents = this.cntEle.children;\n for (var i = 0; i < hdrItem.length; i++) {\n if (contents.length - 1 >= i) {\n addClass([contents.item(i)], CLS_ITEM);\n attributes(contents.item(i), { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + this.tabId + '_' + i });\n contents.item(i).id = CLS_CONTENT + this.tabId + '_' + i;\n }\n }\n }\n };\n Tab.prototype.reRenderItems = function () {\n this.renderContainer();\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n };\n Tab.prototype.parseObject = function (items, index) {\n var _this = this;\n var tbItems = Array.prototype.slice.call(selectAll('.e-tab-header .' + CLS_TB_ITEM, this.element));\n var maxId = this.lastIndex;\n if (!this.isReplace && tbItems.length > 0) {\n var idList_1 = [];\n tbItems.forEach(function (item) {\n idList_1.push(_this.getIndexFromEle(item.id));\n });\n maxId = Math.max.apply(Math, idList_1);\n }\n var tItems = [];\n var txtWrapEle;\n var spliceArray = [];\n var i = 0;\n items.forEach(function (item, i) {\n var pos = (isNOU(item.header) || isNOU(item.header.iconPosition)) ? '' : item.header.iconPosition;\n var css = (isNOU(item.header) || isNOU(item.header.iconCss)) ? '' : item.header.iconCss;\n if ((isNOU(item.headerTemplate)) && (isNOU(item.header) || isNOU(item.header.text) ||\n ((item.header.text.length === 0)) && (css === ''))) {\n spliceArray.push(i);\n return;\n }\n var txt = item.headerTemplate || item.header.text;\n if (typeof txt === 'string' && _this.enableHtmlSanitizer) {\n txt = SanitizeHtmlHelper.sanitize(txt);\n }\n var itemIndex;\n if (_this.isReplace && !isNOU(_this.tbId) && _this.tbId !== '') {\n itemIndex = parseInt(_this.tbId.substring(_this.tbId.lastIndexOf('_') + 1), 10);\n _this.tbId = '';\n }\n else {\n itemIndex = index + i;\n }\n _this.lastIndex = ((tbItems.length === 0) ? i : ((_this.isReplace) ? (itemIndex) : (maxId + 1 + i)));\n var disabled = (item.disabled) ? ' ' + CLS_DISABLE + ' ' + CLS_OVERLAY : '';\n var hidden = (item.visible === false) ? ' ' + CLS_HIDDEN : '';\n txtWrapEle = _this.createElement('div', { className: CLS_TEXT, attrs: { 'role': 'presentation' } });\n var tHtml = ((txt instanceof Object) ? txt.outerHTML : txt);\n var txtEmpty = (!isNOU(tHtml) && tHtml !== '');\n if (!isNOU(txt.tagName)) {\n txtWrapEle.appendChild(txt);\n }\n else {\n _this.headerTextCompile(txtWrapEle, txt, i);\n }\n var tEle;\n var icon = _this.createElement('span', {\n className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n });\n var tCont = _this.createElement('div', { className: CLS_TEXT_WRAP });\n tCont.appendChild(txtWrapEle);\n if ((txt !== '' && txt !== undefined) && css !== '') {\n if ((pos === 'left' || pos === 'top')) {\n tCont.insertBefore(icon, tCont.firstElementChild);\n }\n else {\n tCont.appendChild(icon);\n }\n tEle = txtWrapEle;\n _this.isIconAlone = false;\n }\n else {\n tEle = ((css === '') ? txtWrapEle : icon);\n if (tEle === icon) {\n detach(txtWrapEle);\n tCont.appendChild(icon);\n _this.isIconAlone = true;\n }\n }\n var tabIndex = isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString();\n var wrapAttrs = (item.disabled) ? {} : { tabIndex: tabIndex, 'data-tabindex': tabIndex, role: 'tab', 'aria-selected': 'false', 'aria-disabled': 'false' };\n tCont.appendChild(_this.btnCls.cloneNode(true));\n var wrap = _this.createElement('div', { className: CLS_WRAP, attrs: wrapAttrs });\n wrap.appendChild(tCont);\n if (_this.itemIndexArray === []) {\n _this.itemIndexArray.push(CLS_ITEM + _this.tabId + '_' + _this.lastIndex);\n }\n else {\n _this.itemIndexArray.splice((index + i), 0, CLS_ITEM + _this.tabId + '_' + _this.lastIndex);\n }\n var attrObj = {\n id: CLS_ITEM + _this.tabId + '_' + _this.lastIndex, 'data-id': item.id\n };\n var tItem = { htmlAttributes: attrObj, template: wrap };\n tItem.cssClass = ((item.cssClass !== undefined) ? item.cssClass : ' ') + ' ' + disabled + ' ' + hidden + ' '\n + ((css !== '') ? 'e-i' + pos : '') + ' ' + ((!txtEmpty) ? CLS_ICON : '');\n if (pos === 'top' || pos === 'bottom') {\n _this.element.classList.add('e-vertical-icon');\n }\n tItems.push(tItem);\n i++;\n });\n if (!this.isAdd) {\n spliceArray.forEach(function (spliceItemIndex) {\n _this.items.splice(spliceItemIndex, 1);\n });\n }\n if (this.isIconAlone) {\n this.element.classList.add(CLS_ICON_TAB);\n }\n else {\n this.element.classList.remove(CLS_ICON_TAB);\n }\n return tItems;\n };\n Tab.prototype.removeActiveClass = function () {\n var tabHeader = this.getTabHeader();\n if (tabHeader) {\n var tabItems = selectAll('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, tabHeader);\n [].slice.call(tabItems).forEach(function (node) { return node.classList.remove(CLS_ACTIVE); });\n [].slice.call(tabItems).forEach(function (node) { return node.firstElementChild.setAttribute('aria-selected', 'false'); });\n }\n };\n Tab.prototype.checkPopupOverflow = function (ele) {\n this.tbPop = select('.' + CLS_TB_POP, this.element);\n var popIcon = select('.e-hor-nav', this.element);\n var tbrItems = select('.' + CLS_TB_ITEMS, this.element);\n var lastChild = tbrItems.lastChild;\n var isOverflow = false;\n if (!this.isVertical() && ((this.enableRtl && ((popIcon.offsetLeft + popIcon.offsetWidth) > tbrItems.offsetLeft))\n || (!this.enableRtl && popIcon.offsetLeft < tbrItems.offsetWidth))) {\n isOverflow = true;\n }\n else if (this.isVertical() && (popIcon.offsetTop < lastChild.offsetTop + lastChild.offsetHeight)) {\n isOverflow = true;\n }\n if (isOverflow) {\n ele.classList.add(CLS_TB_POPUP);\n this.tbPop.insertBefore(ele, selectAll('.' + CLS_TB_POPUP, this.tbPop)[0]);\n }\n return true;\n };\n Tab.prototype.popupHandler = function (target) {\n var ripEle = target.querySelector('.e-ripple-element');\n if (!isNOU(ripEle)) {\n ripEle.outerHTML = '';\n target.querySelector('.' + CLS_WRAP).classList.remove('e-ripple');\n }\n this.tbItem = selectAll('.' + CLS_TB_ITEMS + ' .' + CLS_TB_ITEM, this.hdrEle);\n var lastChild = this.tbItem[this.tbItem.length - 1];\n if (this.tbItem.length !== 0) {\n target.classList.remove(CLS_TB_POPUP);\n target.removeAttribute('style');\n this.tbItems.appendChild(target);\n this.actEleId = target.id;\n if (this.checkPopupOverflow(lastChild)) {\n var prevEle = this.tbItems.lastChild.previousElementSibling;\n this.checkPopupOverflow(prevEle);\n }\n this.isPopup = true;\n }\n return selectAll('.' + CLS_TB_ITEM, this.tbItems).length - 1;\n };\n Tab.prototype.setCloseButton = function (val) {\n var trg = select('.' + CLS_HEADER, this.element);\n if (val === true) {\n trg.classList.add(CLS_CLOSE_SHOW);\n }\n else {\n trg.classList.remove(CLS_CLOSE_SHOW);\n }\n this.tbObj.refreshOverflow();\n this.refreshActiveTabBorder();\n };\n Tab.prototype.prevCtnAnimation = function (prev, current) {\n var animation;\n var checkRTL = this.enableRtl || this.element.classList.contains(CLS_RTL);\n if (this.isPopup || prev <= current) {\n if (this.animation.previous.effect === 'SlideLeftIn') {\n animation = {\n name: 'SlideLeftOut',\n duration: this.animation.previous.duration, timingFunction: this.animation.previous.easing\n };\n }\n else {\n animation = null;\n }\n }\n else {\n if (this.animation.next.effect === 'SlideRightIn') {\n animation = {\n name: 'SlideRightOut',\n duration: this.animation.next.duration, timingFunction: this.animation.next.easing\n };\n }\n else {\n animation = null;\n }\n }\n return animation;\n };\n Tab.prototype.triggerPrevAnimation = function (oldCnt, prevIndex) {\n var _this = this;\n var animateObj = this.prevCtnAnimation(prevIndex, this.selectedItem);\n if (!isNOU(animateObj)) {\n animateObj.begin = function () {\n setStyle(oldCnt, { 'position': 'absolute' });\n oldCnt.classList.add(CLS_PROGRESS);\n oldCnt.classList.add('e-view');\n };\n animateObj.end = function () {\n oldCnt.style.display = 'none';\n oldCnt.classList.remove(CLS_ACTIVE);\n oldCnt.classList.remove(CLS_PROGRESS);\n oldCnt.classList.remove('e-view');\n setStyle(oldCnt, { 'display': '', 'position': '' });\n if (oldCnt.childNodes.length === 0 && !_this.isTemplate) {\n detach(oldCnt);\n }\n };\n new Animation(animateObj).animate(oldCnt);\n }\n else {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n };\n Tab.prototype.triggerAnimation = function (id, value) {\n var _this = this;\n var prevIndex = this.prevIndex;\n var oldCnt;\n var itemCollection = [].slice.call(this.element.querySelector('.' + CLS_CONTENT).children);\n itemCollection.forEach(function (item) {\n if (item.id === _this.prevActiveEle) {\n oldCnt = item;\n }\n });\n var prevEle = this.tbItem[prevIndex];\n var newCnt = this.getTrgContent(this.cntEle, this.extIndex(id));\n if (isNOU(oldCnt) && !isNOU(prevEle)) {\n var idNo = this.extIndex(prevEle.id);\n oldCnt = this.getTrgContent(this.cntEle, idNo);\n }\n if (!isNOU(newCnt)) {\n this.prevActiveEle = newCnt.id;\n }\n var isPrevent = isNOU(this.animation) || this.animation.next === {} || this.animation.previous === {}\n || isNOU(this.animation.next.effect) || isNOU(this.animation.previous.effect)\n || this.animation.previous.effect == 'None' || this.animation.next.effect == 'None';\n if (this.initRender || value === false || this.animation === {} || isPrevent) {\n if (oldCnt && oldCnt !== newCnt) {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n return;\n }\n var cnt = select('.' + CLS_CONTENT, this.element);\n var animateObj;\n if (this.prevIndex > this.selectedItem && !this.isPopup) {\n var openEff = this.animation.previous.effect;\n animateObj = {\n name: ((openEff === 'None') ? '' : ((openEff !== 'SlideLeftIn') ? openEff : 'SlideLeftIn')),\n duration: this.animation.previous.duration,\n timingFunction: this.animation.previous.easing\n };\n }\n else if (this.isPopup || this.prevIndex < this.selectedItem || this.prevIndex === this.selectedItem) {\n var clsEff = this.animation.next.effect;\n animateObj = {\n name: ((clsEff === 'None') ? '' : ((clsEff !== 'SlideRightIn') ? clsEff : 'SlideRightIn')),\n duration: this.animation.next.duration,\n timingFunction: this.animation.next.easing\n };\n }\n animateObj.progress = function () {\n cnt.classList.add(CLS_PROGRESS);\n _this.setActiveBorder();\n };\n animateObj.end = function () {\n cnt.classList.remove(CLS_PROGRESS);\n newCnt.classList.add(CLS_ACTIVE);\n };\n if (!this.initRender && !isNOU(oldCnt)) {\n this.triggerPrevAnimation(oldCnt, prevIndex);\n }\n this.isPopup = false;\n if (animateObj.name === '') {\n newCnt.classList.add(CLS_ACTIVE);\n }\n else {\n new Animation(animateObj).animate(newCnt);\n }\n };\n Tab.prototype.keyPressed = function (trg) {\n var trgParent = closest(trg, '.' + CLS_HEADER + ' .' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (!isNOU(this.popEle) && trg.classList.contains('e-hor-nav')) {\n (this.popEle.classList.contains(CLS_POPUP_OPEN)) ? this.popObj.hide(this.hide) : this.popObj.show(this.show);\n }\n else if (trg.classList.contains('e-scroll-nav')) {\n trg.click();\n }\n else {\n if (!isNOU(trgParent) && trgParent.classList.contains(CLS_ACTIVE) === false) {\n this.selectTab(trgIndex, null, true);\n if (!isNOU(this.popEle)) {\n this.popObj.hide(this.hide);\n }\n }\n }\n };\n Tab.prototype.getTabHeader = function () {\n if (isNOU(this.element)) {\n return undefined;\n }\n var headers = [].slice.call(this.element.children).filter(function (e) { return e.classList.contains(CLS_HEADER); });\n if (headers.length > 0) {\n return headers[0];\n }\n else {\n var wrap = [].slice.call(this.element.children).filter(function (e) { return !e.classList.contains(CLS_BLA_TEM); })[0];\n if (!wrap) {\n return undefined;\n }\n return [].slice.call(wrap.children).filter(function (e) { return e.classList.contains(CLS_HEADER); })[0];\n }\n };\n Tab.prototype.getEleIndex = function (item) {\n return Array.prototype.indexOf.call(selectAll('.' + CLS_TB_ITEM, this.getTabHeader()), item);\n };\n Tab.prototype.extIndex = function (id) {\n return id.replace(CLS_ITEM + this.tabId + '_', '');\n };\n Tab.prototype.expTemplateContent = function () {\n var _this = this;\n this.templateEle.forEach(function (eleStr) {\n if (!isNOU(_this.element.querySelector(eleStr))) {\n document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n }\n });\n };\n Tab.prototype.templateCompile = function (ele, cnt, index) {\n var tempEle = this.createElement('div');\n this.compileElement(tempEle, cnt, 'content', index);\n if (tempEle.childNodes.length !== 0) {\n ele.appendChild(tempEle);\n }\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n Tab.prototype.compileElement = function (ele, val, prop, index) {\n var templateFn;\n if (typeof val === 'string') {\n val = val.trim();\n if (this.isVue) {\n templateFn = compile(SanitizeHtmlHelper.sanitize(val));\n }\n else {\n ele.innerHTML = SanitizeHtmlHelper.sanitize(val);\n }\n }\n else {\n templateFn = compile(val);\n }\n var templateFUN;\n if (!isNOU(templateFn)) {\n templateFUN = templateFn({}, this, prop);\n }\n if (!isNOU(templateFn) && templateFUN.length > 0) {\n [].slice.call(templateFUN).forEach(function (el) {\n ele.appendChild(el);\n });\n }\n };\n Tab.prototype.headerTextCompile = function (element, text, index) {\n this.compileElement(element, text, 'headerTemplate', index);\n };\n Tab.prototype.getContent = function (ele, cnt, callType, index) {\n var eleStr;\n cnt = isNOU(cnt) ? \"\" : cnt;\n if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\n if (typeof cnt === 'string' && this.enableHtmlSanitizer) {\n cnt = SanitizeHtmlHelper.sanitize(cnt);\n }\n if (cnt[0] === '.' || cnt[0] === '#') {\n if (document.querySelectorAll(cnt).length) {\n var eleVal = document.querySelector(cnt);\n eleStr = eleVal.outerHTML.trim();\n if (callType === 'clone') {\n ele.appendChild(eleVal.cloneNode(true));\n }\n else {\n ele.appendChild(eleVal);\n eleVal.style.display = '';\n }\n }\n else {\n this.templateCompile(ele, cnt, index);\n }\n }\n else {\n this.templateCompile(ele, cnt, index);\n }\n }\n else {\n ele.appendChild(cnt);\n }\n if (!isNOU(eleStr)) {\n if (this.templateEle.indexOf(cnt.toString()) === -1) {\n this.templateEle.push(cnt.toString());\n }\n }\n };\n Tab.prototype.getTrgContent = function (cntEle, no) {\n var ele;\n if (this.element.classList.contains(CLS_NEST)) {\n ele = select('.' + CLS_NEST + '> .' + CLS_CONTENT + ' > #' + CLS_CONTENT + this.tabId + '_' + no, this.element);\n }\n else {\n ele = this.findEle(cntEle.children, CLS_CONTENT + this.tabId + '_' + no);\n }\n return ele;\n };\n Tab.prototype.findEle = function (items, key) {\n var ele;\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === key) {\n ele = items[i];\n break;\n }\n }\n return ele;\n };\n Tab.prototype.isVertical = function () {\n var isVertical = (this.headerPlacement === 'Left' || this.headerPlacement === 'Right') ? true : false;\n this.scrCntClass = (isVertical) ? CLS_VSCRCNT : CLS_HSCRCNT;\n return isVertical;\n };\n Tab.prototype.addVerticalClass = function () {\n if (this.isVertical()) {\n var tbPos = (this.headerPlacement === 'Left') ? CLS_VLEFT : CLS_VRIGHT;\n addClass([this.hdrEle], [CLS_VERTICAL, tbPos]);\n if (!this.element.classList.contains(CLS_NEST)) {\n addClass([this.element], [CLS_VTAB, tbPos]);\n }\n else {\n addClass([this.hdrEle], [CLS_VTAB, tbPos]);\n }\n }\n if (this.headerPlacement === 'Bottom') {\n addClass([this.hdrEle], [CLS_HBOTTOM]);\n }\n };\n Tab.prototype.updatePopAnimationConfig = function () {\n this.show = { name: (this.isVertical() ? 'FadeIn' : 'SlideDown'), duration: 100 };\n this.hide = { name: (this.isVertical() ? 'FadeOut' : 'SlideUp'), duration: 100 };\n };\n Tab.prototype.changeOrientation = function (place) {\n this.setOrientation(place, this.hdrEle);\n var activeTab = this.hdrEle.querySelector('.' + CLS_ACTIVE);\n var isVertical = this.hdrEle.classList.contains(CLS_VERTICAL) ? true : false;\n removeClass([this.element], [CLS_VTAB]);\n removeClass([this.hdrEle], [CLS_VERTICAL, CLS_VLEFT, CLS_VRIGHT]);\n if (isVertical !== this.isVertical()) {\n this.changeToolbarOrientation();\n if (!isNOU(activeTab) && activeTab.classList.contains(CLS_TB_POPUP)) {\n this.popupHandler(activeTab);\n }\n }\n this.addVerticalClass();\n this.setActiveBorder();\n this.focusItem();\n };\n Tab.prototype.focusItem = function () {\n var curActItem = select(' #' + CLS_ITEM + this.tabId + '_' + this.selectedItem, this.hdrEle);\n if (!isNOU(curActItem)) {\n curActItem.firstElementChild.focus();\n }\n };\n Tab.prototype.changeToolbarOrientation = function () {\n this.tbObj.setProperties({ height: (this.isVertical() ? '100%' : 'auto'), width: (this.isVertical() ? 'auto' : '100%') }, true);\n this.tbObj.changeOrientation();\n this.updatePopAnimationConfig();\n };\n Tab.prototype.setOrientation = function (place, ele) {\n var headerPos = Array.prototype.indexOf.call(this.element.children, ele);\n var contentPos = Array.prototype.indexOf.call(this.element.children, this.element.querySelector('.' + CLS_CONTENT));\n if (place === 'Bottom' && (contentPos > headerPos)) {\n this.element.appendChild(ele);\n }\n else {\n removeClass([ele], [CLS_HBOTTOM]);\n this.element.insertBefore(ele, select('.' + CLS_CONTENT, this.element));\n }\n };\n Tab.prototype.setCssClass = function (ele, cls, val) {\n if (cls === '') {\n return;\n }\n var list = cls.split(' ');\n for (var i = 0; i < list.length; i++) {\n if (val) {\n ele.classList.add(list[i]);\n }\n else {\n ele.classList.remove(list[i]);\n }\n }\n };\n Tab.prototype.setContentHeight = function (val) {\n if (this.element.classList.contains(CLS_FILL)) {\n removeClass([this.element], [CLS_FILL]);\n }\n if (isNOU(this.cntEle)) {\n return;\n }\n var hdrEle = this.getTabHeader();\n if (this.heightAdjustMode === 'None') {\n if (this.height === 'auto') {\n return;\n }\n else {\n if (!this.isVertical()) {\n setStyle(this.cntEle, { 'height': (this.element.clientHeight - hdrEle.offsetHeight) + 'px' });\n }\n }\n }\n else if (this.heightAdjustMode === 'Fill') {\n addClass([this.element], [CLS_FILL]);\n setStyle(this.element, { 'height': '100%' });\n this.cntEle.style.height = 'calc(100% - ' + this.hdrEle.offsetHeight + 'px)';\n }\n else if (this.heightAdjustMode === 'Auto') {\n if (this.isTemplate === true) {\n var cnt = selectAll('.' + CLS_CONTENT + ' > .' + CLS_ITEM, this.element);\n for (var i = 0; i < cnt.length; i++) {\n cnt[i].setAttribute('style', 'display:block; visibility: visible');\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(cnt[i]));\n cnt[i].style.removeProperty('display');\n cnt[i].style.removeProperty('visibility');\n }\n }\n else {\n this.cntEle = select('.' + CLS_CONTENT, this.element);\n if (val === true) {\n this.cntEle.appendChild(this.createElement('div', {\n id: (CLS_CONTENT + this.tabId + '_' + 0), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + this.tabId + '_' + 0 }\n }));\n }\n var ele = this.cntEle.children.item(0);\n for (var i = 0; i < this.items.length; i++) {\n this.getContent(ele, this.items[i].content, 'clone', i);\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(ele));\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n }\n if (this.isReact) {\n this.clearTemplate(['content']);\n }\n this.templateEle = [];\n this.getContent(ele, this.items[0].content, 'render', 0);\n if (this.prevIndex !== this.selectedItem) {\n ele.classList.remove(CLS_ACTIVE);\n }\n }\n setStyle(this.cntEle, { 'height': this.maxHeight + 'px' });\n }\n else {\n setStyle(this.cntEle, { 'height': 'auto' });\n }\n };\n Tab.prototype.getHeight = function (ele) {\n var cs = window.getComputedStyle(ele);\n return ele.offsetHeight + parseFloat(cs.getPropertyValue('padding-top')) + parseFloat(cs.getPropertyValue('padding-bottom')) +\n parseFloat(cs.getPropertyValue('margin-top')) + parseFloat(cs.getPropertyValue('margin-bottom'));\n };\n Tab.prototype.setActiveBorder = function () {\n var trgHdrEle = this.getTabHeader();\n var trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, trgHdrEle);\n if (isNOU(trg)) {\n return;\n }\n if (!this.reorderActiveTab) {\n if (trg.classList.contains(CLS_TB_POPUP) && !this.bdrLine.classList.contains(CLS_HIDDEN)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n if (trgHdrEle && !trgHdrEle.classList.contains(CLS_REORDER_ACTIVE_ITEM)) {\n trgHdrEle.classList.add(CLS_REORDER_ACTIVE_ITEM);\n }\n }\n else if (trgHdrEle) {\n trgHdrEle.classList.remove(CLS_REORDER_ACTIVE_ITEM);\n }\n var root = closest(trg, '.' + CLS_TAB);\n if (this.element !== root) {\n return;\n }\n this.tbItems = select('.' + CLS_TB_ITEMS, trgHdrEle);\n var bar = select('.' + CLS_INDICATOR, trgHdrEle);\n var scrollCnt = select('.' + CLS_TB_ITEMS + ' .' + this.scrCntClass, trgHdrEle);\n if (this.isVertical()) {\n setStyle(bar, { 'left': '', 'right': '' });\n var tbHeight = (isNOU(scrollCnt)) ? this.tbItems.offsetHeight : scrollCnt.offsetHeight;\n if (tbHeight !== 0) {\n setStyle(bar, { 'top': trg.offsetTop + 'px', 'height': trg.offsetHeight + 'px' });\n }\n else {\n setStyle(bar, { 'top': 0, 'height': 0 });\n }\n }\n else {\n if (this.overflowMode === 'MultiRow') {\n var top_1 = this.headerPlacement === 'Bottom' ? trg.offsetTop : trg.offsetHeight + trg.offsetTop;\n setStyle(bar, { 'top': top_1 + 'px', 'height': '' });\n }\n else {\n setStyle(bar, { 'top': '', 'height': '' });\n }\n var tbWidth = (isNOU(scrollCnt)) ? this.tbItems.offsetWidth : scrollCnt.offsetWidth;\n if (tbWidth !== 0) {\n setStyle(bar, { 'left': trg.offsetLeft + 'px', 'right': tbWidth - (trg.offsetLeft + trg.offsetWidth) + 'px' });\n }\n else {\n setStyle(bar, { 'left': 'auto', 'right': 'auto' });\n }\n }\n if (!isNOU(this.bdrLine) && !trg.classList.contains(CLS_TB_POPUP)) {\n this.bdrLine.classList.remove(CLS_HIDDEN);\n }\n };\n Tab.prototype.setActive = function (value, skipDataBind, isInteracted) {\n if (skipDataBind === void 0) { skipDataBind = false; }\n if (isInteracted === void 0) { isInteracted = false; }\n this.tbItem = selectAll('.' + CLS_TB_ITEM, this.getTabHeader());\n var trg = this.tbItem[value];\n if (value < 0 || isNaN(value) || this.tbItem.length === 0) {\n return;\n }\n if (value >= 0 && !skipDataBind) {\n this.allowServerDataBinding = false;\n this.setProperties({ selectedItem: value }, true);\n this.allowServerDataBinding = true;\n if (!this.initRender) {\n this.serverDataBind();\n }\n }\n if (trg.classList.contains(CLS_ACTIVE)) {\n this.setActiveBorder();\n return;\n }\n if (!this.isTemplate) {\n attributes(trg.firstElementChild, { 'aria-controls': CLS_CONTENT + this.tabId + '_' + value });\n }\n var id = trg.id;\n this.removeActiveClass();\n trg.classList.add(CLS_ACTIVE);\n trg.firstElementChild.setAttribute('aria-selected', 'true');\n var no = Number(this.extIndex(id));\n if (isNOU(this.prevActiveEle)) {\n this.prevActiveEle = CLS_CONTENT + this.tabId + '_' + no;\n }\n if (this.isTemplate) {\n if (select('.' + CLS_CONTENT, this.element).children.length > 0) {\n var trg_1 = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + this.tabId + '_' + no);\n if (!isNOU(trg_1)) {\n trg_1.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n }\n else {\n this.cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n var item = this.getTrgContent(this.cntEle, this.extIndex(id));\n if (isNOU(item)) {\n this.cntEle.appendChild(this.createElement('div', {\n id: CLS_CONTENT + this.tabId + '_' + this.extIndex(id), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + this.tabId + '_' + this.extIndex(id) }\n }));\n var eleTrg = this.getTrgContent(this.cntEle, this.extIndex(id));\n var itemIndex = Array.prototype.indexOf.call(this.itemIndexArray, id);\n this.getContent(eleTrg, this.items[itemIndex].content, 'render', itemIndex);\n }\n else {\n item.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n this.setActiveBorder();\n this.refreshItemVisibility(trg);\n if (!this.initRender && !skipDataBind) {\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: trg,\n selectedIndex: value,\n selectedContent: select('#' + CLS_CONTENT + this.tabId + '_' + this.selectingID, this.content),\n isSwiped: this.isSwiped,\n isInteracted: isInteracted,\n preventFocus: false\n };\n this.trigger('selected', eventArg, function (selectEventArgs) {\n if (!selectEventArgs.preventFocus) {\n trg.firstElementChild.focus();\n }\n });\n }\n };\n Tab.prototype.setItems = function (items) {\n this.isReplace = true;\n this.tbItems = select('.' + CLS_TB_ITEMS, this.getTabHeader());\n this.tbObj.items = this.parseObject(items, 0);\n this.tbObj.dataBind();\n this.isReplace = false;\n };\n Tab.prototype.setRTL = function (value) {\n this.tbObj.enableRtl = value;\n this.tbObj.dataBind();\n this.setCssClass(this.element, CLS_RTL, value);\n this.refreshActiveBorder();\n };\n Tab.prototype.refreshActiveBorder = function () {\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n this.setActiveBorder();\n };\n Tab.prototype.showPopup = function (config) {\n var tbPop = select('.e-popup.e-toolbar-pop', this.hdrEle);\n if (tbPop.classList.contains('e-popup-close')) {\n var tbPopObj = (tbPop && tbPop.ej2_instances[0]);\n tbPopObj.position.X = (this.headerPlacement === 'Left') ? 'left' : 'right';\n tbPopObj.dataBind();\n tbPopObj.show(config);\n }\n };\n Tab.prototype.bindDraggable = function () {\n var _this = this;\n if (this.allowDragAndDrop) {\n var tabHeader = this.element.querySelector('.' + CLS_HEADER);\n if (tabHeader) {\n var items = Array.prototype.slice.call(tabHeader.querySelectorAll('.' + CLS_TB_ITEM));\n items.forEach(function (element) {\n _this.initializeDrag(element);\n });\n }\n }\n };\n Tab.prototype.wireEvents = function () {\n this.bindDraggable();\n window.addEventListener('resize', this.resizeContext);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'keydown', this.spaceKeyDown, this);\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n this.keyModule = new KeyboardEvents(this.element, { keyAction: this.keyHandler.bind(this), keyConfigs: this.keyConfigs });\n this.tabKeyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyHandler.bind(this),\n keyConfigs: { openPopup: 'shift+f10', tab: 'tab', shiftTab: 'shift+tab' },\n eventName: 'keydown'\n });\n };\n Tab.prototype.unWireEvents = function () {\n if (!isNOU(this.keyModule)) {\n this.keyModule.destroy();\n }\n if (!isNOU(this.tabKeyModule)) {\n this.tabKeyModule.destroy();\n }\n if (!isNOU(this.cntEle) && !isNOU(this.touchModule)) {\n this.touchModule.destroy();\n this.touchModule = null;\n }\n window.removeEventListener('resize', this.resizeContext);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'keydown', this.spaceKeyDown);\n this.element.classList.remove(CLS_RTL);\n this.element.classList.remove(CLS_FOCUS);\n };\n Tab.prototype.clickHandler = function (args) {\n this.element.classList.remove(CLS_FOCUS);\n var trg = args.originalEvent.target;\n var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (trg.classList.contains(CLS_ICON_CLOSE)) {\n this.removeTab(trgIndex);\n }\n else if (this.isVertical() && closest(trg, '.' + CLS_HOR_NAV)) {\n this.showPopup(this.show);\n }\n else {\n this.isPopup = false;\n if (!isNOU(trgParent) && (trgIndex !== this.selectedItem)) {\n this.selectTab(trgIndex, args.originalEvent, true);\n }\n }\n };\n Tab.prototype.swipeHandler = function (e) {\n if (e.velocity < 3 && isNOU(e.originalEvent.changedTouches)) {\n return;\n }\n if (this.isNested) {\n this.element.setAttribute('data-swipe', 'true');\n }\n var nestedTab = this.element.querySelector('[data-swipe=\"true\"]');\n if (nestedTab) {\n nestedTab.removeAttribute('data-swipe');\n return;\n }\n this.isSwiped = true;\n if (e.swipeDirection === 'Right' && this.selectedItem !== 0) {\n for (var k = this.selectedItem - 1; k >= 0; k--) {\n if (!this.tbItem[k].classList.contains(CLS_HIDDEN)) {\n this.selectTab(k, null, true);\n break;\n }\n }\n }\n else if (e.swipeDirection === 'Left' && (this.selectedItem !== selectAll('.' + CLS_TB_ITEM, this.element).length - 1)) {\n for (var i = this.selectedItem + 1; i < this.tbItem.length; i++) {\n if (!this.tbItem[i].classList.contains(CLS_HIDDEN)) {\n this.selectTab(i, null, true);\n break;\n }\n }\n }\n this.isSwiped = false;\n };\n Tab.prototype.spaceKeyDown = function (e) {\n if ((e.keyCode === 32 && e.which === 32) || (e.keyCode === 35 && e.which === 35)) {\n var clstHead = closest(e.target, '.' + CLS_HEADER);\n if (!isNOU(clstHead)) {\n e.preventDefault();\n }\n }\n };\n Tab.prototype.keyHandler = function (e) {\n if (this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n this.element.classList.add(CLS_FOCUS);\n var trg = e.target;\n var tabHeader = this.getTabHeader();\n var actEle = select('.' + CLS_ACTIVE, tabHeader);\n this.popEle = select('.' + CLS_TB_POP, tabHeader);\n if (!isNOU(this.popEle)) {\n this.popObj = this.popEle.ej2_instances[0];\n }\n var item = closest(document.activeElement, '.' + CLS_TB_ITEM);\n var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n switch (e.action) {\n case 'space':\n case 'enter':\n if (trg.parentElement.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (e.action === 'enter' && trg.classList.contains('e-hor-nav')) {\n this.showPopup(this.show);\n break;\n }\n this.keyPressed(trg);\n break;\n case 'tab':\n case 'shiftTab':\n if (trg.classList.contains(CLS_WRAP)\n && closest(trg, '.' + CLS_TB_ITEM).classList.contains(CLS_ACTIVE) === false) {\n trg.setAttribute('tabindex', trg.getAttribute('data-tabindex'));\n }\n if (this.popObj && isVisible(this.popObj.element)) {\n this.popObj.hide(this.hide);\n }\n if (!isNOU(actEle) && actEle.children.item(0).getAttribute('tabindex') === '-1') {\n actEle.children.item(0).setAttribute('tabindex', '0');\n }\n break;\n case 'moveLeft':\n case 'moveRight':\n if (!isNOU(item)) {\n this.refreshItemVisibility(item);\n }\n break;\n case 'openPopup':\n e.preventDefault();\n if (!isNOU(this.popEle) && this.popEle.classList.contains(CLS_POPUP_CLOSE)) {\n this.popObj.show(this.show);\n }\n break;\n case 'delete':\n if (this.showCloseButton === true && !isNOU(trgParent)) {\n var nxtSib = trgParent.nextSibling;\n if (!isNOU(nxtSib) && nxtSib.classList.contains(CLS_TB_ITEM)) {\n nxtSib.firstElementChild.focus();\n }\n this.removeTab(this.getEleIndex(trgParent));\n }\n this.setActiveBorder();\n break;\n }\n };\n Tab.prototype.refreshItemVisibility = function (target) {\n var scrCnt = select('.' + this.scrCntClass, this.tbItems);\n if (!this.isVertical() && !isNOU(scrCnt)) {\n var scrBar = select('.e-hscroll-bar', this.tbItems);\n scrBar.removeAttribute('tabindex');\n var scrStart = scrBar.scrollLeft;\n var scrEnd = scrStart + scrBar.offsetWidth;\n var eleStart = target.offsetLeft;\n var eleWidth = target.offsetWidth;\n var eleEnd = target.offsetLeft + target.offsetWidth;\n if ((scrStart < eleStart) && (scrEnd < eleEnd)) {\n var eleViewRange = scrEnd - eleStart;\n scrBar.scrollLeft = scrStart + (eleWidth - eleViewRange);\n }\n else {\n if ((scrStart > eleStart) && (scrEnd > eleEnd)) {\n var eleViewRange = eleEnd - scrStart;\n scrBar.scrollLeft = scrStart - (eleWidth - eleViewRange);\n }\n }\n }\n else {\n return;\n }\n };\n Tab.prototype.getIndexFromEle = function (id) {\n return parseInt(id.substring(id.lastIndexOf('_') + 1), 10);\n };\n Tab.prototype.hoverHandler = function (e) {\n var trg = e.target;\n if (!isNOU(trg.classList) && trg.classList.contains(CLS_ICON_CLOSE)) {\n trg.setAttribute('title', new L10n('tab', { closeButtonTitle: this.title }, this.locale).getConstant('closeButtonTitle'));\n }\n };\n Tab.prototype.evalOnPropertyChangeItems = function (newProp, oldProp) {\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProp = Object.keys(newProp.items);\n for (var i = 0; i < changedProp.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var properties = Object.keys(newProp.items[index]);\n for (var j = 0; j < properties.length; j++) {\n var oldVal = Object(oldProp.items[index])[properties[j]];\n var newVal = Object(newProp.items[index])[properties[j]];\n var hdr = this.element.querySelectorAll('.' + CLS_TB_ITEM)[index];\n var itemIndex = void 0;\n if (hdr && !isNOU(hdr.id) && hdr.id !== '') {\n itemIndex = this.getIndexFromEle(hdr.id);\n }\n else {\n itemIndex = index;\n }\n var hdrItem = select('.' + CLS_TB_ITEMS + ' #' + CLS_ITEM + this.tabId + '_' + itemIndex, this.element);\n var cntItem = select('.' + CLS_CONTENT + ' #' + CLS_CONTENT + this.tabId + '_' + itemIndex, this.element);\n if (properties[j] === 'header' || properties[j] === 'headerTemplate') {\n var icon = (isNOU(this.items[index].header) ||\n isNOU(this.items[index].header.iconCss)) ? '' : this.items[index].header.iconCss;\n var textVal = this.items[index].headerTemplate || this.items[index].header.text;\n if (properties[j] === 'headerTemplate') {\n this.clearTabTemplate(hdrItem, properties[j], CLS_TB_ITEM);\n }\n if ((textVal === '') && (icon === '')) {\n this.removeTab(index);\n }\n else {\n this.tbId = hdr.id;\n var arr = [];\n arr.push(this.items[index]);\n this.items.splice(index, 1);\n this.itemIndexArray.splice(index, 1);\n this.tbObj.items.splice(index, 1);\n var isHiddenEle = hdrItem.classList.contains(CLS_HIDDEN);\n detach(hdrItem);\n this.isReplace = true;\n this.addTab(arr, index);\n if (isHiddenEle) {\n this.hideTab(index);\n }\n this.isReplace = false;\n }\n }\n if (properties[j] === 'content' && !isNOU(cntItem)) {\n var strVal = typeof newVal === 'string' || isNOU(newVal.innerHTML);\n if (strVal && (newVal[0] === '.' || newVal[0] === '#') && newVal.length) {\n var eleVal = document.querySelector(newVal);\n cntItem.appendChild(eleVal);\n eleVal.style.display = '';\n }\n else if (newVal === '' && oldVal[0] === '#') {\n document.body.appendChild(this.element.querySelector(oldVal)).style.display = 'none';\n cntItem.innerHTML = newVal;\n }\n else if (this.isAngular || this.isReact) {\n this.clearTabTemplate(cntItem, properties[j], CLS_ITEM);\n cntItem.innerHTML = '';\n this.templateCompile(cntItem, newVal, index);\n }\n else if (typeof newVal !== 'function') {\n cntItem.innerHTML = newVal;\n }\n }\n if (properties[j] === 'cssClass') {\n if (!isNOU(hdrItem)) {\n hdrItem.classList.remove(oldVal);\n hdrItem.classList.add(newVal);\n }\n if (!isNOU(cntItem)) {\n cntItem.classList.remove(oldVal);\n cntItem.classList.add(newVal);\n }\n }\n if (properties[j] === 'disabled') {\n this.enableTab(index, ((newVal === true) ? false : true));\n }\n if (properties[j] === 'visible') {\n this.hideTab(index, ((newVal === true) ? false : true));\n }\n }\n }\n }\n else {\n this.lastIndex = 0;\n if (isNOU(this.tbObj)) {\n this.reRenderItems();\n }\n else {\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n this.setItems(newProp.items);\n if (this.templateEle.length > 0) {\n this.expTemplateContent();\n }\n this.templateEle = [];\n var selectElement = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n while (selectElement.firstElementChild) {\n detach(selectElement.firstElementChild);\n }\n this.select(this.selectedItem);\n this.draggableItems = [];\n this.bindDraggable();\n }\n }\n };\n Tab.prototype.clearTabTemplate = function (templateEle, templateName, className) {\n if (!this.clearTemplates) {\n return;\n }\n if (this.registeredTemplate && this.registeredTemplate[templateName]) {\n var registeredTemplates = this.registeredTemplate;\n for (var index = 0; index < registeredTemplates[templateName].length; index++) {\n var registeredItem = registeredTemplates[templateName][index].rootNodes[0];\n var closestItem = closest(registeredItem, '.' + className);\n if (!isNullOrUndefined(closestItem) && closestItem === templateEle) {\n this.clearTemplate([templateName], [registeredTemplates[templateName][index]]);\n break;\n }\n }\n }\n else if (this.portals && this.portals.length > 0) {\n var portals = this.portals;\n for (var index = 0; index < portals.length; index++) {\n var portalItem = portals[index];\n var closestItem = closest(portalItem.containerInfo, '.' + className);\n if (!isNullOrUndefined(closestItem) && closestItem === templateEle) {\n this.clearTemplate([templateName], index);\n break;\n }\n }\n }\n };\n Tab.prototype.initializeDrag = function (target) {\n var _this = this;\n var dragObj = new Draggable(target, {\n dragArea: this.dragArea,\n dragTarget: '.' + CLS_TB_ITEM,\n clone: true,\n helper: this.helper.bind(this),\n dragStart: this.itemDragStart.bind(this),\n drag: function (e) {\n var dragIndex = _this.getEleIndex(_this.dragItem);\n var dropIndex;\n var dropItem;\n var dragArgs = {\n draggedItem: _this.dragItem,\n event: e.event,\n target: e.target,\n droppedItem: e.target.closest('.' + CLS_TB_ITEM),\n clonedElement: _this.cloneElement,\n index: dragIndex\n };\n if (!isNOU(e.target.closest('.' + CLS_TAB)) && !e.target.closest('.' + CLS_TAB).isEqualNode(_this.element) &&\n _this.dragArea !== '.' + CLS_HEADER) {\n _this.trigger('dragging', dragArgs);\n }\n else {\n if (!(e.target.closest(_this.dragArea)) && _this.overflowMode !== 'Popup') {\n document.body.style.cursor = 'not-allowed';\n addClass([_this.cloneElement], CLS_HIDDEN);\n if (_this.dragItem.classList.contains(CLS_HIDDEN)) {\n removeClass([_this.dragItem], CLS_HIDDEN);\n }\n _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'visible';\n }\n else {\n document.body.style.cursor = '';\n _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'hidden';\n if (_this.cloneElement.classList.contains(CLS_HIDDEN)) {\n removeClass([_this.cloneElement], CLS_HIDDEN);\n }\n }\n if (_this.overflowMode === 'Scrollable' && !isNOU(_this.element.querySelector('.e-hscroll'))) {\n var scrollRightNavEle = _this.element.querySelector('.e-scroll-right-nav');\n var scrollLeftNavEle = _this.element.querySelector('.e-scroll-left-nav');\n var hscrollBar = _this.element.querySelector('.e-hscroll-bar');\n if (!isNOU(scrollRightNavEle) && Math.abs((scrollRightNavEle.offsetWidth / 2) +\n scrollRightNavEle.offsetLeft) > _this.cloneElement.offsetLeft + _this.cloneElement.offsetWidth) {\n hscrollBar.scrollLeft -= 10;\n }\n if (!isNOU(scrollLeftNavEle) && Math.abs((scrollLeftNavEle.offsetLeft + scrollLeftNavEle.offsetWidth) -\n _this.cloneElement.offsetLeft) > (scrollLeftNavEle.offsetWidth / 2)) {\n hscrollBar.scrollLeft += 10;\n }\n }\n _this.cloneElement.style.pointerEvents = 'none';\n dropItem = closest(e.target, '.' + CLS_TB_ITEM + '.e-draggable');\n var scrollContentWidth = 0;\n if (_this.overflowMode === 'Scrollable' && !isNOU(_this.element.querySelector('.e-hscroll'))) {\n scrollContentWidth = _this.element.querySelector('.e-hscroll-content').offsetWidth;\n }\n if (dropItem != null && !dropItem.isSameNode(_this.dragItem) &&\n dropItem.closest('.' + CLS_TAB).isSameNode(_this.dragItem.closest('.' + CLS_TAB))) {\n dropIndex = _this.getEleIndex(dropItem);\n if (dropIndex < dragIndex &&\n (Math.abs((dropItem.offsetLeft + dropItem.offsetWidth) -\n _this.cloneElement.offsetLeft) > (dropItem.offsetWidth / 2))) {\n _this.dragAction(dropItem, dragIndex, dropIndex);\n }\n if (dropIndex > dragIndex &&\n (Math.abs(dropItem.offsetWidth / 2) + dropItem.offsetLeft -\n scrollContentWidth) < _this.cloneElement.offsetLeft + _this.cloneElement.offsetWidth) {\n _this.dragAction(dropItem, dragIndex, dropIndex);\n }\n }\n _this.droppedIndex = _this.getEleIndex(_this.dragItem);\n _this.trigger('dragging', dragArgs);\n }\n },\n dragStop: this.itemDragStop.bind(this)\n });\n this.draggableItems.push(dragObj);\n };\n Tab.prototype.helper = function (e) {\n this.cloneElement = this.createElement('div');\n if (e.element) {\n this.cloneElement = (e.element.cloneNode(true));\n addClass([this.cloneElement], 'e-tab-clone-element');\n if (this.element.querySelector('.' + CLS_HEADER).classList.contains(CLS_CLOSE_SHOW)) {\n addClass([this.cloneElement], CLS_CLOSE_SHOW);\n }\n removeClass([this.cloneElement.querySelector('.' + CLS_WRAP)], 'e-ripple');\n if (!isNOU(this.cloneElement.querySelector('.e-ripple-element'))) {\n remove(this.cloneElement.querySelector('.e-ripple-element'));\n }\n document.body.appendChild(this.cloneElement);\n }\n return this.cloneElement;\n };\n Tab.prototype.itemDragStart = function (e) {\n var _this = this;\n this.draggingItems = this.items.map(function (x) { return x; });\n this.dragItem = e.element;\n var dragArgs = {\n draggedItem: e.element,\n event: e.event,\n target: e.target,\n droppedItem: null,\n index: this.getEleIndex(this.dragItem),\n clonedElement: this.cloneElement,\n cancel: false\n };\n this.trigger('onDragStart', dragArgs, function (tabitemDragArgs) {\n if (tabitemDragArgs.cancel) {\n var dragObj = e.element.ej2_instances[0];\n if (!isNullOrUndefined(dragObj)) {\n dragObj.intDestroy(e.event);\n }\n detach(_this.cloneElement);\n }\n else {\n _this.removeActiveClass();\n addClass([_this.tbItems.querySelector('.' + CLS_INDICATOR)], CLS_HIDDEN);\n _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'hidden';\n }\n });\n };\n Tab.prototype.dragAction = function (dropItem, dragsIndex, dropIndex) {\n if (this.items.length > 0) {\n var item = this.draggingItems[dragsIndex];\n this.draggingItems.splice(dragsIndex, 1);\n this.draggingItems.splice(dropIndex, 0, item);\n }\n if (this.overflowMode === 'MultiRow') {\n dropItem.parentNode.insertBefore(this.dragItem, dropItem.nextElementSibling);\n }\n if (dragsIndex > dropIndex) {\n if (!(this.dragItem.parentElement).isSameNode(dropItem.parentElement)) {\n if (this.overflowMode === 'Extended') {\n if (dropItem.isSameNode(dropItem.parentElement.lastChild)) {\n var popupContainer = this.dragItem.parentNode;\n dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n popupContainer.insertBefore(dropItem.parentElement.lastChild, popupContainer.childNodes[0]);\n }\n else {\n this.dragItem.parentNode.insertBefore((dropItem.parentElement.lastChild), this.dragItem.parentElement.childNodes[0]);\n dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n }\n }\n else {\n var lastEle = (dropItem.parentElement).lastChild;\n if (dropItem.isSameNode(lastEle)) {\n var popupContainer = this.dragItem.parentNode;\n dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n popupContainer.insertBefore(lastEle, popupContainer.childNodes[0]);\n }\n else {\n this.dragItem.parentNode.insertBefore((dropItem.parentElement).lastChild, this.dragItem.parentElement.childNodes[0]);\n dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n }\n }\n }\n else {\n this.dragItem.parentNode.insertBefore(this.dragItem, dropItem);\n }\n }\n if (dragsIndex < dropIndex) {\n if (!(this.dragItem.parentElement).isSameNode(dropItem.parentElement)) {\n if (this.overflowMode === 'Extended') {\n this.dragItem.parentElement.appendChild(dropItem.parentElement.firstElementChild);\n dropItem.parentNode.insertBefore(this.dragItem, dropItem.nextSibling);\n }\n else {\n this.dragItem.parentNode.insertBefore((dropItem.parentElement).lastChild, this.dragItem.parentElement.childNodes[0]);\n dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n }\n }\n else {\n this.dragItem.parentNode.insertBefore(this.dragItem, dropItem.nextElementSibling);\n }\n }\n };\n Tab.prototype.itemDragStop = function (e) {\n var _this = this;\n detach(this.cloneElement);\n this.cloneElement = null;\n this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'visible';\n document.body.style.cursor = '';\n var dragStopArgs = {\n draggedItem: this.dragItem,\n event: e.event,\n target: e.target,\n droppedItem: this.tbItem[this.droppedIndex],\n clonedElement: null,\n index: this.droppedIndex,\n cancel: false\n };\n this.trigger('dragged', dragStopArgs, function (tabItemDropArgs) {\n if (tabItemDropArgs.cancel) {\n _this.refresh();\n }\n else {\n if (_this.items.length > 0 && _this.draggingItems.length > 0) {\n _this.items = _this.draggingItems;\n _this.selectedItem = _this.droppedIndex;\n _this.refresh();\n }\n else {\n _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = '';\n removeClass([_this.tbItems.querySelector('.' + CLS_INDICATOR)], CLS_HIDDEN);\n _this.selectTab(_this.droppedIndex, null, true);\n }\n }\n });\n this.dragItem = null;\n };\n /**\n * Enables or disables the specified Tab item. On passing value as `false`, the item will be disabled.\n *\n * @param {number} index - Index value of target Tab item.\n * @param {boolean} value - Boolean value that determines whether the command should be enabled or disabled.\n * By default, isEnable is true.\n * @returns {void}.\n */\n Tab.prototype.enableTab = function (index, value) {\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(tbItems)) {\n return;\n }\n if (value === true) {\n tbItems.classList.remove(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstElementChild.setAttribute('tabindex', tbItems.firstElementChild.getAttribute('data-tabindex'));\n }\n else {\n tbItems.classList.add(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstElementChild.removeAttribute('tabindex');\n if (tbItems.classList.contains(CLS_ACTIVE)) {\n this.select(index + 1);\n }\n }\n if (!isNOU(this.items[index])) {\n this.items[index].disabled = !value;\n this.dataBind();\n }\n tbItems.firstElementChild.setAttribute('aria-disabled', (value === true) ? 'false' : 'true');\n };\n /**\n * Adds new items to the Tab that accepts an array as Tab items.\n *\n * @param {TabItemModel[]} items - An array of item that is added to the Tab.\n * @param {number} index - Number value that determines where the items to be added. By default, index is 0.\n * @returns {void}.\n */\n Tab.prototype.addTab = function (items, index) {\n var _this = this;\n var addArgs = { addedItems: items, cancel: false };\n if (!this.isReplace) {\n this.trigger('adding', addArgs, function (tabAddingArgs) {\n if (!tabAddingArgs.cancel) {\n _this.addingTabContent(items, index);\n }\n });\n }\n else {\n this.addingTabContent(items, index);\n }\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n Tab.prototype.addingTabContent = function (items, index) {\n var _this = this;\n var lastEleIndex = 0;\n this.hdrEle = select('.' + CLS_HEADER, this.element);\n if (isNOU(this.hdrEle)) {\n this.items = items;\n this.reRenderItems();\n this.bindDraggable();\n }\n else {\n var itemsCount = selectAll('.e-tab-header .' + CLS_TB_ITEM, this.element).length;\n if (itemsCount !== 0) {\n lastEleIndex = this.lastIndex + 1;\n }\n if (isNOU(index)) {\n index = itemsCount - 1;\n }\n if (itemsCount < index || index < 0 || isNaN(index)) {\n return;\n }\n if (itemsCount === 0 && !isNOU(this.hdrEle)) {\n this.hdrEle.style.display = '';\n }\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n this.tbItems = select('.' + CLS_TB_ITEMS, this.getTabHeader());\n this.isAdd = true;\n var tabItems_2 = this.parseObject(items, index);\n this.isAdd = false;\n var i_1 = 0;\n var textValue_1;\n items.forEach(function (item, place) {\n textValue_1 = item.headerTemplate || item.header.text;\n if (!(isNOU(item.headerTemplate || item.header) || isNOU(textValue_1) ||\n (textValue_1.length === 0) && !isNOU(item.header) && isNOU(item.header.iconCss))) {\n if (tabItems_2[place]) {\n if (isNOU(item.id)) {\n item.id = CLS_ITEM + _this.tabId + '_' + TABITEMPREFIX + (lastEleIndex + place).toString();\n }\n tabItems_2[place].htmlAttributes['data-id'] = item.id;\n }\n _this.items.splice((index + i_1), 0, item);\n i_1++;\n }\n if (_this.isTemplate && !isNOU(item.header) && !isNOU(item.header.text)) {\n var no = lastEleIndex + place;\n var ele = _this.createElement('div', {\n id: CLS_CONTENT + _this.tabId + '_' + no, className: CLS_ITEM,\n attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + no }\n });\n _this.cntEle.insertBefore(ele, _this.cntEle.children[(index + place)]);\n var eleTrg = _this.getTrgContent(_this.cntEle, no.toString());\n _this.getContent(eleTrg, item.content, 'render', index);\n }\n });\n this.tbObj.addItems(tabItems_2, index);\n if (!this.isReplace) {\n this.trigger('added', { addedItems: items });\n }\n if (this.selectedItem === index) {\n this.select(index);\n }\n else {\n this.setActiveBorder();\n this.tbItem = selectAll('.' + CLS_TB_ITEM, this.getTabHeader());\n }\n this.bindDraggable();\n }\n };\n /**\n * Removes the items in the Tab from the specified index.\n *\n * @param {number} index - Index of target item that is going to be removed.\n * @returns {void}.\n */\n Tab.prototype.removeTab = function (index) {\n var _this = this;\n var trg = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(trg)) {\n return;\n }\n var removeArgs = { removedItem: trg, removedIndex: index, cancel: false };\n this.trigger('removing', removeArgs, function (tabRemovingArgs) {\n if (!tabRemovingArgs.cancel) {\n var header = select('#' + CLS_ITEM + _this.tabId + '_' + _this.extIndex(trg.id), select('.' + CLS_TB_ITEMS, _this.element));\n if (!isNOU(header)) {\n _this.clearTabTemplate(header, 'headerTemplate', CLS_TB_ITEM);\n }\n _this.tbObj.removeItems(index);\n if (_this.allowDragAndDrop && (index !== Array.prototype.indexOf.call(_this.itemIndexArray, trg.id))) {\n index = Array.prototype.indexOf.call(_this.itemIndexArray, trg.id);\n }\n var targetEleIndex = _this.itemIndexArray.indexOf(trg.id);\n _this.items.splice(targetEleIndex, 1);\n _this.itemIndexArray.splice(targetEleIndex, 1);\n _this.refreshActiveBorder();\n var cntTrg = select('#' + CLS_CONTENT + _this.tabId + '_' + _this.extIndex(trg.id), select('.' + CLS_CONTENT, _this.element));\n if (!isNOU(cntTrg)) {\n _this.clearTabTemplate(cntTrg, 'content', CLS_ITEM);\n detach(cntTrg);\n }\n _this.trigger('removed', tabRemovingArgs);\n if (_this.draggableItems && _this.draggableItems.length > 0) {\n _this.draggableItems[index].destroy();\n _this.draggableItems[index] = null;\n _this.draggableItems.splice(index, 1);\n }\n if (trg.classList.contains(CLS_ACTIVE)) {\n index = (index > selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', _this.element).length - 1) ? index - 1 : index;\n _this.enableAnimation = false;\n _this.selectedItem = index;\n _this.select(index);\n }\n else if (index !== _this.selectedItem) {\n if (index < _this.selectedItem) {\n index = _this.itemIndexArray.indexOf(_this.tbItem[_this.selectedItem].id);\n _this.setProperties({ selectedItem: index > -1 ? index : _this.selectedItem }, true);\n _this.prevIndex = _this.selectedItem;\n }\n _this.tbItem = selectAll('.' + CLS_TB_ITEM, _this.getTabHeader());\n }\n if (selectAll('.' + CLS_TB_ITEM, _this.element).length === 0) {\n _this.hdrEle.style.display = 'none';\n }\n _this.enableAnimation = true;\n }\n });\n };\n /**\n * Shows or hides the Tab that is in the specified index.\n *\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (false) or show (true). By default, value is true.\n * @returns {void}.\n */\n Tab.prototype.hideTab = function (index, value) {\n var items;\n var item = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(item)) {\n return;\n }\n if (isNOU(value)) {\n value = true;\n }\n this.bdrLine.classList.add(CLS_HIDDEN);\n if (value === true) {\n item.classList.add(CLS_HIDDEN);\n items = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_HIDDEN + ')', this.tbItems);\n if (items.length !== 0 && item.classList.contains(CLS_ACTIVE)) {\n if (index !== 0) {\n for (var i = index - 1; i >= 0; i--) {\n if (!this.tbItem[i].classList.contains(CLS_HIDDEN)) {\n this.select(i);\n break;\n }\n else if (i === 0) {\n for (var k = index + 1; k < this.tbItem.length; k++) {\n if (!this.tbItem[k].classList.contains(CLS_HIDDEN)) {\n this.select(k);\n break;\n }\n }\n }\n }\n }\n else {\n for (var k = index + 1; k < this.tbItem.length; k++) {\n if (!this.tbItem[k].classList.contains(CLS_HIDDEN)) {\n this.select(k);\n break;\n }\n }\n }\n }\n else if (items.length === 0) {\n this.element.classList.add(CLS_HIDDEN);\n }\n }\n else {\n this.element.classList.remove(CLS_HIDDEN);\n items = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_HIDDEN + ')', this.tbItems);\n item.classList.remove(CLS_HIDDEN);\n if (items.length === 0) {\n this.select(index);\n }\n }\n this.setActiveBorder();\n if (!isNullOrUndefined(item.firstElementChild)) {\n item.firstElementChild.setAttribute('aria-hidden', '' + value);\n }\n if (this.overflowMode === 'Popup' && this.tbObj) {\n this.tbObj.refreshOverflow();\n }\n };\n Tab.prototype.selectTab = function (args, event, isInteracted) {\n if (event === void 0) { event = null; }\n if (isInteracted === void 0) { isInteracted = false; }\n this.isInteracted = isInteracted;\n this.select(args, event);\n };\n /**\n * Specifies the index or HTMLElement to select an item from the Tab.\n *\n * @param {number | HTMLElement} args - Index or DOM element is used for selecting an item from the Tab.\n * @param {Event} event - An event which takes place in DOM.\n * @returns {void}\n */\n Tab.prototype.select = function (args, event) {\n var _this = this;\n var tabHeader = this.getTabHeader();\n this.tbItems = select('.' + CLS_TB_ITEMS, tabHeader);\n this.tbItem = selectAll('.' + CLS_TB_ITEM, tabHeader);\n this.content = select('.' + CLS_CONTENT, this.element);\n this.prevItem = this.tbItem[this.prevIndex];\n if (isNOU(this.selectedItem) || (this.selectedItem < 0) || (this.tbItem.length <= this.selectedItem) || isNaN(this.selectedItem)) {\n this.selectedItem = 0;\n }\n else {\n this.selectedID = this.extIndex(this.tbItem[this.selectedItem].id);\n }\n var trg = this.tbItem[args];\n if (isNOU(trg)) {\n this.selectedID = '0';\n }\n else {\n this.selectingID = this.extIndex(trg.id);\n }\n if (!isNOU(this.prevItem) && !this.prevItem.classList.contains(CLS_DISABLE)) {\n this.prevItem.children.item(0).setAttribute('tabindex', this.prevItem.firstElementChild.getAttribute('tabindex'));\n }\n var eventArg = {\n event: event,\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: this.tbItem[this.selectedItem],\n selectedIndex: this.selectedItem,\n selectedContent: !isNOU(this.content) ?\n select('#' + CLS_CONTENT + this.tabId + '_' + this.selectedID, this.content) : null,\n selectingItem: trg,\n selectingIndex: args,\n selectingContent: !isNOU(this.content) ?\n select('#' + CLS_CONTENT + this.tabId + '_' + this.selectingID, this.content) : null,\n isSwiped: this.isSwiped,\n isInteracted: this.isInteracted,\n cancel: false\n };\n if (!this.initRender) {\n this.trigger('selecting', eventArg, function (selectArgs) {\n if (!selectArgs.cancel) {\n _this.selectingContent(args, _this.isInteracted);\n }\n });\n }\n else {\n this.selectingContent(args, this.isInteracted);\n }\n this.isInteracted = false;\n };\n Tab.prototype.selectingContent = function (args, isInteracted) {\n if (typeof args === 'number') {\n if (!isNOU(this.tbItem[args]) && (this.tbItem[args].classList.contains(CLS_DISABLE) ||\n this.tbItem[args].classList.contains(CLS_HIDDEN))) {\n for (var i = args + 1; i < this.items.length; i++) {\n if (this.items[i].disabled === false && this.items[i].visible === true) {\n args = i;\n break;\n }\n else {\n args = 0;\n }\n }\n }\n if (this.tbItem.length > args && args >= 0 && !isNaN(args)) {\n this.prevIndex = this.selectedItem;\n this.prevItem = this.tbItem[this.prevIndex];\n if (this.tbItem[args].classList.contains(CLS_TB_POPUP) && this.reorderActiveTab) {\n this.setActive(this.popupHandler(this.tbItem[args]), null, isInteracted);\n if ((!isNOU(this.items) && this.items.length > 0) && this.allowDragAndDrop) {\n this.tbItem = selectAll('.' + CLS_TB_ITEMS + ' .' + CLS_TB_ITEM, this.hdrEle);\n var item = this.items[args];\n this.items.splice(args, 1);\n this.items.splice(this.tbItem.length - 1, 0, item);\n var itemId = this.itemIndexArray[args];\n this.itemIndexArray.splice(args, 1);\n this.itemIndexArray.splice(this.tbItem.length - 1, 0, itemId);\n }\n }\n else {\n this.setActive(args, null, isInteracted);\n }\n }\n else {\n this.setActive(0, null, isInteracted);\n }\n }\n else if (args instanceof (HTMLElement)) {\n this.setActive(this.getEleIndex(args), null, isInteracted);\n }\n };\n /**\n * Gets the item index from the Tab.\n *\n * @param {string} tabItemId - Item ID is used for getting index from the Tab.\n * @returns {number} - It returns item index.\n */\n Tab.prototype.getItemIndex = function (tabItemId) {\n var tabIndex;\n for (var i = 0; i < this.tbItem.length; i++) {\n var value = this.tbItem[i].getAttribute('data-id');\n if (tabItemId === value) {\n tabIndex = i;\n break;\n }\n }\n return tabIndex;\n };\n /**\n * Specifies the value to disable/enable the Tab component.\n * When set to `true`, the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, Tab will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n Tab.prototype.disable = function (value) {\n this.setCssClass(this.element, CLS_DISABLE, value);\n this.element.setAttribute('aria-disabled', '' + value);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - It returns the persisted state.\n */\n Tab.prototype.getPersistData = function () {\n return this.addOnPersist(['selectedItem', 'actEleId']);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - It returns the current module name.\n * @private\n */\n Tab.prototype.getModuleName = function () {\n return 'tab';\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n *\n * @param {TabModel} newProp - It contains the new value of data.\n * @param {TabModel} oldProp - It contains the old value of data.\n * @returns {void}\n * @private\n */\n Tab.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyle(this.element, { width: formatUnit(newProp.width) });\n break;\n case 'height':\n setStyle(this.element, { height: formatUnit(newProp.height) });\n this.setContentHeight(false);\n break;\n case 'cssClass':\n var headerEle = this.element.querySelector('.' + CLS_HEADER);\n if (oldProp.cssClass !== '' && !isNullOrUndefined(oldProp.cssClass)) {\n this.setCssClass(this.element, oldProp.cssClass, false);\n this.setCssClass(this.element, newProp.cssClass, true);\n if (!isNullOrUndefined(headerEle)) {\n this.setCssClass(headerEle, oldProp.cssClass, false);\n this.setCssClass(headerEle, newProp.cssClass, true);\n }\n }\n else {\n this.setCssClass(this.element, newProp.cssClass, true);\n if (!isNullOrUndefined(headerEle)) {\n this.setCssClass(headerEle, newProp.cssClass, true);\n }\n }\n break;\n case 'items':\n this.evalOnPropertyChangeItems(newProp, oldProp);\n break;\n case 'showCloseButton':\n this.setCloseButton(newProp.showCloseButton);\n break;\n case 'reorderActiveTab':\n this.refreshActiveTabBorder();\n break;\n case 'selectedItem':\n this.selectedItem = oldProp.selectedItem;\n this.select(newProp.selectedItem);\n break;\n case 'headerPlacement':\n this.changeOrientation(newProp.headerPlacement);\n break;\n case 'enableRtl':\n this.setRTL(newProp.enableRtl);\n break;\n case 'overflowMode':\n this.tbObj.overflowMode = newProp.overflowMode;\n this.tbObj.dataBind();\n this.refreshActiveTabBorder();\n break;\n case 'heightAdjustMode':\n this.setContentHeight(false);\n this.select(this.selectedItem);\n break;\n case 'scrollStep':\n if (this.tbObj) {\n this.tbObj.scrollStep = this.scrollStep;\n }\n break;\n case 'allowDragAndDrop':\n this.bindDraggable();\n break;\n case 'dragArea':\n if (this.allowDragAndDrop) {\n this.draggableItems.forEach(function (item) {\n item.dragArea = _this.dragArea;\n });\n this.refresh();\n }\n break;\n }\n }\n };\n /**\n * To refresh the active tab contents.\n *\n * @returns {void}\n */\n Tab.prototype.refreshActiveTab = function () {\n if (this.isReact && this.isTemplate) {\n this.clearTemplate();\n }\n if (!this.isTemplate) {\n if (this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE)) {\n detach(this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE).children[0]);\n detach(this.element.querySelector('.' + CLS_CONTENT).querySelector('.' + CLS_ACTIVE).children[0]);\n var item = this.items[this.selectedItem];\n var pos = (isNOU(item.header) || isNOU(item.header.iconPosition)) ? '' : item.header.iconPosition;\n var css = (isNOU(item.header) || isNOU(item.header.iconCss)) ? '' : item.header.iconCss;\n var text = item.headerTemplate || item.header.text;\n var txtWrap = this.createElement('div', { className: CLS_TEXT, attrs: { 'role': 'presentation' } });\n if (!isNOU(text.tagName)) {\n txtWrap.appendChild(text);\n }\n else {\n this.headerTextCompile(txtWrap, text, this.selectedItem);\n }\n var tEle = void 0;\n var icon = this.createElement('span', {\n className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n });\n var tConts = this.createElement('div', { className: CLS_TEXT_WRAP });\n tConts.appendChild(txtWrap);\n if ((text !== '' && text !== undefined) && css !== '') {\n if ((pos === 'left' || pos === 'top')) {\n tConts.insertBefore(icon, tConts.firstElementChild);\n }\n else {\n tConts.appendChild(icon);\n }\n tEle = txtWrap;\n this.isIconAlone = false;\n }\n else {\n tEle = ((css === '') ? txtWrap : icon);\n if (tEle === icon) {\n detach(txtWrap);\n tConts.appendChild(icon);\n this.isIconAlone = true;\n }\n }\n var tabIndex = isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString();\n var wrapAtt = (item.disabled) ? {} : { tabIndex: tabIndex, 'data-tabindex': tabIndex, role: 'tab', 'aria-selected': 'true', 'aria-disabled': 'false' };\n tConts.appendChild(this.btnCls.cloneNode(true));\n var wraper = this.createElement('div', { className: CLS_WRAP, attrs: wrapAtt });\n wraper.appendChild(tConts);\n if (pos === 'top' || pos === 'bottom') {\n this.element.classList.add('e-vertical-icon');\n }\n this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE).appendChild(wraper);\n var crElem = this.createElement('div');\n var cnt = item.content;\n var eleStr = void 0;\n if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\n if (typeof cnt === 'string' && this.enableHtmlSanitizer) {\n cnt = SanitizeHtmlHelper.sanitize(cnt);\n }\n if (cnt[0] === '.' || cnt[0] === '#') {\n if (document.querySelectorAll(cnt).length) {\n var eleVal = document.querySelector(cnt);\n eleStr = eleVal.outerHTML.trim();\n crElem.appendChild(eleVal);\n eleVal.style.display = '';\n }\n else {\n this.compileElement(crElem, cnt, 'content', this.selectedItem);\n }\n }\n else {\n this.compileElement(crElem, cnt, 'content', this.selectedItem);\n }\n }\n else {\n crElem.appendChild(cnt);\n }\n if (!isNOU(eleStr)) {\n if (this.templateEle.indexOf(cnt.toString()) === -1) {\n this.templateEle.push(cnt.toString());\n }\n }\n this.element.querySelector('.' + CLS_ITEM + '.' + CLS_ACTIVE).appendChild(crElem);\n }\n }\n else {\n var tabItems = this.element.querySelector('.' + CLS_TB_ITEMS);\n var element = this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE);\n var index = this.getIndexFromEle(element.id);\n var header = element.innerText;\n var detachContent = this.element.querySelector('.' + CLS_CONTENT).querySelector('.' + CLS_ACTIVE).children[0];\n var mainContents = detachContent.innerHTML;\n detach(element);\n detach(detachContent);\n var attr = {\n className: CLS_TB_ITEM + ' ' + CLS_TEMPLATE + ' ' + CLS_ACTIVE, id: CLS_ITEM + this.tabId + '_' + index\n };\n var txtString = this.createElement('span', {\n className: CLS_TEXT, innerHTML: header, attrs: { 'role': 'presentation' }\n }).outerHTML;\n var conte = this.createElement('div', {\n className: CLS_TEXT_WRAP, innerHTML: txtString + this.btnCls.outerHTML\n }).outerHTML;\n var tabIndex = element.firstElementChild.getAttribute('data-tabindex');\n var wrap = this.createElement('div', {\n className: CLS_WRAP, innerHTML: conte,\n attrs: { tabIndex: tabIndex, 'data-tabindex': tabIndex, role: 'tab', 'aria-controls': CLS_CONTENT + this.tabId + '_' + index, 'aria-selected': 'true', 'aria-disabled': 'false' }\n });\n tabItems.insertBefore(this.createElement('div', attr), tabItems.children[index + 1]);\n this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE).appendChild(wrap);\n var crElem = this.createElement('div', { innerHTML: mainContents });\n this.element.querySelector('.' + CLS_CONTENT).querySelector('.' + CLS_ACTIVE).appendChild(crElem);\n }\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n /**\n * To refresh the active tab indicator.\n *\n * @returns {void}\n */\n Tab.prototype.refreshActiveTabBorder = function () {\n var activeEle = select('.' + CLS_TB_ITEM + '.' + CLS_TB_POPUP + '.' + CLS_ACTIVE, this.element);\n if (!isNOU(activeEle) && this.reorderActiveTab) {\n this.select(this.getEleIndex(activeEle));\n }\n this.refreshActiveBorder();\n };\n __decorate([\n Collection([], TabItem)\n ], Tab.prototype, \"items\", void 0);\n __decorate([\n Property('100%')\n ], Tab.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tab.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Tab.prototype, \"cssClass\", void 0);\n __decorate([\n Property(0)\n ], Tab.prototype, \"selectedItem\", void 0);\n __decorate([\n Property('Top')\n ], Tab.prototype, \"headerPlacement\", void 0);\n __decorate([\n Property('Content')\n ], Tab.prototype, \"heightAdjustMode\", void 0);\n __decorate([\n Property('Scrollable')\n ], Tab.prototype, \"overflowMode\", void 0);\n __decorate([\n Property('Dynamic')\n ], Tab.prototype, \"loadOn\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"showCloseButton\", void 0);\n __decorate([\n Property(true)\n ], Tab.prototype, \"reorderActiveTab\", void 0);\n __decorate([\n Property()\n ], Tab.prototype, \"scrollStep\", void 0);\n __decorate([\n Property()\n ], Tab.prototype, \"dragArea\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], Tab.prototype, \"clearTemplates\", void 0);\n __decorate([\n Complex({}, TabAnimationSettings)\n ], Tab.prototype, \"animation\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"adding\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"added\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"selecting\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"onDragStart\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"dragging\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"dragged\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"destroyed\", void 0);\n Tab = __decorate([\n NotifyPropertyChanges\n ], Tab);\n return Tab;\n}(Component));\nexport { Tab };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { attributes, createElement, classList, append } from '@syncfusion/ej2-base';\n/**\n * `NumericContainer` module handles rendering and refreshing numeric container.\n */\nvar NumericContainer = /** @class */ (function () {\n /**\n * Constructor for numericContainer module\n *\n * @param {Pager} pagerModule - specifies the pagerModule\n * @hidden\n */\n function NumericContainer(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render numericContainer\n *\n * @returns {void}\n * @hidden\n */\n NumericContainer.prototype.render = function () {\n this.pagerElement = this.pagerModule.element;\n this.renderNumericContainer();\n this.refreshNumericLinks();\n this.wireEvents();\n };\n /**\n * Refreshes the numeric container of Pager.\n *\n * @returns {void}\n */\n NumericContainer.prototype.refresh = function () {\n this.pagerModule.updateTotalPages();\n if (this.links.length) {\n this.updateLinksHtml();\n }\n this.refreshAriaAttrLabel();\n this.updateStyles();\n };\n /**\n * The function is used to refresh refreshNumericLinks\n *\n * @returns {void}\n * @hidden\n */\n NumericContainer.prototype.refreshNumericLinks = function () {\n var link;\n var pagerObj = this.pagerModule;\n var div = pagerObj.element.querySelector('.e-numericcontainer');\n var frag = document.createDocumentFragment();\n div.innerHTML = '';\n for (var i = 1; i <= pagerObj.pageCount; i++) {\n link = createElement('a', {\n className: 'e-link e-numericitem e-spacing e-pager-default',\n attrs: { tabindex: '-1', 'aria-label': pagerObj.getLocalizedLabel('Page') + i + pagerObj.getLocalizedLabel('Of') +\n pagerObj.totalPages + pagerObj.getLocalizedLabel('Pages'), href: '#', name: 'Goto page' + i }\n });\n if (pagerObj.currentPage === i) {\n classList(link, ['e-currentitem', 'e-active'], ['e-pager-default']);\n link.setAttribute('aria-current', 'page');\n }\n frag.appendChild(link);\n }\n div.appendChild(frag);\n this.links = [].slice.call(div.childNodes);\n };\n /**\n * Binding events to the element while component creation\n *\n * @returns {void}\n * @hidden\n */\n NumericContainer.prototype.wireEvents = function () {\n EventHandler.add(this.pagerElement, 'click', this.clickHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy\n *\n * @returns {void}\n * @hidden\n */\n NumericContainer.prototype.unwireEvents = function () {\n EventHandler.remove(this.pagerModule.element, 'click', this.clickHandler);\n };\n /**\n * To destroy the PagerMessage\n *\n * @function destroy\n * @returns {void}\n * @hidden\n */\n NumericContainer.prototype.destroy = function () {\n this.unwireEvents();\n };\n NumericContainer.prototype.refreshAriaAttrLabel = function () {\n var pagerObj = this.pagerModule;\n var numericContainer = pagerObj.element.querySelector('.e-numericcontainer');\n var links = numericContainer.querySelectorAll('a');\n for (var i = 0; i < links.length; i++) {\n if (links[parseInt(i.toString(), 10)].hasAttribute('aria-label') && links[parseInt(i.toString(), 10)].hasAttribute('index')) {\n links[parseInt(i.toString(), 10)].setAttribute('aria-label', pagerObj.getLocalizedLabel('Page') + links[parseInt(i.toString(), 10)].getAttribute('index')\n + pagerObj.getLocalizedLabel('Of') + pagerObj.totalPages + pagerObj.getLocalizedLabel('Pages'));\n }\n }\n };\n NumericContainer.prototype.renderNumericContainer = function () {\n this.element = createElement('div', {\n className: 'e-pagercontainer', attrs: { 'role': 'navigation' }\n });\n this.renderFirstNPrev(this.element);\n this.renderPrevPagerSet(this.element);\n this.element.appendChild(createElement('div', { className: 'e-numericcontainer' }));\n this.renderNextPagerSet(this.element);\n this.renderNextNLast(this.element);\n this.pagerModule.element.appendChild(this.element);\n };\n NumericContainer.prototype.renderFirstNPrev = function (pagerContainer) {\n this.first = createElement('div', {\n className: 'e-first e-icons e-icon-first',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n tabindex: '-1', role: 'button'\n }\n });\n this.prev = createElement('div', {\n className: 'e-prev e-icons e-icon-prev',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n tabindex: '-1', role: 'button'\n }\n });\n append([this.first, this.prev], pagerContainer);\n };\n NumericContainer.prototype.renderPrevPagerSet = function (pagerContainer) {\n var prevPager = createElement('div');\n this.PP = createElement('a', {\n className: 'e-link e-pp e-spacing', innerHTML: '...',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n href: '#'\n }\n });\n prevPager.appendChild(this.PP);\n pagerContainer.appendChild(prevPager);\n };\n NumericContainer.prototype.renderNextPagerSet = function (pagerContainer) {\n var nextPager = createElement('div');\n this.NP = createElement('a', {\n className: 'e-link e-np e-spacing',\n innerHTML: '...', attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n href: '#'\n }\n });\n nextPager.appendChild(this.NP);\n pagerContainer.appendChild(nextPager);\n };\n NumericContainer.prototype.renderNextNLast = function (pagerContainer) {\n this.next = createElement('div', {\n className: 'e-next e-icons e-icon-next',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n tabindex: '-1', role: 'button'\n }\n });\n this.last = createElement('div', {\n className: 'e-last e-icons e-icon-last',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n tabindex: '-1', role: 'button'\n }\n });\n append([this.next, this.last], pagerContainer);\n };\n NumericContainer.prototype.clickHandler = function (e) {\n var pagerObj = this.pagerModule;\n this.target = e.target;\n if (this.target.classList.contains('e-numericitem')) {\n e.preventDefault();\n }\n pagerObj.previousPageNo = pagerObj.currentPage;\n if (!this.target.classList.contains('e-disable') && !isNullOrUndefined(this.target.getAttribute('index'))) {\n pagerObj.currentPage = parseInt(this.target.getAttribute('index'), 10);\n pagerObj.dataBind();\n }\n return false;\n };\n NumericContainer.prototype.updateLinksHtml = function () {\n var pagerObj = this.pagerModule;\n var currentPageSet;\n var isLastSet;\n var pageNo;\n var numItems = this.pagerElement.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n pagerObj.currentPage = pagerObj.totalPages === 1 ? 1 : pagerObj.currentPage;\n if (pagerObj.currentPage > pagerObj.totalPages && pagerObj.totalPages) {\n pagerObj.currentPage = pagerObj.totalPages;\n }\n currentPageSet = parseInt((pagerObj.currentPage / pagerObj.pageCount).toString(), 10);\n if (pagerObj.currentPage % pagerObj.pageCount === 0 && currentPageSet > 0) {\n currentPageSet = currentPageSet - 1;\n }\n for (var i = 0; i < pagerObj.pageCount; i++) {\n if (pagerObj.isPagerResized) {\n var focusedItem = this.pagerElement.querySelector('.e-focus');\n var focusedorTarget = this.target ? this.target : focusedItem ? focusedItem : null;\n var prevFocused = false;\n var nextFocused = false;\n var firstFocused = false;\n var lastFocused = false;\n var numItemFocused = false;\n var npFocused = false;\n var ppFocused = false;\n if (focusedorTarget) {\n var classList_1 = focusedorTarget.classList;\n if (classList_1.contains('e-icons')) {\n switch (true) {\n case classList_1.contains('e-prev'):\n prevFocused = true;\n break;\n case classList_1.contains('e-next'):\n nextFocused = true;\n break;\n case classList_1.contains('e-first'):\n firstFocused = true;\n break;\n case classList_1.contains('e-last'):\n lastFocused = true;\n break;\n }\n }\n else if (classList_1.contains('e-numericitem')) {\n switch (true) {\n case classList_1.contains('e-np'):\n npFocused = true;\n break;\n case classList_1.contains('e-pp'):\n ppFocused = true;\n break;\n default:\n numItemFocused = classList_1.contains('e-numericitem');\n break;\n }\n }\n }\n isLastSet = lastFocused || (this.pagerModule.keyAction === 'End');\n numItems = this.pagerElement.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n var isPageAvailable = Array.from(numItems).some(function (item) { return parseInt(item.getAttribute('index'), 10) === pagerObj.currentPage; });\n //Setting pageNo to render based on key action or click action.\n if (firstFocused || this.pagerModule.keyAction === 'Home') {\n pageNo = 1 + i;\n }\n else if (lastFocused || this.pagerModule.keyAction === 'End') {\n pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n }\n else if (nextFocused || this.pagerModule.keyAction === 'ArrowRight' || prevFocused || this.pagerModule.keyAction === 'ArrowLeft') {\n if (isPageAvailable) {\n pageNo = parseInt(numItems[0].getAttribute('index'), 10) + i;\n }\n else if (prevFocused || this.pagerModule.keyAction === 'ArrowLeft') {\n pageNo = parseInt(this.PP.getAttribute('index'), 10) + i;\n }\n else {\n pageNo = pagerObj.currentPage + i;\n }\n }\n else if (npFocused || ppFocused) {\n pageNo = pagerObj.currentPage + i;\n }\n else if (numItemFocused) {\n pageNo = (parseInt(numItems[0].getAttribute('index'), 10) + i);\n }\n else {\n pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n }\n }\n else {\n pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n }\n if (pageNo <= pagerObj.totalPages) {\n this.links[parseInt(i.toString(), 10)].classList.remove('e-hide');\n this.links[parseInt(i.toString(), 10)].style.display = '';\n this.links[parseInt(i.toString(), 10)].setAttribute('index', pageNo.toString());\n this.links[parseInt(i.toString(), 10)].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n if (pagerObj.currentPage !== pageNo) {\n this.links[parseInt(i.toString(), 10)].classList.add('e-pager-default');\n }\n else {\n this.links[parseInt(i.toString(), 10)].classList.remove('e-pager-default');\n }\n }\n else {\n this.links[parseInt(i.toString(), 10)].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n this.links[parseInt(i.toString(), 10)].style.display = 'none';\n }\n classList(this.links[parseInt(i.toString(), 10)], [], ['e-currentitem', 'e-active']);\n this.links[parseInt(i.toString(), 10)].removeAttribute('aria-current');\n }\n attributes(this.first, {\n 'index': '1',\n 'title': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('firstPageTooltip')\n });\n attributes(this.pagerElement.querySelector('.e-mfirst'), {\n 'index': '1',\n 'title': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('firstPageTooltip')\n });\n attributes(this.last, {\n 'index': pagerObj.totalPages.toString(),\n 'title': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('lastPageTooltip')\n });\n attributes(this.pagerElement.querySelector('.e-mlast'), {\n 'index': pagerObj.totalPages.toString(),\n 'title': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('lastPageTooltip')\n });\n attributes(this.prev, {\n 'index': (pagerObj.currentPage - 1).toString(),\n 'title': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPageTooltip')\n });\n attributes(this.pagerElement.querySelector('.e-mprev'), {\n 'index': (pagerObj.currentPage - 1).toString(),\n 'title': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPageTooltip')\n });\n attributes(this.next, {\n 'index': (pagerObj.currentPage + 1).toString(),\n 'title': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPageTooltip')\n });\n attributes(this.pagerElement.querySelector('.e-mnext'), {\n 'index': (pagerObj.currentPage + 1).toString(),\n 'title': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPageTooltip')\n });\n var ppIndex = (this.pagerModule.isPagerResized && numItems.length)\n ? isLastSet\n ? parseInt(numItems[0].getAttribute('index'), 10) - pagerObj.avgNumItems\n : parseInt(numItems[0].getAttribute('index'), 10) - numItems.length\n : parseInt(this.links[0].getAttribute('index'), 10) - pagerObj.pageCount;\n attributes(this.PP, {\n 'index': ((ppIndex < 1) ? '1' : ppIndex.toString()),\n 'title': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip')\n });\n var NPIndex = (this.pagerModule.isPagerResized && numItems.length)\n ? parseInt(numItems[numItems.length - 1].getAttribute('index'), 10)\n : parseInt(this.links[this.links.length - 1].getAttribute('index'), 10);\n attributes(this.NP, {\n 'index': (NPIndex + 1).toString(),\n 'title': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip')\n });\n this.target = undefined;\n };\n NumericContainer.prototype.updateStyles = function () {\n var _this = this;\n this.updateFirstNPrevStyles();\n this.updatePrevPagerSetStyles();\n this.updateNextPagerSetStyles();\n this.updateNextNLastStyles();\n if (this.links.length) {\n var currentPageIndex = this.links.findIndex(function (link) { return link.getAttribute('index') === _this.pagerModule.currentPage.toString(); });\n var currentPage = (this.pagerModule.isPagerResized && currentPageIndex !== -1) ? currentPageIndex\n : ((this.pagerModule.currentPage - 1) % this.pagerModule.pageCount);\n classList(this.links[parseInt(currentPage.toString(), 10)], ['e-currentitem', 'e-active'], []);\n this.links[parseInt(currentPage.toString(), 10)].setAttribute('aria-current', 'page');\n }\n };\n NumericContainer.prototype.updateFirstNPrevStyles = function () {\n var firstPage = ['e-firstpage', 'e-pager-default'];\n var firstPageDisabled = ['e-firstpagedisabled', 'e-disable'];\n var prevPage = ['e-prevpage', 'e-pager-default'];\n var prevPageDisabled = ['e-prevpagedisabled', 'e-disable'];\n if (this.pagerModule.totalPages > 0 && this.pagerModule.currentPage > 1) {\n classList(this.prev, prevPage, prevPageDisabled);\n classList(this.first, firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPage, prevPageDisabled);\n }\n else {\n classList(this.prev, prevPageDisabled, prevPage);\n classList(this.first, firstPageDisabled, firstPage);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPageDisabled, prevPage);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPageDisabled, firstPage);\n }\n };\n NumericContainer.prototype.updatePrevPagerSetStyles = function () {\n if (this.pagerModule.currentPage > this.pagerModule.pageCount || (this.pagerModule.isPagerResized\n && this.links.findIndex(function (link) { return parseInt(link.getAttribute('index'), 10) === 1; }))) {\n classList(this.PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n else {\n classList(this.PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n };\n NumericContainer.prototype.updateNextPagerSetStyles = function () {\n var pagerObj = this.pagerModule;\n var firstPage = this.links[0].innerHTML.replace(pagerObj.customText, '');\n var numItems = this.pagerElement.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n if (!firstPage.length || !this.links.length || (parseInt(firstPage, 10) + pagerObj.pageCount > pagerObj.totalPages)\n || (pagerObj.isPagerResized && Array.from(numItems).some(function (item) { return parseInt(item.getAttribute('index'), 10) === pagerObj.totalPages; }))) {\n classList(this.NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n else {\n classList(this.NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n };\n NumericContainer.prototype.updateNextNLastStyles = function () {\n var lastPage = ['e-lastpage', 'e-pager-default'];\n var lastPageDisabled = ['e-lastpagedisabled', 'e-disable'];\n var nextPage = ['e-nextpage', 'e-pager-default'];\n var nextPageDisabled = ['e-nextpagedisabled', 'e-disable'];\n var pagerObj = this.pagerModule;\n if (pagerObj.currentPage === pagerObj.totalPages || pagerObj.totalRecordsCount === 0) {\n classList(this.last, lastPageDisabled, lastPage);\n classList(this.next, nextPageDisabled, nextPage);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPageDisabled, lastPage);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPageDisabled, nextPage);\n }\n else {\n classList(this.last, lastPage, lastPageDisabled);\n classList(this.next, nextPage, nextPageDisabled);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPage, lastPageDisabled);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPage, nextPageDisabled);\n }\n };\n return NumericContainer;\n}());\nexport { NumericContainer };\n","import { createElement, append } from '@syncfusion/ej2-base';\n/**\n * `PagerMessage` module is used to display pager information.\n */\nvar PagerMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n *\n * @param {Pager} pagerModule - specifies the pager Module\n * @hidden\n */\n function PagerMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render pager message\n *\n * @returns {void}\n * @hidden\n */\n PagerMessage.prototype.render = function () {\n var div = createElement('div', { className: 'e-parentmsgbar', attrs: { 'aria-label': this.pagerModule.getLocalizedLabel('Information') } });\n this.pageNoMsgElem = createElement('span', { className: 'e-pagenomsg', styles: 'textalign:right' });\n this.pageCountMsgElem = createElement('span', { className: 'e-pagecountmsg', styles: 'textalign:right' });\n append([this.pageNoMsgElem, this.pageCountMsgElem], div);\n this.pagerModule.element.appendChild(div);\n this.refresh();\n };\n /**\n * Refreshes the pager information.\n *\n * @returns {void}\n */\n PagerMessage.prototype.refresh = function () {\n var pagerObj = this.pagerModule;\n this.pageNoMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('currentPageInfo'), [pagerObj.totalRecordsCount === 0 ? 0 :\n pagerObj.currentPage, pagerObj.totalPages || 0, pagerObj.totalRecordsCount || 0]) + ' ';\n this.pageCountMsgElem.textContent = this.format(pagerObj.getLocalizedLabel(pagerObj.totalRecordsCount <= 1 ? 'totalItemInfo' : 'totalItemsInfo'), [pagerObj.totalRecordsCount || 0, pagerObj.totalRecordsCount ? (pagerObj.pageSize * (pagerObj.currentPage - 1)) + 1 : 0,\n pagerObj.pageSize * pagerObj.currentPage > pagerObj.totalRecordsCount ? pagerObj.totalRecordsCount :\n pagerObj.pageSize * pagerObj.currentPage]);\n this.pageNoMsgElem.parentElement.setAttribute('aria-label', this.pageNoMsgElem.textContent + this.pageCountMsgElem.textContent);\n this.pageNoMsgElem.parentElement.classList.remove('e-hide');\n };\n /**\n * Hides the Pager information.\n *\n * @returns {void}\n */\n PagerMessage.prototype.hideMessage = function () {\n if (this.pageNoMsgElem) {\n this.pageNoMsgElem.style.display = 'none';\n }\n if (this.pageCountMsgElem) {\n this.pageCountMsgElem.style.display = 'none';\n }\n };\n /**\n * Shows the Pager information.\n *\n * @returns {void}\n */\n PagerMessage.prototype.showMessage = function () {\n if (!this.pageNoMsgElem) {\n this.render();\n }\n this.pageNoMsgElem.style.display = '';\n this.pageCountMsgElem.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n *\n * @function destroy\n * @returns {void}\n * @hidden\n */\n PagerMessage.prototype.destroy = function () {\n //destroy\n };\n PagerMessage.prototype.format = function (str, args) {\n var regx;\n for (var i = 0; i < args.length; i++) {\n // eslint-disable-next-line security/detect-non-literal-regexp\n regx = new RegExp('\\\\{' + (i) + '\\\\}', 'gm');\n str = str.replace(regx, args[parseInt(i.toString(), 10)].toString());\n }\n return str;\n };\n return PagerMessage;\n}());\nexport { PagerMessage };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, L10n, Browser, addClass, removeClass, classList } from '@syncfusion/ej2-base';\nimport { createElement, compile as templateCompiler, EventHandler, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, Event, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { NumericContainer } from './numeric-container';\nimport { PagerMessage } from './pager-message';\nimport { appendChildren, parentsUntil } from '../grid/base/util';\nimport * as events from '../grid/base/constant';\n/**\n * Represents the `Pager` component.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Pager = /** @class */ (function (_super) {\n __extends(Pager, _super);\n /**\n * Constructor for creating the component.\n *\n * @param {PagerModel} options - specifies the options\n * @param {string} element - specifies the element\n * @param {string} parent - specifies the pager parent\n * @hidden\n */\n function Pager(options, element, parent) {\n var _this = _super.call(this, options, element) || this;\n /** @hidden */\n _this.hasParent = false;\n _this.checkAll = true;\n _this.pageRefresh = 'pager-refresh';\n _this.firstPagerFocus = false;\n _this.parent = parent;\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} returns the modules declaration\n * @hidden\n */\n Pager.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableExternalMessage) {\n modules.push({\n member: 'externalMessage',\n args: [this]\n });\n }\n if (this.checkpagesizes()) {\n modules.push({\n member: 'pagerdropdown',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @hidden\n */\n Pager.prototype.preRender = function () {\n //preRender\n this.defaultConstants = {\n currentPageInfo: '{0} of {1} pages',\n totalItemsInfo: '({0} items)',\n totalItemInfo: '({0} item)',\n firstPageTooltip: 'Go to first page',\n lastPageTooltip: 'Go to last page',\n nextPageTooltip: 'Go to next page',\n previousPageTooltip: 'Go to previous page',\n nextPagerTooltip: 'Go to next pager items',\n previousPagerTooltip: 'Go to previous pager items',\n pagerDropDown: 'Items per page',\n pagerAllDropDown: 'Items',\n CurrentPageInfo: '{0} of {1} pages',\n TotalItemsInfo: '({0} items)',\n FirstPageTooltip: 'Go to first page',\n LastPageTooltip: 'Go to last page',\n NextPageTooltip: 'Go to next page',\n PreviousPageTooltip: 'Go to previous page',\n NextPagerTooltip: 'Go to next pager items',\n PreviousPagerTooltip: 'Go to previous pager items',\n PagerDropDown: 'Items per page',\n PagerAllDropDown: 'Items',\n All: 'All',\n Container: 'Pager Container',\n Information: 'Pager Information',\n ExternalMsg: 'Pager external message',\n Page: 'Page ',\n Of: ' of ',\n Pages: ' Pages'\n };\n this.containerModule = new NumericContainer(this);\n this.pagerMessageModule = new PagerMessage(this);\n };\n /**\n * To Initialize the component rendering\n *\n * @returns {void}\n */\n Pager.prototype.render = function () {\n this.element.setAttribute('data-role', 'pager');\n this.element.setAttribute('tabindex', '-1');\n this.initLocalization();\n this.element.setAttribute('aria-label', this.getLocalizedLabel('Container'));\n if (this.cssClass) {\n if (this.cssClass.indexOf(' ') !== -1) {\n addClass([this.element], this.cssClass.split(' '));\n }\n else {\n addClass([this.element], [this.cssClass]);\n }\n }\n if (!this.hasParent) {\n this.element.setAttribute('tabindex', '0');\n }\n if (this.template) {\n if (this.isReactTemplate()) {\n this.on(this.pageRefresh, this.pagerTemplate, this);\n this.notify(this.pageRefresh, {});\n }\n else {\n this.pagerTemplate();\n }\n }\n else {\n this.updateRTL();\n this.totalRecordsCount = this.totalRecordsCount || 0;\n this.renderFirstPrevDivForDevice();\n this.containerModule.render();\n if (this.enablePagerMessage) {\n this.pagerMessageModule.render();\n }\n this.renderNextLastDivForDevice();\n if (this.checkpagesizes() && this.pagerdropdownModule) {\n this.pagerdropdownModule.render();\n }\n this.addAriaLabel();\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.render();\n }\n this.refresh();\n this.trigger('created', { 'currentPage': this.currentPage, 'totalRecordsCount': this.totalRecordsCount });\n }\n this.wireEvents();\n this.addListener();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} returns the persist data\n * @hidden\n */\n Pager.prototype.getPersistData = function () {\n var keyEntity = ['currentPage', 'pageSize'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To destroy the Pager component.\n *\n * @method destroy\n * @returns {void}\n */\n Pager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.isReactTemplate()) {\n this.off(this.pageRefresh, this.pagerTemplate);\n if (!this.hasParent) {\n this.destroyTemplate(['template']);\n }\n }\n this.removeListener();\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n this.containerModule.destroy();\n this.pagerMessageModule.destroy();\n if (!this.isReactTemplate()) {\n this.element.innerHTML = '';\n }\n };\n /**\n * Destroys the given template reference.\n *\n * @param {string[]} propertyNames - Defines the collection of template name.\n * @param {any} index - Defines the index\n */\n // eslint-disable-next-line\n Pager.prototype.destroyTemplate = function (propertyNames, index) {\n this.clearTemplate(propertyNames, index);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Pager.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {PagerModel} newProp - specifies the new property\n * @param {PagerModel} oldProp - specifies the old propety\n * @returns {void}\n * @hidden\n */\n Pager.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.isDestroyed) {\n return;\n }\n if ((newProp.pageSize === this.getLocalizedLabel('All')) && oldProp.pageSize === this.totalRecordsCount) {\n this.pageSize = this.totalRecordsCount;\n return;\n }\n if (newProp.pageCount !== oldProp.pageCount) {\n this.containerModule.refreshNumericLinks();\n this.containerModule.refresh();\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'currentPage':\n if (this.checkGoToPage(newProp.currentPage, oldProp.currentPage)) {\n this.currentPageChanged(newProp, oldProp);\n }\n break;\n case 'pageSize':\n case 'totalRecordsCount':\n case 'customText':\n if (this.checkpagesizes() && this.pagerdropdownModule) {\n if (oldProp.pageSize !== newProp.pageSize) {\n this.currentPage = 1;\n }\n this.pagerdropdownModule.setDropDownValue('value', this.pageSize);\n }\n if (newProp.pageSize !== oldProp.pageSize) {\n this.pageSize = newProp.pageSize;\n this.currentPageChanged(newProp, oldProp);\n }\n else {\n this.refresh();\n }\n break;\n case 'pageSizes':\n if (this.checkpagesizes() && this.pagerdropdownModule) {\n this.pagerdropdownModule.destroy();\n this.pagerdropdownModule.render();\n }\n this.refresh();\n break;\n case 'template':\n this.templateFn = this.compile(this.template);\n this.refresh();\n break;\n case 'locale':\n this.initLocalization();\n this.refresh();\n break;\n case 'enableExternalMessage':\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.render();\n }\n break;\n case 'externalMessage':\n if (this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'enablePagerMessage':\n if (this.enablePagerMessage) {\n this.pagerMessageModule.showMessage();\n }\n else {\n this.pagerMessageModule.hideMessage();\n }\n break;\n }\n }\n this.resizePager();\n };\n Pager.prototype.wireEvents = function () {\n if (!this.hasParent) {\n EventHandler.add(this.element, 'keydown', this.keyPressHandler, this);\n EventHandler.add(document.body, 'keydown', this.keyDownHandler, this);\n }\n EventHandler.add(this.element, 'focusin', this.onFocusIn, this);\n EventHandler.add(this.element, 'focusout', this.onFocusOut, this);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.add(window, 'resize', this.resizePager, this);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.add(window, 'load', this.resizePager, this);\n };\n Pager.prototype.unwireEvents = function () {\n if (!this.hasParent) {\n EventHandler.remove(this.element, 'keydown', this.keyPressHandler);\n EventHandler.remove(document.body, 'keydown', this.keyDownHandler);\n }\n EventHandler.remove(this.element, 'focusin', this.onFocusIn);\n EventHandler.remove(this.element, 'focusout', this.onFocusOut);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.remove(window, 'resize', this.resizePager);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.remove(window, 'load', this.resizePager);\n };\n Pager.prototype.onFocusIn = function (e) {\n var focusedTabIndexElement = this.getFocusedTabindexElement();\n if (isNullOrUndefined(focusedTabIndexElement)) {\n var target = e.target;\n var dropDownPage = this.getDropDownPage();\n if (!this.hasParent) {\n this.element.tabIndex = -1;\n }\n if (target === this.element && !this.hasParent) {\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n this.addFocus(focusablePagerElements[0], true);\n return;\n }\n if (target === this.element) {\n this.element.tabIndex = 0;\n return;\n }\n if (target !== dropDownPage && !target.classList.contains('e-disable')) {\n this.addFocus(target, true);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Pager.prototype.onFocusOut = function (e) {\n var focusedElement = this.getFocusedElement();\n var dropDownPage = this.getDropDownPage();\n if (!isNullOrUndefined(focusedElement)) {\n this.removeFocus(focusedElement, true);\n }\n if (this.pageSizes && dropDownPage && dropDownPage.classList.contains('e-input-focus')) {\n this.removeFocus(dropDownPage, true);\n }\n this.setTabIndexForFocusLastElement();\n if (!this.hasParent) {\n this.element.tabIndex = 0;\n }\n if (this.hasParent) {\n this.element.tabIndex = -1;\n }\n };\n Pager.prototype.keyDownHandler = function (e) {\n if (e.altKey) {\n if (e.keyCode === 74) {\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n if (focusablePagerElements.length > 0) {\n focusablePagerElements[0].focus();\n }\n }\n }\n };\n Pager.prototype.keyPressHandler = function (e) {\n var presskey = extend(e, { cancel: false });\n this.notify(events.keyPressed, presskey);\n if (presskey.cancel === true) {\n e.stopImmediatePropagation();\n }\n };\n Pager.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.hasParent) {\n this.on(events.keyPressed, this.onKeyPress, this);\n }\n };\n Pager.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.hasParent) {\n this.off(events.keyPressed, this.onKeyPress);\n }\n };\n Pager.prototype.onKeyPress = function (e) {\n if (!this.hasParent) {\n if (this.checkPagerHasFocus()) {\n this.changePagerFocus(e);\n }\n else {\n e.preventDefault();\n this.setPagerFocus();\n }\n }\n };\n /**\n * @returns {boolean} - Return the true value if pager has focus\n * @hidden */\n Pager.prototype.checkPagerHasFocus = function () {\n return this.getFocusedTabindexElement() ? true : false;\n };\n /**\n * @returns {void}\n * @hidden */\n Pager.prototype.setPagerContainerFocus = function () {\n this.element.focus();\n };\n /**\n * @returns {void}\n * @hidden */\n Pager.prototype.setPagerFocus = function () {\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n if (focusablePagerElements.length > 0) {\n focusablePagerElements[0].focus();\n }\n };\n Pager.prototype.setPagerFocusForActiveElement = function () {\n var currentActivePage = this.getActiveElement();\n if (currentActivePage) {\n currentActivePage.focus();\n }\n };\n Pager.prototype.setTabIndexForFocusLastElement = function () {\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n var dropDownPage = this.getDropDownPage();\n if (this.pageSizes && dropDownPage && !isNullOrUndefined(dropDownPage.offsetParent)) {\n dropDownPage.tabIndex = 0;\n }\n else if (focusablePagerElements.length > 0) {\n focusablePagerElements[focusablePagerElements.length - 1].tabIndex = 0;\n }\n };\n /**\n * @param {KeyboardEventArgs} e - Keyboard Event Args\n * @returns {void}\n * @hidden */\n Pager.prototype.changePagerFocus = function (e) {\n this.keyAction = e.key;\n if (e.shiftKey && e.keyCode === 9) {\n this.changeFocusByShiftTab(e);\n }\n else if (e.keyCode === 9) {\n this.changeFocusByTab(e);\n }\n else if (e.keyCode === 13 || e.keyCode === 32) {\n this.navigateToPageByEnterOrSpace(e);\n }\n else if (e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 35 || e.keyCode === 36) {\n this.navigateToPageByKey(e);\n }\n this.keyAction = '';\n };\n Pager.prototype.getFocusedTabindexElement = function () {\n var focusedTabIndexElement;\n var tabindexElements = this.element.querySelectorAll('[tabindex]:not([tabindex=\"-1\"])');\n for (var i = 0; i < tabindexElements.length; i++) {\n var element = tabindexElements[parseInt(i.toString(), 10)];\n if (element && (element.classList.contains('e-focused') || element.classList.contains('e-input-focus'))) {\n focusedTabIndexElement = element;\n break;\n }\n }\n return focusedTabIndexElement;\n };\n Pager.prototype.changeFocusByTab = function (e) {\n var currentItemPagerFocus = this.getFocusedTabindexElement();\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n var dropDownPage = this.getDropDownPage();\n if (focusablePagerElements.length > 0) {\n if (this.pageSizes && dropDownPage && currentItemPagerFocus === focusablePagerElements[focusablePagerElements.length - 1]) {\n dropDownPage.tabIndex = 0;\n }\n else {\n for (var i = 0; i < focusablePagerElements.length; i++) {\n if (currentItemPagerFocus === focusablePagerElements[parseInt(i.toString(), 10)]) {\n var incrementNumber = i + 1;\n if (incrementNumber < focusablePagerElements.length) {\n e.preventDefault();\n focusablePagerElements[parseInt(incrementNumber.toString(), 10)].focus();\n }\n break;\n }\n }\n }\n }\n };\n Pager.prototype.changeFocusByShiftTab = function (e) {\n var currentItemPagerFocus = this.getFocusedTabindexElement();\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n var dropDownPage = this.getDropDownPage();\n if (this.pageSizes && dropDownPage && dropDownPage.classList.contains('e-input-focus')) {\n dropDownPage.tabIndex = -1;\n this.addFocus(focusablePagerElements[focusablePagerElements.length - 1], true);\n }\n else if (focusablePagerElements.length > 0) {\n for (var i = 0; i < focusablePagerElements.length; i++) {\n if (currentItemPagerFocus === focusablePagerElements[parseInt(i.toString(), 10)]) {\n var decrementNumber = i - 1;\n if (decrementNumber >= 0) {\n e.preventDefault();\n focusablePagerElements[parseInt(decrementNumber.toString(), 10)].focus();\n }\n else if (this.hasParent) {\n var rows = this.parent.getRows();\n var lastRow = rows[rows.length - 1];\n var lastCell = lastRow.lastChild;\n e.preventDefault();\n lastCell.focus();\n this.firstPagerFocus = true;\n }\n break;\n }\n }\n }\n };\n /**\n * @returns {void}\n * @hidden */\n Pager.prototype.checkFirstPagerFocus = function () {\n if (this.firstPagerFocus) {\n this.firstPagerFocus = false;\n return true;\n }\n return false;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Pager.prototype.navigateToPageByEnterOrSpace = function (e) {\n var currentItemPagerFocus = this.getFocusedElement();\n if (currentItemPagerFocus) {\n this.goToPage(parseInt(currentItemPagerFocus.getAttribute('index'), 10));\n var currentActivePage = this.getActiveElement();\n var selectedClass = this.getClass(currentItemPagerFocus);\n var classElement = this.getElementByClass(selectedClass);\n if ((selectedClass === 'e-first' || selectedClass === 'e-prev' || selectedClass === 'e-next'\n || selectedClass === 'e-last' || selectedClass === 'e-pp' || selectedClass === 'e-np')\n && classElement && !classElement.classList.contains('e-disable')) {\n classElement.focus();\n }\n else if (this.checkFocusInAdaptiveMode(currentItemPagerFocus)) {\n this.changeFocusInAdaptiveMode(currentItemPagerFocus);\n }\n else {\n if (currentActivePage) {\n currentActivePage.focus();\n }\n }\n }\n };\n Pager.prototype.navigateToPageByKey = function (e) {\n var actionClass = e.keyCode === 37 ? '.e-prev' : e.keyCode === 39 ? '.e-next'\n : e.keyCode === 35 ? '.e-last' : e.keyCode === 36 ? '.e-first' : '';\n var pagingItem = this.element.querySelector(actionClass);\n var currentItemPagerFocus = this.getFocusedElement();\n if (!isNullOrUndefined(pagingItem) && pagingItem.hasAttribute('index')\n && !isNaN(parseInt(pagingItem.getAttribute('index'), 10))) {\n this.goToPage(parseInt(pagingItem.getAttribute('index'), 10));\n var currentActivePage = this.getActiveElement();\n if (this.checkFocusInAdaptiveMode(currentItemPagerFocus)) {\n this.changeFocusInAdaptiveMode(currentItemPagerFocus);\n }\n else {\n if (currentActivePage) {\n currentActivePage.focus();\n }\n }\n }\n };\n Pager.prototype.checkFocusInAdaptiveMode = function (element) {\n var selectedClass = this.getClass(element);\n return selectedClass === 'e-mfirst' || selectedClass === 'e-mprev' || selectedClass === 'e-mnext'\n || selectedClass === 'e-mlast' ? true : false;\n };\n Pager.prototype.changeFocusInAdaptiveMode = function (element) {\n var selectedClass = this.getClass(element);\n var classElement = this.getElementByClass(selectedClass);\n if (classElement && classElement.classList.contains('e-disable')) {\n if (selectedClass === 'e-mnext' || selectedClass === 'e-mlast') {\n var mPrev = this.element.querySelector('.e-mprev');\n mPrev.focus();\n }\n else {\n this.setPagerFocus();\n }\n }\n };\n Pager.prototype.removeTabindexLastElements = function () {\n var tabIndexElements = this.element.querySelectorAll('[tabindex]:not([tabindex=\"-1\"])');\n if (tabIndexElements.length > 1) {\n for (var i = 1; i < tabIndexElements.length; i++) {\n var element = tabIndexElements[parseInt(i.toString(), 10)];\n if (element) {\n element.tabIndex = -1;\n }\n }\n }\n };\n Pager.prototype.getActiveElement = function () {\n return this.element.querySelector('.e-active');\n };\n /**\n * @returns {Element} - Returns DropDown Page\n * @hidden */\n Pager.prototype.getDropDownPage = function () {\n var dropDownPageHolder = this.element.querySelector('.e-pagerdropdown');\n var dropDownPage;\n if (dropDownPageHolder) {\n dropDownPage = dropDownPageHolder.children[0];\n }\n return dropDownPage;\n };\n Pager.prototype.getFocusedElement = function () {\n return this.element.querySelector('.e-focused');\n };\n Pager.prototype.getClass = function (element) {\n var currentClass;\n var classList = ['e-mfirst', 'e-mprev', 'e-first', 'e-prev', 'e-pp',\n 'e-np', 'e-next', 'e-last', 'e-mnext', 'e-mlast'];\n for (var i = 0; i < classList.length; i++) {\n if (element && element.classList.contains(classList[parseInt(i.toString(), 10)])) {\n currentClass = classList[parseInt(i.toString(), 10)];\n return currentClass;\n }\n }\n return currentClass;\n };\n Pager.prototype.getElementByClass = function (className) {\n return this.element.querySelector('.' + className);\n };\n /**\n * @param {Element} element - Pager element\n * @param {Element[]} previousElements - Iterating pager element\n * @returns {Element[]} - Returns focusable pager element\n * @hidden */\n Pager.prototype.getFocusablePagerElements = function (element, previousElements) {\n var target = element;\n var targetChildrens = target.children;\n var pagerElements = previousElements;\n for (var i = 0; i < targetChildrens.length; i++) {\n var element_1 = targetChildrens[parseInt(i.toString(), 10)];\n if (element_1.children.length > 0 && !element_1.classList.contains('e-pagesizes')) {\n pagerElements = this.getFocusablePagerElements(element_1, pagerElements);\n }\n else {\n var tabindexElement = targetChildrens[parseInt(i.toString(), 10)];\n if (tabindexElement.hasAttribute('tabindex') && !element_1.classList.contains('e-disable')\n && element_1.style.display !== 'none'\n && !isNullOrUndefined(element_1.offsetParent)) {\n pagerElements.push(tabindexElement);\n }\n }\n }\n return pagerElements;\n };\n Pager.prototype.addFocus = function (element, addFocusClass) {\n if (addFocusClass) {\n addClass([element], ['e-focused', 'e-focus']);\n }\n element.tabIndex = 0;\n };\n Pager.prototype.removeFocus = function (element, removeFocusClass) {\n if (removeFocusClass) {\n removeClass([element], ['e-focused', 'e-focus']);\n }\n element.tabIndex = -1;\n };\n /**\n * Gets the localized label by locale keyword.\n *\n * @param {string} key - specifies the key\n * @returns {string} returns the localized label\n */\n Pager.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n /**\n * Navigate to target page by given number.\n *\n * @param {number} pageNo - Defines page number.\n * @returns {void}\n */\n Pager.prototype.goToPage = function (pageNo) {\n if (this.checkGoToPage(pageNo)) {\n this.currentPage = pageNo;\n this.dataBind();\n }\n };\n /**\n * @param {number} pageSize - specifies the pagesize\n * @returns {void}\n * @hidden\n */\n Pager.prototype.setPageSize = function (pageSize) {\n this.pageSize = pageSize;\n this.dataBind();\n };\n Pager.prototype.checkpagesizes = function () {\n if (this.pageSizes === true || this.pageSizes.length) {\n return true;\n }\n return false;\n };\n Pager.prototype.checkGoToPage = function (newPageNo, oldPageNo) {\n if (newPageNo !== this.currentPage) {\n this.previousPageNo = this.currentPage;\n }\n if (!isNullOrUndefined(oldPageNo)) {\n this.previousPageNo = oldPageNo;\n }\n if (this.previousPageNo !== newPageNo && (newPageNo >= 1 && newPageNo <= this.totalPages)) {\n return true;\n }\n return false;\n };\n Pager.prototype.currentPageChanged = function (newProp, oldProp) {\n if (this.enableQueryString) {\n this.updateQueryString(this.currentPage);\n }\n if (newProp.currentPage !== oldProp.currentPage || newProp.pageSize !== oldProp.pageSize) {\n var args = {\n currentPage: this.currentPage,\n newProp: newProp, oldProp: oldProp, cancel: false\n };\n this.trigger('click', args);\n if (!args.cancel) {\n this.refresh();\n }\n else {\n if (oldProp.pageSize && this.pageSize !== oldProp.pageSize) {\n this.setProperties({ pageSize: oldProp.pageSize }, false);\n this.pagerdropdownModule['dropDownListObject'].text = oldProp.pageSize + '';\n }\n }\n }\n };\n Pager.prototype.pagerTemplate = function () {\n if (this.isReactTemplate() && this.hasParent) {\n return;\n }\n var result;\n this.element.classList.add('e-pagertemplate');\n this.compile(this.template);\n var data = {\n currentPage: this.currentPage, pageSize: this.pageSize, pageCount: this.pageCount,\n totalRecordsCount: this.totalRecordsCount, totalPages: this.totalPages\n };\n var tempId = this.element.parentElement.id + '_template';\n if (this.isReactTemplate() && !this.isVue) {\n this.getPagerTemplate()(data, this, 'template', tempId, null, null, this.element);\n this.renderReactTemplates();\n }\n else {\n result = this.isVue ? this.getPagerTemplate()(data, this, 'template') : this.getPagerTemplate()(data);\n appendChildren(this.element, result);\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Pager.prototype.updateTotalPages = function () {\n this.totalPages = this.isAllPage ? 1 : (this.totalRecordsCount % this.pageSize === 0) ? (this.totalRecordsCount / this.pageSize) :\n (parseInt((this.totalRecordsCount / this.pageSize).toString(), 10) + 1);\n };\n /**\n * @returns {Function} returns the function\n * @hidden\n */\n Pager.prototype.getPagerTemplate = function () {\n return this.templateFn;\n };\n /**\n * @param {string | Function} template - specifies the template\n * @returns {Function} returns the function\n * @hidden\n */\n Pager.prototype.compile = function (template) {\n if (template) {\n try {\n if (typeof template === 'function') {\n this.templateFn = templateCompiler(template);\n }\n else {\n if (document.querySelectorAll(template).length) {\n this.templateFn = templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n }\n }\n catch (e) {\n this.templateFn = templateCompiler(template);\n }\n }\n return undefined;\n };\n /**\n * Refreshes page count, pager information and external message.\n *\n * @returns {void}\n */\n Pager.prototype.refresh = function () {\n if (this.template) {\n if (this.isReactTemplate()) {\n this.updateTotalPages();\n this.notify(this.pageRefresh, {});\n }\n else {\n this.element.innerHTML = '';\n this.updateTotalPages();\n this.pagerTemplate();\n }\n }\n else {\n this.updateRTL();\n var focusedTabIndexElement = this.getFocusedTabindexElement();\n this.containerModule.refresh();\n this.removeTabindexLastElements();\n if (focusedTabIndexElement && focusedTabIndexElement.classList.contains('e-disable')) {\n if (this.checkFocusInAdaptiveMode(focusedTabIndexElement)) {\n this.changeFocusInAdaptiveMode(focusedTabIndexElement);\n }\n else {\n this.setPagerFocusForActiveElement();\n }\n }\n if (this.enablePagerMessage) {\n this.pagerMessageModule.refresh();\n }\n if (this.pagerdropdownModule) {\n this.pagerdropdownModule.refresh();\n }\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\n this.setTabIndexForFocusLastElement();\n this.resizePager();\n }\n };\n Pager.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Pager.prototype.initLocalization = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultConstants, this.locale);\n };\n Pager.prototype.updateQueryString = function (value) {\n var updatedUrl = this.getUpdatedURL(window.location.href, 'page', value.toString());\n window.history.pushState({ path: updatedUrl }, '', updatedUrl);\n };\n Pager.prototype.getUpdatedURL = function (uri, key, value) {\n // eslint-disable-next-line security/detect-non-literal-regexp\n var regx = new RegExp('([?|&])' + key + '=.*?(&|#|$)', 'i');\n if (uri.match(regx)) {\n return uri.replace(regx, '$1' + key + '=' + value + '$2');\n }\n else {\n var hash = '';\n if (uri.indexOf('#') !== -1) {\n hash = uri.replace(/.*#/, '#');\n uri = uri.replace(/#.*/, '');\n }\n return uri + (uri.indexOf('?') !== -1 ? '&' : '?') + key + '=' + value + hash;\n }\n };\n Pager.prototype.renderFirstPrevDivForDevice = function () {\n this.element.appendChild(createElement('div', {\n className: 'e-mfirst e-icons e-icon-first',\n attrs: { title: this.getLocalizedLabel('firstPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(createElement('div', {\n className: 'e-mprev e-icons e-icon-prev',\n attrs: { title: this.getLocalizedLabel('previousPageTooltip'), tabindex: '-1' }\n }));\n };\n Pager.prototype.renderNextLastDivForDevice = function () {\n this.element.appendChild(createElement('div', {\n className: 'e-mnext e-icons e-icon-next',\n attrs: { title: this.getLocalizedLabel('nextPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(createElement('div', {\n className: 'e-mlast e-icons e-icon-last',\n attrs: { title: this.getLocalizedLabel('lastPageTooltip'), tabindex: '-1' }\n }));\n };\n Pager.prototype.addAriaLabel = function () {\n var classList = ['.e-mfirst', '.e-mprev', '.e-mnext', '.e-mlast'];\n if (!Browser.isDevice) {\n for (var i = 0; i < classList.length; i++) {\n var element = this.element.querySelector(classList[parseInt(i.toString(), 10)]);\n element.setAttribute('aria-label', element.getAttribute('title'));\n }\n }\n };\n Pager.prototype.isReactTemplate = function () {\n return (this.isReact || this.isVue) && this.template && typeof (this.template) !== 'string';\n };\n /**\n * Loop through all the inner elements of pager to calculate the required width for pager child elements.\n *\n * @returns {number} returns the actual width occupied by pager elements.\n */\n Pager.prototype.calculateActualWidth = function () {\n var pagerElements = this.element.querySelectorAll(\n /* tslint:disable-next-line:max-line-length */\n '.e-mfirst, .e-mprev, .e-icon-first, .e-icon-prev, .e-pp:not(.e-disable), .e-numericitem:not(.e-hide), .e-numericitem.e-active.e-hide, .e-np:not(.e-disable), .e-icon-next, .e-icon-last, .e-parentmsgbar, .e-mnext, .e-mlast, .e-pagerdropdown, .e-pagerconstant');\n var actualWidth = 0;\n for (var i = 0; i < pagerElements.length; i++) {\n if (getComputedStyle(pagerElements[parseInt(i.toString(), 10)]).display !== 'none') {\n actualWidth += pagerElements[parseInt(i.toString(), 10)].offsetWidth\n + parseFloat(getComputedStyle(pagerElements[parseInt(i.toString(), 10)]).marginLeft)\n + parseFloat(getComputedStyle(pagerElements[parseInt(i.toString(), 10)]).marginRight);\n }\n }\n var pagerContainer = this.element.querySelector('.e-pagercontainer');\n actualWidth += parseFloat(getComputedStyle(pagerContainer).marginLeft)\n + parseFloat(getComputedStyle(pagerContainer).marginRight);\n return actualWidth;\n };\n /**\n * Resize pager component by hiding pager component's numeric items based on total width available for pager.\n *\n * @returns {void}\n */\n Pager.prototype.resizePager = function () {\n var _this = this;\n var isStyleApplied = this.element.classList.contains('e-pager') ? getComputedStyle(this.element).getPropertyValue('border-style').includes('solid') : null;\n if (!(this.template) && isStyleApplied) {\n var pagerContainer = this.element.querySelector('.e-pagercontainer');\n var actualWidth = this.calculateActualWidth();\n var pagerWidth = this.element.clientWidth\n - parseFloat(getComputedStyle(this.element).paddingLeft)\n - parseFloat(getComputedStyle(this.element).paddingRight)\n - parseFloat(getComputedStyle(this.element).marginLeft)\n - parseFloat(getComputedStyle(this.element).marginRight);\n var numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n var hiddenNumItems = pagerContainer.querySelectorAll('.e-numericitem.e-hide:not([style*=\"display: none\"])');\n var hideFrom = numItems.length;\n var showFrom = 1;\n var bufferWidth = (!isNullOrUndefined(parentsUntil(this.element, 'e-bigger'))) ? 10 : 5;\n var NP = pagerContainer.querySelector('.e-np');\n var PP = pagerContainer.querySelector('.e-pp');\n var detailItems = this.element.querySelectorAll('.e-parentmsgbar:not(.e-hide):not([style*=\"display: none\"]), .e-pagesizes:not(.e-hide):not([style*=\"display: none\"])');\n var totDetailWidth_1 = 0;\n if (detailItems.length) {\n detailItems.forEach(function (item) {\n totDetailWidth_1 += item.offsetWidth;\n });\n this.averageDetailWidth = totDetailWidth_1 / detailItems.length;\n }\n var totalWidth = 0;\n /**\n * Loop to calculate average width of numeric item.\n */\n for (var i = 0; i < numItems.length; i++) {\n totalWidth += numItems[parseInt(i.toString(), 10)].offsetWidth\n + parseFloat(getComputedStyle(numItems[parseInt(i.toString(), 10)]).marginLeft)\n + parseFloat(getComputedStyle(numItems[parseInt(i.toString(), 10)]).marginRight);\n }\n var numericItemWidth = totalWidth / numItems.length;\n /**\n * Condition to hide numeric items when calculated actual width exceeds available pager space.\n */\n if (pagerWidth !== 0 && (actualWidth >= (pagerWidth - (numericItemWidth ? numericItemWidth : 0)))) {\n this.isPagerResized = true;\n if (this.currentPage !== this.totalPages) {\n classList(NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n actualWidth = this.calculateActualWidth();\n var diff = Math.abs((actualWidth) - pagerWidth);\n // To calculate number of numeric items need to be hidden.\n var numToHide = Math.ceil(diff / (numericItemWidth));\n numToHide = (numToHide === 0) ? 1 : (numToHide > numItems.length) ? (numItems.length - 1) : numToHide;\n for (var i = 1; i <= numToHide; i++) {\n var hideIndex = hideFrom - parseInt(i.toString(), 10);\n numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n if (this.currentPage !== 1 && ((parseInt(numItems[Math.abs(hideIndex)].getAttribute('index'), 10) === this.currentPage)\n || parseInt(numItems[numItems.length - 1].getAttribute('index'), 10) === this.currentPage)) {\n hideIndex = 0;\n classList(PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n if (numItems[Math.abs(hideIndex)] && !(numItems[Math.abs(hideIndex)].classList.contains('e-currentitem'))) {\n numItems[Math.abs(hideIndex)].classList.add('e-hide');\n }\n }\n numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n // To hide Pager message elements when no more numeric items available to hide.\n if (numItems.length <= 1 && detailItems.length && window.innerWidth >= 768) {\n var pagerDetailItemsWidth = this.calculateActualWidth();\n if ((pagerDetailItemsWidth) > (pagerWidth - bufferWidth)) {\n var detailtoHide = Math.floor((pagerWidth - (pagerDetailItemsWidth - totDetailWidth_1))\n / this.averageDetailWidth);\n detailtoHide = detailItems.length - detailtoHide;\n for (var i = 0; i < (detailtoHide > detailItems.length ? detailItems.length : detailtoHide); i++) {\n detailItems[parseInt(i.toString(), 10)].classList.add('e-hide');\n }\n }\n }\n }\n /**\n * Condition to show numeric items when space availble in pager at dom.\n */\n else if (actualWidth < (pagerWidth) && hiddenNumItems.length) {\n var diff = Math.abs(pagerWidth - (actualWidth));\n var hiddenDetailItems = this.element.querySelectorAll('.e-parentmsgbar.e-hide, .e-pagesizes.e-hide');\n // To show Pager message elements.\n if (hiddenDetailItems.length && (diff > (this.averageDetailWidth + (this.averageDetailWidth / 4)))) {\n hiddenDetailItems[(hiddenDetailItems.length - 1)].classList.remove('e-hide');\n }\n if ((diff > (numericItemWidth * 2) && !hiddenDetailItems.length && window.innerWidth >= 768)) {\n // To calculate number of numeric items need to be shown.\n var numToShow = Math.floor((diff) / (numericItemWidth + bufferWidth));\n numToShow = (numToShow > hiddenNumItems.length) ? hiddenNumItems.length : (numToShow - 1);\n //Seggregating hidden num items as less index and greater index values than current page value.\n var lesserIndexItems = Array.from(hiddenNumItems).filter(function (item) { return parseInt(item.getAttribute('index'), 10) < _this.currentPage; }).sort(function (a, b) { return parseInt(b.getAttribute('index'), 10) - parseInt(a.getAttribute('index'), 10); });\n var greaterIndexItems = Array.from(hiddenNumItems).filter(function (item) { return parseInt(item.getAttribute('index'), 10) > _this.currentPage; });\n var showItems = (lesserIndexItems.length && lesserIndexItems)\n || (greaterIndexItems.length && greaterIndexItems);\n for (var i = 1; i <= numToShow; i++) {\n var showItem = showItems && showItems[Math.abs(showFrom - i)];\n if (showItem) {\n showItem.classList.remove('e-hide');\n if (showItem === showItems[showItems.length - 1]) {\n showItems = null;\n }\n }\n }\n }\n }\n numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n if (numItems.length) {\n if (parseInt(numItems[numItems.length - 1].getAttribute('index'), 10) === this.totalPages) {\n classList(NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n if (parseInt(numItems[0].getAttribute('index'), 10) === 1) {\n classList(PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n var isLastSet = Array.from(numItems).some(function (item) { return parseInt(item.getAttribute('index'), 10) === _this.totalPages; });\n var ppIndex = (parseInt(numItems[0].getAttribute('index'), 10) - (isLastSet ? this.avgNumItems : numItems.length));\n PP.setAttribute('index', (ppIndex < 1) ? '1' : ppIndex.toString());\n NP.setAttribute('index', (parseInt(numItems[numItems.length - 1].getAttribute('index'), 10) + 1).toString());\n this.avgNumItems = isLastSet ? this.avgNumItems : numItems.length;\n }\n }\n };\n __decorate([\n Property(false)\n ], Pager.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], Pager.prototype, \"enableExternalMessage\", void 0);\n __decorate([\n Property(true)\n ], Pager.prototype, \"enablePagerMessage\", void 0);\n __decorate([\n Property(12)\n ], Pager.prototype, \"pageSize\", void 0);\n __decorate([\n Property(10)\n ], Pager.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], Pager.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"externalMessage\", void 0);\n __decorate([\n Property(false)\n ], Pager.prototype, \"pageSizes\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], Pager.prototype, \"customText\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"click\", void 0);\n __decorate([\n Property('')\n ], Pager.prototype, \"cssClass\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"dropDownChanged\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"created\", void 0);\n Pager = __decorate([\n NotifyPropertyChanges\n ], Pager);\n return Pager;\n}(Component));\nexport { Pager };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * `PagerDropDown` module handles selected pageSize from DropDownList.\n */\nvar PagerDropDown = /** @class */ (function () {\n /**\n * Constructor for pager module\n *\n * @param {Pager} pagerModule - specifies the pagermodule\n * @hidden\n */\n function PagerDropDown(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n * @hidden\n */\n PagerDropDown.prototype.getModuleName = function () {\n return 'pagerdropdown';\n };\n /**\n * The function is used to render pager dropdown\n *\n * @returns {void}\n * @hidden\n */\n PagerDropDown.prototype.render = function () {\n var pagerObj = this.pagerModule;\n this.pagerDropDownDiv = createElement('div', { className: 'e-pagesizes' });\n var dropDownDiv = createElement('div', { className: 'e-pagerdropdown' });\n var defaultTextDiv = createElement('div', { className: 'e-pagerconstant' });\n var input = createElement('input', { attrs: { type: 'text', tabindex: '-1' } });\n this.pagerCons = createElement('span', {\n className: 'e-constant', innerHTML: this.pagerModule.getLocalizedLabel('pagerDropDown')\n });\n dropDownDiv.appendChild(input);\n defaultTextDiv.appendChild(this.pagerCons);\n this.pagerDropDownDiv.appendChild(dropDownDiv);\n this.pagerDropDownDiv.appendChild(defaultTextDiv);\n this.pagerModule.element.appendChild(this.pagerDropDownDiv);\n var pageSizesModule = this.pagerModule.pageSizes;\n var pageSizesArray = (pageSizesModule.length ? this.convertValue(pageSizesModule) :\n [this.pagerModule.getLocalizedLabel('All'), '5', '10', '12', '20']);\n var defaultValue = this.pagerModule.pageSize;\n this.dropDownListObject = new DropDownList({\n dataSource: pageSizesArray,\n value: defaultValue.toString(),\n change: this.onChange.bind(this),\n placeholder: this.pagerModule.getLocalizedLabel('pagerDropDown'),\n cssClass: this.pagerModule.cssClass ? 'e-alldrop' + ' ' + this.pagerModule.cssClass : 'e-alldrop'\n });\n this.dropDownListObject.appendTo(input);\n if (pageSizesModule.length) {\n this.dropDownListObject.element.value = this.pagerModule.pageSize.toString();\n }\n pagerObj.pageSize = defaultValue;\n pagerObj.dataBind();\n pagerObj.trigger('dropDownChanged', { pageSize: defaultValue });\n this.addEventListener();\n };\n /**\n * For internal use only - Get the pagesize.\n *\n * @param {ChangeEventArgs} e - specifies the changeeventargs\n * @returns {void}\n * @private\n * @hidden\n */\n PagerDropDown.prototype.onChange = function (e) {\n if (this.dropDownListObject.value === this.pagerModule.getLocalizedLabel('All')) {\n this.pagerModule.pageSize = this.pagerModule.totalRecordsCount;\n this.pagerModule.isAllPage = true;\n this.refresh();\n e.value = this.pagerModule.pageSize;\n if (document.getElementsByClassName('e-popup-open e-alldrop').length) {\n document.getElementsByClassName('e-popup-open e-alldrop')[0].style.display = 'none';\n }\n }\n else {\n this.pagerModule.pageSize = parseInt(this.dropDownListObject.value, 10);\n this.pagerModule.isAllPage = false;\n if (this.pagerCons.innerHTML !== this.pagerModule.getLocalizedLabel('pagerDropDown')) {\n this.refresh();\n }\n }\n this.pagerModule.dataBind();\n this.pagerModule.trigger('dropDownChanged', { pageSize: this.pagerModule.isAllPage ? this.pagerModule.totalRecordsCount :\n parseInt(this.dropDownListObject.value, 10) });\n };\n PagerDropDown.prototype.refresh = function () {\n if (this.pagerCons) {\n if (this.isPageSizeAll(this.pagerModule.pageSize)) {\n this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerAllDropDown');\n }\n else {\n this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerDropDown');\n }\n this.pagerDropDownDiv.classList.remove('e-hide');\n }\n };\n PagerDropDown.prototype.beforeValueChange = function (prop) {\n if (typeof prop.newProp.value === 'number') {\n var val = prop.newProp.value.toString();\n prop.newProp.value = val;\n }\n };\n PagerDropDown.prototype.convertValue = function (pageSizeValue) {\n var item = pageSizeValue;\n for (var i = 0; i < item.length; i++) {\n item[parseInt(i.toString(), 10)] = parseInt(item[parseInt(i.toString(), 10)], 10) ?\n item[parseInt(i.toString(), 10)].toString() : (this.pagerModule.getLocalizedLabel(item[parseInt(i.toString(), 10)]) !== '')\n ? this.pagerModule.getLocalizedLabel(item[parseInt(i.toString(), 10)]) : item[parseInt(i.toString(), 10)];\n }\n return item;\n };\n PagerDropDown.prototype.isPageSizeAll = function (value) {\n var pageSizeNum = typeof (value) === 'string' && value !== this.pagerModule.getLocalizedLabel('All') ?\n parseInt(value, 10) : value;\n if (pageSizeNum === this.pagerModule.totalRecordsCount || value === this.pagerModule.getLocalizedLabel('All')) {\n return true;\n }\n else {\n return false;\n }\n };\n PagerDropDown.prototype.setDropDownValue = function (prop, value) {\n if (this.dropDownListObject) {\n var isbeforeAll = this.pagerModule.isAllPage;\n this.pagerModule.isAllPage = this.isPageSizeAll(value);\n this.pagerModule.checkAll = (isbeforeAll && this.pagerModule.isAllPage) ? true : false;\n this.dropDownListObject[\"\" + prop] = this.pagerModule.isAllPage ? this.pagerModule.getLocalizedLabel('All') : value;\n }\n };\n PagerDropDown.prototype.addEventListener = function () {\n this.dropDownListObject.on('beforeValueChange', this.beforeValueChange, this);\n };\n PagerDropDown.prototype.removeEventListener = function () {\n this.dropDownListObject.off('beforeValueChange', this.beforeValueChange);\n };\n /**\n * To destroy the Pagerdropdown\n *\n * @param {string} args - specifies the arguments\n * @param {string} args.requestType - specfies the request type\n * @returns {void}\n * @hidden\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n PagerDropDown.prototype.destroy = function (args) {\n if (this.dropDownListObject && !this.dropDownListObject.isDestroyed) {\n this.removeEventListener();\n this.dropDownListObject.destroy();\n remove(this.pagerDropDownDiv);\n }\n };\n return PagerDropDown;\n}());\nexport { PagerDropDown };\n","import { createElement, remove, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `ExternalMessage` module is used to display user provided message.\n */\nvar ExternalMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n *\n * @param {Pager} pagerModule - specifies the pagermodule\n * @hidden\n */\n function ExternalMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n ExternalMessage.prototype.getModuleName = function () {\n return 'externalMessage';\n };\n /**\n * The function is used to render pager externalMessage\n *\n * @returns {void}\n * @hidden\n */\n ExternalMessage.prototype.render = function () {\n this.element = createElement('div', { className: 'e-pagerexternalmsg', attrs: { 'aria-label': this.pagerModule.getLocalizedLabel('ExternalMsg') } });\n this.pagerModule.element.appendChild(this.element);\n this.refresh();\n };\n /**\n * Refreshes the external message of Pager.\n *\n * @returns {void}\n */\n ExternalMessage.prototype.refresh = function () {\n if (this.pagerModule.externalMessage && this.pagerModule.externalMessage.toString().length) {\n this.showMessage();\n this.element.innerHTML = this.pagerModule.externalMessage;\n }\n else {\n this.hideMessage();\n }\n };\n /**\n * Hides the external message of Pager.\n *\n * @returns {void}\n */\n ExternalMessage.prototype.hideMessage = function () {\n if (!isNullOrUndefined(this.element)) {\n this.element.style.display = 'none';\n }\n };\n /**\n * Shows the external message of the Pager.\n *\n * @returns {void}s\n */\n ExternalMessage.prototype.showMessage = function () {\n this.element.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n *\n * @function destroy\n * @returns {void}\n * @hidden\n */\n ExternalMessage.prototype.destroy = function () {\n remove(this.element);\n };\n return ExternalMessage;\n}());\nexport { ExternalMessage };\n","import { extend } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Pager } from '../../pager/pager';\nimport { PagerDropDown } from '../../pager/pager-dropdown';\nimport { ExternalMessage } from '../../pager/external-message';\nimport { extend as gridExtend, getActualProperties, isActionPrevent, addRemoveEventListener, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * The `Page` module is used to render pager and handle paging action.\n */\nvar Page = /** @class */ (function () {\n /**\n * Constructor for the Grid paging module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {PageSettingsModel} pageSettings - specifies the PageSettingsModel\n * @hidden\n */\n function Page(parent, pageSettings) {\n this.isInitialRender = true;\n this.isCancel = false;\n Pager.Inject(ExternalMessage, PagerDropDown);\n this.parent = parent;\n this.pageSettings = pageSettings;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * The function used to render pager from grid pageSettings\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.render = function () {\n var gObj = this.parent;\n this.pagerDestroy();\n if (!isNullOrUndefined(this.parent.pagerTemplate)) {\n this.pageSettings.template = this.parent.pagerTemplate;\n this.parent.pageTemplateChange = true;\n }\n this.element = this.parent.createElement('div', { className: 'e-gridpager' });\n var pagerObj = gridExtend({}, extend({}, getActualProperties(this.pageSettings)), {\n click: this.clickHandler.bind(this),\n dropDownChanged: this.onSelect.bind(this),\n enableRtl: gObj.enableRtl, locale: gObj.locale,\n created: this.addAriaAttr.bind(this)\n }, ['parentObj', 'propName']);\n pagerObj.cssClass = this.parent.cssClass ? this.parent.cssClass : '';\n this.pagerObj = new Pager(pagerObj, undefined, this.parent);\n this.pagerObj.hasParent = true;\n this.pagerObj.on(events.pagerRefresh, this.renderReactPagerTemplate, this);\n this.pagerObj.allowServerDataBinding = false;\n };\n Page.prototype.onSelect = function (e) {\n this.pageSettings.pageSize = e.pageSize;\n if (!this.isInitialLoad) {\n this.pageSettings.currentPage = 1;\n }\n };\n Page.prototype.addAriaAttr = function () {\n if (!(this.pageSettings.template)) {\n var numericContainerNew = this.parent.createElement('div', { className: 'e-numericcontainer' });\n var pagerContainer = this.element.querySelector('.e-pagercontainer');\n var frag = document.createDocumentFragment();\n var numericContainer = this.element.querySelector('.e-numericcontainer');\n var links = numericContainer.querySelectorAll('a');\n for (var i = 0; i < links.length; i++) {\n if (this.parent.getContentTable()) {\n links[parseInt(i.toString(), 10)].setAttribute('aria-owns', this.parent.getContentTable().id);\n }\n else {\n links[parseInt(i.toString(), 10)].setAttribute('aria-owns', this.parent.element.getAttribute('id') + '_content_table');\n }\n var numericContainerDiv = this.parent.createElement('div');\n numericContainerDiv.appendChild(links[parseInt(i.toString(), 10)]);\n frag.appendChild(numericContainerDiv);\n }\n numericContainerNew.appendChild(frag);\n pagerContainer.replaceChild(numericContainerNew, numericContainer);\n var classList = ['.e-mfirst', '.e-mprev', '.e-first', '.e-prev', '.e-next', '.e-last', '.e-mnext', '.e-mlast'];\n for (var j = 0; j < classList.length; j++) {\n var element = this.element.querySelector(classList[parseInt(j.toString(), 10)]);\n if (this.parent.getContentTable()) {\n element.setAttribute('aria-owns', this.parent.getContentTable().id);\n }\n }\n }\n };\n Page.prototype.dataReady = function (e) {\n this.updateModel(e);\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.pagerObj.refresh();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.pagerObj.goToPage(pageNo);\n };\n /**\n * @param {number} pageSize - specifies the page size\n * @returns {void}\n * @hidden\n */\n Page.prototype.setPageSize = function (pageSize) {\n this.pagerObj.setPageSize(pageSize);\n };\n /**\n * The function used to update pageSettings model\n *\n * @param {NotifyArgs} e - specfies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Page.prototype.updateModel = function (e) {\n this.parent.pageSettings.totalRecordsCount = e.count;\n if ((e.action === 'add' && e.requestType === 'save') || (e.requestType === 'batchsave')) {\n if (this.pagerObj.isAllPage && (e.count === this.pageSettings.pageSize)) {\n this.pagerObj.setProperties({ pageSize: e.count }, true);\n }\n }\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Page.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n currentPage: this.parent.pageSettings.currentPage, requestType: 'paging',\n type: events.actionComplete\n }));\n };\n /**\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Page.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.pagerObj[\"\" + prop] = newProp[\"\" + prop];\n }\n this.pagerObj.dataBind();\n };\n Page.prototype.clickHandler = function (e) {\n var gObj = this.parent;\n if (this.isForceCancel || isActionPrevent(gObj) && !gObj.prevPageMoving && !this.isCancel) {\n if (!this.isForceCancel) {\n if (!isNullOrUndefined(e.newProp) && !isNullOrUndefined(e.newProp.pageSize)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.setPageSize, arg1: e.newProp.pageSize });\n this.pagerObj.pageSize = e.oldProp.pageSize;\n gObj.pageSettings.pageSize = e.newProp.pageSize;\n }\n else if (e.currentPage) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.goToPage, arg1: e.currentPage });\n this.pagerObj.currentPage = gObj.pageSettings.currentPage === this.pagerObj.currentPage ?\n this.pagerObj.previousPageNo : gObj.pageSettings.currentPage;\n }\n this.isForceCancel = true;\n this.pagerObj.dataBind();\n }\n else {\n this.isForceCancel = false;\n }\n e.cancel = true;\n return;\n }\n gObj.pageSettings.pageSize = this.pagerObj.pageSize;\n gObj.prevPageMoving = false;\n var prevPage = this.pageSettings.currentPage;\n var args = {\n cancel: false, requestType: 'paging', previousPage: prevPage,\n currentPage: e.currentPage, pageSize: gObj.pageSettings.pageSize, type: events.actionBegin\n };\n if (!this.isCancel) {\n this.pageSettings.currentPage = e.currentPage;\n this.parent.notify(events.modelChanged, args);\n }\n if (args.cancel) {\n e.cancel = true;\n this.pageSettings.currentPage = prevPage;\n this.pagerObj.currentPage = prevPage;\n this.isCancel = true;\n return;\n }\n this.isCancel = false;\n this.parent.requestTypeAction = 'paging';\n };\n Page.prototype.keyPressHandler = function (e) {\n if (e.action in keyActions) {\n e.preventDefault();\n this.element.querySelector(keyActions[e.action]).click();\n }\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n if (!this.pagerObj.enableExternalMessage) {\n this.pagerObj.enableExternalMessage = true;\n this.pagerObj.dataBind();\n }\n this.pagerObj.externalMessage = message;\n this.pagerObj.dataBind();\n };\n Page.prototype.appendToElement = function () {\n this.isInitialLoad = true;\n this.parent.element.appendChild(this.element);\n this.parent.setGridPager(this.element);\n this.pagerObj.isReact = this.parent.isReact;\n this.pagerObj.isVue = this.parent.isVue;\n this.pagerObj.appendTo(this.element);\n this.isInitialLoad = false;\n };\n Page.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n this.appendToElement();\n if (this.isReactTemplate()) {\n this.pagerObj.updateTotalPages();\n this.created();\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Page.prototype.addEventListener = function () {\n this.handlers = {\n load: this.render,\n end: this.appendToElement,\n ready: this.dataReady,\n complete: this.onActionComplete,\n updateLayout: this.enableAfterRender,\n inboundChange: this.onPropertyChanged,\n keyPress: this.keyPressHandler,\n created: this.created\n };\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.parent.isReact || this.parent.isVue) {\n this.parent.addEventListener(literals.create, this.handlers.created.bind(this));\n }\n this.evtHandlers = [{ event: events.initialLoad, handler: this.handlers.load },\n { event: events.initialEnd, handler: this.handlers.end },\n { event: events.dataReady, handler: this.handlers.ready },\n { event: events.pageComplete, handler: this.handlers.complete },\n { event: events.uiUpdate, handler: this.handlers.updateLayout },\n { event: events.inBoundModelChanged, handler: this.handlers.inboundChange },\n { event: events.keyPressed, handler: this.handlers.keyPress },\n { event: events.destroy, handler: this.destroy }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n };\n Page.prototype.created = function () {\n if (this.isInitialRender && this.isReactTemplate()) {\n this.isInitialRender = false;\n this.renderReactPagerTemplate();\n }\n };\n Page.prototype.isReactTemplate = function () {\n return (this.parent.isReact || this.parent.isVue) && this.pagerObj.template && typeof (this.pagerObj.template) !== 'string';\n };\n Page.prototype.renderReactPagerTemplate = function () {\n if (!this.isInitialRender && this.isReactTemplate()) {\n var result = void 0;\n this.parent.destroyTemplate(['pagerTemplate']);\n this.element.classList.add('e-pagertemplate');\n this.pagerObj.compile(this.pagerObj.template);\n var page = this.parent.pageSettings;\n var data = {\n currentPage: page.currentPage, pageSize: page.pageSize, pageCount: page.pageCount,\n totalRecordsCount: page.totalRecordsCount, totalPages: this.pagerObj.totalPages\n };\n var tempId = this.parent.id + '_pagertemplate';\n if (this.parent.isReact) {\n this.pagerObj.templateFn(data, this.parent, 'pagerTemplate', tempId, null, null, this.pagerObj.element);\n this.parent.renderTemplates();\n }\n else {\n result = this.pagerObj.templateFn(data, this.parent, 'pagerTemplate');\n appendChildren(this.pagerObj.element, result);\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.parent.isReact || this.parent.isVue) {\n this.parent.removeEventListener(literals.create, this.handlers.created);\n }\n this.parent.off(events.pagerRefresh, this.renderReactPagerTemplate);\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n if (this.isReactTemplate()) {\n this.parent.destroyTemplate(['pagerTemplate']);\n }\n this.pagerObj.destroy();\n };\n Page.prototype.pagerDestroy = function () {\n if (this.pagerObj && !this.pagerObj.isDestroyed) {\n this.pagerObj.destroy();\n remove(this.element);\n }\n };\n return Page;\n}());\nexport { Page };\n/**\n * @hidden\n */\nvar keyActions = {\n pageUp: '.e-prev',\n pageDown: '.e-next',\n ctrlAltPageDown: '.e-last',\n ctrlAltPageUp: '.e-first',\n altPageUp: '.e-pp',\n altPageDown: '.e-np'\n};\n","import { EventHandler, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { remove, select, removeClass } from '@syncfusion/ej2-base';\nimport { Toolbar as tool } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { templateCompiler, appendChildren, parentsUntil, addRemoveEventListener } from '../base/util';\nimport { ResponsiveToolbarAction } from '../base/enum';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n *\n * The `Toolbar` module is used to handle ToolBar actions.\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.predefinedItems = {};\n this.isSearched = false;\n this.items = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print', 'Search',\n 'ColumnChooser', 'PdfExport', 'ExcelExport', 'CsvExport', 'WordExport'];\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n var preItems = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print',\n 'PdfExport', 'ExcelExport', 'WordExport', 'CsvExport'];\n var isAdaptive = this.parent.enableAdaptiveUI;\n var excludingItems = ['Edit', 'Delete', 'Update', 'Cancel'];\n for (var _i = 0, preItems_1 = preItems; _i < preItems_1.length; _i++) {\n var item = preItems_1[_i];\n var itemStr = item.toLowerCase();\n var localeName = itemStr[0].toUpperCase() + itemStr.slice(1);\n this.predefinedItems[\"\" + item] = {\n id: this.gridID + '_' + itemStr, prefixIcon: 'e-' + itemStr,\n text: this.l10n.getConstant(localeName), tooltipText: this.l10n.getConstant(localeName)\n };\n if (isAdaptive) {\n this.predefinedItems[\"\" + item].text = '';\n this.predefinedItems[\"\" + item].visible = excludingItems.indexOf(item) === -1;\n }\n }\n this.predefinedItems.Search = {\n id: this.gridID + '_search',\n tooltipText: this.l10n.getConstant('Search'), align: 'Right', cssClass: 'e-search-wrapper',\n type: 'Input'\n };\n this.predefinedItems.ColumnChooser = {\n id: this.gridID + '_' + 'columnchooser', cssClass: 'e-cc e-ccdiv e-cc-toolbar', suffixIcon: 'e-' + 'columnchooser-btn',\n text: isAdaptive ? '' : this.l10n.getConstant('Columnchooser'),\n tooltipText: this.l10n.getConstant('Columnchooser'), align: 'Right'\n };\n if (this.parent.rowRenderingMode === 'Vertical') {\n if (this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') {\n this.predefinedItems.responsiveFilter = {\n id: this.gridID + '_' + 'responsivefilter', cssClass: 'e-gridresponsiveicons e-icons',\n suffixIcon: 'e-' + 'resfilter-icon', tooltipText: this.l10n.getConstant('FilterButton')\n };\n }\n if (this.parent.allowSorting) {\n this.predefinedItems.responsiveSort = {\n id: this.gridID + '_' + 'responsivesort', cssClass: 'e-gridresponsiveicons e-icons',\n suffixIcon: 'e-' + 'ressort-icon', tooltipText: this.l10n.getConstant('Sort')\n };\n }\n }\n if (this.parent.enableAdaptiveUI && this.parent.toolbar && this.parent.toolbar.indexOf('Search') > -1) {\n this.predefinedItems.responsiveBack = {\n id: this.gridID + '_' + 'responsiveback', cssClass: 'e-gridresponsiveicons e-icons',\n suffixIcon: 'e-' + 'resback-icon', visible: false\n };\n }\n this.createToolbar();\n };\n /**\n * Gets the toolbar of the Grid.\n *\n * @returns {Element} returns the element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.toolbar.element;\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n if (this.toolbar && !this.toolbar.isDestroyed) {\n if (!this.toolbar.element) {\n this.parent.destroyTemplate(['toolbarTemplate']);\n if (this.parent.isReact) {\n this.parent.renderTemplates();\n }\n }\n else {\n this.toolbar.off('render-react-toolbar-template', this.addReactToolbarPortals);\n this.toolbar.destroy();\n }\n this.unWireEvent();\n this.removeEventListener();\n if (this.element.parentNode) {\n remove(this.element);\n }\n }\n };\n Toolbar.prototype.bindSearchEvents = function () {\n this.searchElement = select('#' + this.gridID + '_searchbar', this.element);\n this.wireEvent();\n this.refreshToolbarItems();\n if (this.parent.searchSettings) {\n this.updateSearchBox();\n }\n };\n Toolbar.prototype.toolbarCreated = function (isNormal) {\n if (this.element.querySelector('.e-search-wrapper')) {\n if (!this.parent.enableAdaptiveUI || isNormal) {\n var classList = this.parent.cssClass ? 'e-input-group e-search ' + this.parent.cssClass\n : 'e-input-group e-search';\n this.element.querySelector('.e-search-wrapper').innerHTML = '
\\\n \\\n \\\n \\\n
';\n }\n else {\n this.element.querySelector('.e-search-wrapper').innerHTML = '\\\n \\\n
';\n }\n }\n this.bindSearchEvents();\n };\n Toolbar.prototype.createToolbar = function () {\n var items = this.getItems();\n this.toolbar = new tool({\n items: items,\n clicked: this.toolbarClickHandler.bind(this),\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n created: this.toolbarCreated.bind(this),\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n this.toolbar.isReact = this.parent.isReact;\n this.toolbar.on('render-react-toolbar-template', this.addReactToolbarPortals, this);\n var isStringTemplate = 'isStringTemplate';\n this.toolbar[\"\" + isStringTemplate] = true;\n var viewStr = 'viewContainerRef';\n var registerTemp = 'registeredTemplate';\n if (this.parent[\"\" + viewStr]) {\n this.toolbar[\"\" + registerTemp] = {};\n this.toolbar[\"\" + viewStr] = this.parent[\"\" + viewStr];\n }\n this.element = this.parent.createElement('div', { id: this.gridID + '_toolbarItems' });\n if (this.parent.enableAdaptiveUI) {\n this.element.classList.add('e-res-toolbar');\n }\n if (this.parent.toolbarTemplate) {\n if (typeof (this.parent.toolbarTemplate) === 'string') {\n this.toolbar.appendTo(this.parent.toolbarTemplate);\n this.element = this.toolbar.element;\n }\n else {\n var isReactCompiler = this.parent.isReact && typeof (this.parent.toolbarTemplate) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n var ID = this.parent.element.id + 'toolbarTemplate';\n if (isReactCompiler || isReactChild) {\n templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate', ID, null, null, this.element);\n this.parent.renderTemplates();\n }\n else {\n appendChildren(this.element, templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate'));\n }\n }\n this.element.classList.add('e-temp-toolbar');\n }\n else {\n this.toolbar.appendTo(this.element);\n }\n this.parent.element.insertBefore(this.element, this.parent.getHeaderContent());\n var tlbrLeftElement = this.element.querySelector('.e-toolbar-left');\n var tlbrCenterElement = this.element.querySelector('.e-toolbar-center');\n var tlbrRightElement = this.element.querySelector('.e-toolbar-right');\n var tlbrItems = this.element.querySelector('.e-toolbar-items');\n var tlbrElement = this.element;\n var tlbrLeftWidth = tlbrLeftElement ? tlbrLeftElement.clientWidth : 0;\n var tlbrCenterWidth = tlbrCenterElement ? tlbrCenterElement.clientWidth : 0;\n var tlbrRightWidth = tlbrRightElement ? tlbrRightElement.clientWidth : 0;\n var tlbrItemsWidth = tlbrItems ? tlbrItems.clientWidth : 0;\n var tlbrWidth = tlbrElement ? tlbrElement.clientWidth : 0;\n if (tlbrLeftWidth > tlbrWidth || tlbrCenterWidth > tlbrWidth || tlbrRightWidth > tlbrWidth || tlbrItemsWidth > tlbrWidth) {\n this.toolbar.refreshOverflow();\n }\n };\n Toolbar.prototype.addReactToolbarPortals = function (args) {\n if (this.parent.isReact && args) {\n this.parent.portals = this.parent.portals.concat(args);\n this.parent.renderTemplates();\n }\n };\n Toolbar.prototype.renderResponsiveSearch = function (isRender) {\n if (isRender) {\n this.toolbarCreated(true);\n this.refreshResponsiveToolbarItems(ResponsiveToolbarAction.isSearch);\n this.searchElement = select('#' + this.gridID + '_searchbar', this.element);\n var right = parentsUntil(this.searchElement, 'e-toolbar-right');\n right.classList.add('e-responsive-right');\n if (this.parent.searchSettings) {\n this.updateSearchBox();\n }\n this.searchBoxObj.searchFocus({ target: this.searchElement });\n this.searchElement.focus();\n }\n else {\n this.refreshResponsiveToolbarItems(ResponsiveToolbarAction.isInitial);\n }\n };\n Toolbar.prototype.refreshResponsiveToolbarItems = function (action) {\n if (action === ResponsiveToolbarAction.isInitial) {\n var id = this.parent.element.id;\n var items = [id + '_edit', id + '_delete'];\n var selectedRecords = this.parent.getSelectedRowIndexes();\n var excludingItems = [id + '_responsiveback', id + '_update', id + '_cancel'];\n for (var _i = 0, _a = this.toolbar.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var toolbarEle = item.template.length ? this.toolbar.element.querySelector(item.template) : this.toolbar.element.querySelector('#' + item.id);\n if (toolbarEle) {\n if (items.indexOf(item.id) > -1) {\n if (selectedRecords.length) {\n toolbarEle.parentElement.classList.remove('e-hidden');\n }\n else {\n toolbarEle.parentElement.classList.add('e-hidden');\n }\n }\n else {\n if (excludingItems.indexOf(item.id) === -1) {\n toolbarEle.parentElement.classList.remove('e-hidden');\n }\n else {\n toolbarEle.parentElement.classList.add('e-hidden');\n }\n }\n }\n }\n if (this.searchElement) {\n var right = parentsUntil(this.searchElement, 'e-toolbar-right');\n right.classList.remove('e-responsive-right');\n this.toolbarCreated(false);\n this.unWireEvent();\n this.searchElement = undefined;\n }\n }\n if (action === ResponsiveToolbarAction.isSearch) {\n var items = [this.parent.element.id + '_responsiveback', this.parent.element.id + '_search'];\n for (var _b = 0, _c = this.toolbar.items; _b < _c.length; _b++) {\n var item = _c[_b];\n var toolbarEle = this.toolbar.element.querySelector('#' + item.id);\n if (toolbarEle) {\n if (items.indexOf(item.id) > -1) {\n toolbarEle.parentElement.classList.remove('e-hidden');\n }\n else {\n toolbarEle.parentElement.classList.add('e-hidden');\n }\n }\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Toolbar.prototype.refreshToolbarItems = function (args) {\n var gObj = this.parent;\n var enableItems = [];\n var disableItems = [];\n var edit = gObj.editSettings;\n var hasData = gObj.currentViewData && gObj.currentViewData.length;\n if (edit.allowAdding) {\n enableItems.push(this.gridID + '_add');\n }\n else {\n disableItems.push(this.gridID + '_add');\n }\n if (edit.allowEditing && hasData) {\n enableItems.push(this.gridID + '_edit');\n }\n else {\n disableItems.push(this.gridID + '_edit');\n }\n if (edit.allowDeleting && hasData) {\n enableItems.push(this.gridID + '_delete');\n }\n else {\n disableItems.push(this.gridID + '_delete');\n }\n if (gObj.editSettings.mode === 'Batch') {\n if (gObj.element.getElementsByClassName('e-updatedtd').length && (edit.allowAdding || edit.allowEditing)) {\n enableItems.push(this.gridID + '_update');\n enableItems.push(this.gridID + '_cancel');\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n else {\n if (gObj.isEdit && (edit.allowAdding || edit.allowEditing)) {\n enableItems = [this.gridID + '_update', this.gridID + '_cancel'];\n disableItems = [this.gridID + '_add', this.gridID + '_edit', this.gridID + '_delete'];\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n this.enableItems(enableItems, true);\n this.enableItems(disableItems, false);\n };\n Toolbar.prototype.getItems = function () {\n var items = [];\n var toolbarItems = this.parent.toolbar || [];\n if (typeof (this.parent.toolbar) === 'string') {\n return [];\n }\n if (this.parent.rowRenderingMode === 'Vertical') {\n if (this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') {\n items.push(this.getItemObject('responsiveFilter'));\n }\n if (this.parent.allowSorting) {\n items.push(this.getItemObject('responsiveSort'));\n }\n }\n for (var _i = 0, toolbarItems_1 = toolbarItems; _i < toolbarItems_1.length; _i++) {\n var item = toolbarItems_1[_i];\n switch (typeof item) {\n case 'number':\n items.push(this.getItemObject(this.items[item]));\n break;\n case 'string':\n items.push(this.getItemObject(item));\n break;\n default:\n items.push(this.getItem(item));\n }\n }\n if (this.parent.enableAdaptiveUI && this.parent.toolbar && this.parent.toolbar.indexOf('Search') > -1) {\n items.push(this.getItemObject('responsiveBack'));\n }\n return items;\n };\n Toolbar.prototype.getItem = function (itemObject) {\n var item = this.predefinedItems[itemObject.text];\n return item ? extend(item, item, itemObject) : itemObject;\n };\n Toolbar.prototype.getItemObject = function (itemName) {\n return this.predefinedItems[\"\" + itemName] || { text: itemName, id: this.gridID + '_' + itemName };\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n var element = select('#' + item, this.element);\n if (element) {\n this.toolbar.enableItems(element.parentElement, isEnable);\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var _this = this;\n var gObj = this.parent;\n var gID = this.gridID;\n extend(args, { cancel: false });\n var newArgs = args;\n var originalEvent = args.originalEvent;\n gObj.trigger(events.toolbarClick, newArgs, function (toolbarargs) {\n toolbarargs.originalEvent = toolbarargs.originalEvent ? toolbarargs.originalEvent : originalEvent;\n if (!toolbarargs.cancel) {\n switch (!isNullOrUndefined(toolbarargs.item) && toolbarargs.item.id) {\n case gID + '_print':\n gObj.print();\n break;\n case gID + '_edit':\n gObj.startEdit();\n break;\n case gID + '_update':\n gObj.endEdit();\n break;\n case gID + '_cancel':\n gObj.closeEdit();\n break;\n case gID + '_add':\n gObj.addRecord();\n break;\n case gID + '_delete':\n gObj.deleteRecord();\n break;\n case gID + '_search':\n if (toolbarargs.originalEvent.target.id === gID + '_searchbutton' && _this.searchElement) {\n _this.search();\n }\n else if (gObj.enableAdaptiveUI && !_this.searchElement\n && (toolbarargs.originalEvent.target.classList.contains('e-search-wrapper')\n || toolbarargs.originalEvent.target.id === gID + '_searchbutton')) {\n _this.renderResponsiveSearch(true);\n }\n else if (toolbarargs.originalEvent.target.classList.contains('e-clear-icon') && toolbarargs.originalEvent.target.id === gID + '_clearbutton' && _this.searchElement) {\n _this.searchElement.value = '';\n if (_this.searchElement) {\n _this.sIcon = _this.searchElement.parentElement.querySelector('.e-sicon');\n _this.sIcon.classList.remove('e-clear-icon');\n _this.sIcon.removeAttribute('title');\n _this.sIcon.style.cursor = 'default';\n }\n if (_this.isSearched || _this.parent.searchSettings.key.length) {\n _this.parent.search(_this.searchElement.value);\n _this.isSearched = false;\n }\n }\n break;\n case gID + '_columnchooser':\n /* eslint-disable */\n var tarElement = _this.parent.element.querySelector('.e-ccdiv');\n var y = tarElement.getBoundingClientRect().top;\n var x = tarElement.getBoundingClientRect().left;\n var targetEle = toolbarargs.originalEvent.target;\n /* eslint-enable */\n y = tarElement.getBoundingClientRect().top + tarElement.offsetTop;\n gObj.createColumnchooser(x, y, targetEle);\n break;\n case gID + '_responsivefilter':\n gObj.showResponsiveCustomFilter();\n break;\n case gID + '_responsivesort':\n gObj.showResponsiveCustomSort();\n break;\n case gID + '_responsiveback':\n _this.renderResponsiveSearch(false);\n break;\n }\n }\n });\n };\n Toolbar.prototype.modelChanged = function (e) {\n if (e.module === 'edit') {\n this.refreshToolbarItems();\n }\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() || !this.parent.toolbar) {\n return;\n }\n if (this.element) {\n remove(this.element);\n }\n this.render();\n };\n Toolbar.prototype.keyUpHandler = function (e) {\n if (e.keyCode === 13) {\n this.search();\n }\n if (this.searchElement) {\n this.sIcon = this.searchElement.parentElement.querySelector('.e-sicon');\n if (this.searchElement.value.length && !isNullOrUndefined(this.sIcon)) {\n this.sIcon.classList.add('e-clear-icon');\n this.sIcon.setAttribute('title', 'Clear');\n this.sIcon.style.cursor = 'pointer';\n }\n else {\n this.sIcon.classList.remove('e-clear-icon');\n this.sIcon.removeAttribute('title');\n this.sIcon.style.cursor = 'default';\n }\n }\n };\n Toolbar.prototype.search = function () {\n this.isSearched = true;\n this.parent.search(this.searchElement.value);\n };\n Toolbar.prototype.updateSearchBox = function () {\n if (this.searchElement) {\n this.searchElement.value = this.parent.searchSettings.key;\n }\n };\n Toolbar.prototype.wireEvent = function () {\n if (this.searchElement) {\n this.searchBoxObj = new SearchBox(this.searchElement);\n EventHandler.add(this.searchElement, 'keyup', this.keyUpHandler, this);\n this.searchBoxObj.wireEvent();\n }\n EventHandler.add(this.element, 'focusin', this.onFocusIn, this);\n EventHandler.add(this.element, 'focusout', this.onFocusOut, this);\n };\n Toolbar.prototype.unWireEvent = function () {\n if (this.searchElement) {\n EventHandler.remove(this.searchElement, 'keyup', this.keyUpHandler);\n this.searchBoxObj.unWireEvent();\n }\n EventHandler.remove(this.element, 'focusin', this.onFocusIn);\n EventHandler.remove(this.element, 'focusout', this.onFocusOut);\n };\n Toolbar.prototype.onFocusIn = function (e) {\n var currentInfo = this.parent.focusModule.currentInfo;\n if (currentInfo && currentInfo.element) {\n removeClass([currentInfo.element, currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n currentInfo.element.tabIndex = -1;\n }\n e.target.tabIndex = 0;\n };\n Toolbar.prototype.onFocusOut = function (e) {\n e.target.tabIndex = -1;\n };\n Toolbar.prototype.setFocusToolbarItem = function (element) {\n var elementToFocus = element.querySelector('.e-btn,.e-input,.e-toolbar-item-focus');\n if (!elementToFocus && this.parent.enableAdaptiveUI && !this.searchElement\n && element.classList.contains('e-search-wrapper')) {\n elementToFocus = element.querySelector('#' + this.gridID + '_searchbutton');\n }\n elementToFocus.focus();\n };\n Toolbar.prototype.getFocusableToolbarItems = function () {\n var getFocusToolbarElements = [].slice.call(this.element.querySelectorAll('.e-toolbar-item:not(.e-overlay):not(.e-hidden)'));\n var getFocusToolbarItems = [];\n for (var i = 0; i < getFocusToolbarElements.length; i++) {\n if (!isNullOrUndefined(getFocusToolbarElements[parseInt(i.toString(), 10)].querySelector('.e-btn,.e-input,.e-toolbar-item-focus'))) {\n getFocusToolbarItems.push(getFocusToolbarElements[parseInt(i.toString(), 10)]);\n }\n }\n return getFocusToolbarItems;\n };\n Toolbar.prototype.keyPressedHandler = function (e) {\n if (e.target && parentsUntil(e.target, 'e-toolbar-item')) {\n var targetParent = parentsUntil(e.target, 'e-toolbar-item');\n var focusableToolbarItems = this.getFocusableToolbarItems();\n if (e.action === 'tab' || e.action === 'shiftTab') {\n if ((e.action === 'tab' && targetParent === focusableToolbarItems[focusableToolbarItems.length - 1])\n || (e.action === 'shiftTab' && targetParent === focusableToolbarItems[0])) {\n return;\n }\n for (var i = 0; i < focusableToolbarItems.length; i++) {\n if (targetParent === focusableToolbarItems[parseInt(i.toString(), 10)]) {\n e.preventDefault();\n var index = e.action === 'tab' ? i + 1 : i - 1;\n this.setFocusToolbarItem(focusableToolbarItems[parseInt(index.toString(), 10)]);\n return;\n }\n }\n }\n if (e.action === 'enter') {\n if (this.parent.enableAdaptiveUI && !this.searchElement\n && e.target.id === this.gridID + '_searchbutton') {\n this.renderResponsiveSearch(true);\n }\n }\n }\n };\n Toolbar.prototype.reRenderToolbar = function () {\n if (this.element) {\n remove(this.element);\n }\n this.render();\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.evtHandlers = [{ event: events.setFullScreenDialog, handler: this.reRenderToolbar },\n { event: events.initialEnd, handler: this.render },\n { event: events.uiUpdate, handler: this.onPropertyChanged },\n { event: events.inBoundModelChanged, handler: this.updateSearchBox.bind(this) },\n { event: events.modelChanged, handler: this.refreshToolbarItems },\n { event: events.toolbarRefresh, handler: this.refreshToolbarItems },\n { event: events.inBoundModelChanged, handler: this.modelChanged },\n { event: events.dataBound, handler: this.refreshToolbarItems },\n { event: events.click, handler: this.removeResponsiveSearch },\n { event: events.rowModeChange, handler: this.reRenderToolbar },\n { event: events.destroy, handler: this.destroy },\n { event: events.keyPressed, handler: this.keyPressedHandler }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n this.rowSelectedFunction = this.rowSelected.bind(this);\n this.rowDeSelectedFunction = this.rowSelected.bind(this);\n this.parent.addEventListener(events.rowSelected, this.rowSelectedFunction);\n this.parent.addEventListener(events.rowDeselected, this.rowDeSelectedFunction);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n this.parent.removeEventListener(events.rowSelected, this.rowSelectedFunction);\n this.parent.removeEventListener(events.rowDeselected, this.rowDeSelectedFunction);\n };\n Toolbar.prototype.removeResponsiveSearch = function (e) {\n var target = e.target;\n var isSearch = target.classList.contains('e-search-icon') || target.classList.contains('e-search-wrapper');\n if (this.parent.enableAdaptiveUI && !isSearch && this.searchElement\n && !parentsUntil(e.target, 'e-res-toolbar')) {\n this.renderResponsiveSearch(false);\n }\n };\n Toolbar.prototype.rowSelected = function () {\n if (this.parent.enableAdaptiveUI) {\n this.refreshResponsiveToolbarItems(ResponsiveToolbarAction.isInitial);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { initForeignKeyColumn, getForeignKeyData, generateQuery } from '../base/constant';\nimport { getDatePredicate } from '../base/util';\nimport { Data } from './data';\nimport * as events from '../base/constant';\n/**\n * `ForeignKey` module is used to handle foreign key column's actions.\n */\nvar ForeignKey = /** @class */ (function (_super) {\n __extends(ForeignKey, _super);\n function ForeignKey(parent, serviceLocator) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.initEvent();\n return _this;\n }\n ForeignKey.prototype.initEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initForeignKeyColumn, this.initForeignKeyColumns, this);\n this.parent.on(getForeignKeyData, this.getForeignKeyData, this);\n this.parent.on(generateQuery, this.generateQueryFormData, this);\n };\n ForeignKey.prototype.initForeignKeyColumns = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n columns[parseInt(i.toString(), 10)].dataSource = (columns[parseInt(i.toString(), 10)].dataSource instanceof DataManager ?\n columns[parseInt(i.toString(), 10)].dataSource :\n (isNullOrUndefined(columns[parseInt(i.toString(), 10)].dataSource) ? new DataManager() :\n 'result' in columns[parseInt(i.toString(), 10)].dataSource ? columns[parseInt(i.toString(), 10)].dataSource :\n new DataManager(columns[parseInt(i.toString(), 10)].dataSource)));\n }\n };\n ForeignKey.prototype.eventfPromise = function (args, query, key, column) {\n var state = this.getStateEventArgument(query);\n var def = new Deferred();\n var deff = new Deferred();\n state.action = args.action;\n var dataModule = this.parent.getDataModule();\n if (!isNullOrUndefined(args.action) && args.action.requestType && dataModule.foreignKeyDataState.isDataChanged !== false) {\n dataModule.setForeignKeyDataState({\n isPending: true, resolver: deff.resolve\n });\n deff.promise.then(function () {\n def.resolve(column.dataSource);\n });\n state.setColumnData = this.parent.setForeignKeyData.bind(this.parent);\n this.parent.trigger(events.columnDataStateChange, state);\n }\n else {\n dataModule.setForeignKeyDataState({});\n def.resolve(key);\n }\n return def;\n };\n ForeignKey.prototype.getForeignKeyData = function (args) {\n var _this = this;\n var foreignColumns = args.column ? [args.column] : this.parent.getForeignKeyColumns();\n var allPromise = [];\n var _loop_1 = function (i) {\n var promise = void 0;\n var query = args.isComplex ? this_1.genarateColumnQuery(foreignColumns[parseInt(i.toString(), 10)]) :\n this_1.genarateQuery(foreignColumns[parseInt(i.toString(), 10)], args.result.result, false, true);\n query.params = this_1.parent.query.params;\n var dataSource = foreignColumns[parseInt(i.toString(), 10)].dataSource;\n if (dataSource && 'result' in dataSource) {\n var def = this_1.eventfPromise(args, query, dataSource, foreignColumns[parseInt(i.toString(), 10)]);\n promise = def.promise;\n }\n else if (!dataSource.ready || dataSource.dataSource.offline) {\n promise = dataSource.executeQuery(query);\n }\n else {\n promise = dataSource.ready.then(function () {\n return dataSource.executeQuery(query);\n });\n }\n allPromise.push(promise);\n };\n var this_1 = this;\n for (var i = 0; i < foreignColumns.length; i++) {\n _loop_1(i);\n }\n Promise.all(allPromise).then(function (responses) {\n for (var i = 0; i < responses.length; i++) {\n foreignColumns[parseInt(i.toString(), 10)].columnData = responses[parseInt(i.toString(), 10)].result;\n if (foreignColumns[parseInt(i.toString(), 10)].editType === 'dropdownedit' && 'result' in foreignColumns[parseInt(i.toString(), 10)].dataSource) {\n foreignColumns[parseInt(i.toString(), 10)].edit.params = extend(foreignColumns[parseInt(i.toString(), 10)]\n .edit.params, {\n dataSource: responses[parseInt(i.toString(), 10)].result,\n query: new Query(), fields: {\n value: foreignColumns[parseInt(i.toString(), 10)].foreignKeyField ||\n foreignColumns[parseInt(i.toString(), 10)].field,\n text: foreignColumns[parseInt(i.toString(), 10)].foreignKeyValue\n }\n });\n }\n }\n args.promise.resolve(args.result);\n }).catch(function (e) {\n _this.parent.log(['actionfailure', 'foreign_key_failure']);\n if (args.promise && args.promise.reject) {\n args.promise.reject(e);\n }\n return e;\n });\n };\n ForeignKey.prototype.generateQueryFormData = function (args) {\n args.predicate.predicate = this.genarateQuery(args.column, args.column.columnData, true);\n };\n ForeignKey.prototype.genarateQuery = function (column, e, fromData, needQuery) {\n var gObj = this.parent;\n var predicates = [];\n var query = new Query();\n var field = fromData ? column.foreignKeyField : column.field;\n if (gObj.allowPaging || gObj.enableVirtualization || fromData) {\n e = new DataManager(((gObj.allowGrouping && gObj.groupSettings.columns.length && !fromData) ?\n e.records : e)).executeLocal(new Query().select(field));\n var filteredValue = DataUtil.distinct(e, field, false);\n field = fromData ? column.field : column.foreignKeyField;\n for (var i = 0; i < filteredValue.length; i++) {\n if (filteredValue[parseInt(i.toString(), 10)] && filteredValue[parseInt(i.toString(), 10)].getDay) {\n predicates.push(getDatePredicate({ field: field, operator: 'equal', value: filteredValue[parseInt(i.toString(), 10)], matchCase: false }));\n }\n else {\n predicates.push(new Predicate(field, 'equal', filteredValue[parseInt(i.toString(), 10)], false));\n }\n }\n }\n if (needQuery) {\n return predicates.length ? query.where(Predicate.or(predicates)) : query;\n }\n return (predicates.length ? Predicate.or(predicates) : { predicates: [] });\n };\n ForeignKey.prototype.genarateColumnQuery = function (column) {\n var gObj = this.parent;\n var query = new Query();\n var queryColumn = this.isFiltered(column);\n if (queryColumn.isTrue) {\n query = this.filterQuery(query, queryColumn.column, true);\n }\n if (gObj.searchSettings.key.length) {\n var sSettings = gObj.searchSettings;\n if (column.dataSource instanceof DataManager && (column.dataSource.adaptor.getModuleName &&\n column.dataSource.adaptor.getModuleName() === 'ODataV4Adaptor')) {\n query = this.searchQuery(query, column, true);\n }\n else {\n query.search(sSettings.key, column.foreignKeyValue, sSettings.operator, sSettings.ignoreCase);\n }\n }\n return query;\n };\n ForeignKey.prototype.isFiltered = function (column) {\n var filterColumn = this.parent.filterSettings.columns.filter(function (fColumn) {\n return (fColumn.field === column.foreignKeyValue && fColumn.uid === column.uid);\n });\n return {\n column: filterColumn, isTrue: !!filterColumn.length\n };\n };\n ForeignKey.prototype.getModuleName = function () {\n return 'foreignKey';\n };\n ForeignKey.prototype.destroy = function () {\n this.destroyEvent();\n };\n ForeignKey.prototype.destroyEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(initForeignKeyColumn, this.initForeignKeyColumns);\n this.parent.off(getForeignKeyData, this.getForeignKeyData);\n this.parent.off(generateQuery, this.generateQueryFormData);\n };\n return ForeignKey;\n}(Data));\nexport { ForeignKey };\n","/**\n * @hidden\n\n */\nexport var created = 'create';\n/**\n * @hidden\n\n */\nexport var destroyed = 'destroy';\n/**\n * @hidden\n\n */\nexport var tableclass = 'tableclass';\n/**\n * @hidden\n\n */\nexport var load = 'load';\n/**\n * Specifies Rich Text Editor internal events\n */\n/**\n * @hidden\n\n */\nexport var initialLoad = 'initial-load';\n/**\n * @hidden\n\n */\nexport var contentChanged = 'content-changed';\n/**\n * @hidden\n\n */\nexport var initialEnd = 'initial-end';\n/**\n * @hidden\n\n */\nexport var iframeMouseDown = 'iframe-click';\n/**\n * @hidden\n\n */\nexport var destroy = 'destroy';\n/**\n * @hidden\n\n */\nexport var toolbarClick = 'toolbarClick';\n/**\n * @hidden\n\n */\nexport var toolbarRefresh = 'toolbar-refresh';\n/**\n * @hidden\n\n */\nexport var refreshBegin = 'refresh-begin';\n/**\n * @hidden\n\n */\nexport var toolbarUpdated = 'toolbar-updated';\n/**\n * @hidden\n\n */\nexport var bindOnEnd = 'bind-on-end';\n/**\n * @hidden\n\n */\nexport var renderColorPicker = 'render-color-picker';\n/**\n * @hidden\n\n */\nexport var htmlToolbarClick = 'html-toolbar-click';\n/**\n * @hidden\n\n */\nexport var markdownToolbarClick = 'markdown-toolbar-click';\n/**\n * @hidden\n\n */\nexport var destroyColorPicker = 'destroy-color-picker';\n/**\n * @hidden\n\n */\nexport var modelChanged = 'model-changed';\n/**\n * @hidden\n\n */\nexport var tableModulekeyUp = 'tableModulekeyUp';\n/**\n * @hidden\n\n */\nexport var keyUp = 'keyUp';\n/**\n * @hidden\n\n */\nexport var keyDown = 'keyDown';\n/**\n * @hidden\n\n */\nexport var mouseUp = 'mouseUp';\n/**\n * @hidden\n\n */\nexport var toolbarCreated = 'toolbarCreated';\n/**\n * @hidden\n\n */\nexport var toolbarRenderComplete = 'toolbarRenderComplete';\n/**\n * @hidden\n\n */\nexport var enableFullScreen = 'enableFullScreen';\n/**\n * @hidden\n\n */\nexport var disableFullScreen = 'disableFullScreen';\n/**\n * @hidden\n\n */\nexport var dropDownSelect = 'dropDownSelect';\n/**\n * @hidden\n\n */\nexport var beforeDropDownItemRender = 'beforeDropDownItemRender';\n/**\n * @hidden\n\n */\nexport var execCommandCallBack = 'execCommandCallBack';\n/**\n * @hidden\n\n */\nexport var imageToolbarAction = 'image-toolbar-action';\n/**\n * @hidden\n\n */\nexport var audioToolbarAction = 'audio-toolbar-action';\n/**\n * @hidden\n\n */\nexport var videoToolbarAction = 'video-toolbar-action';\n/**\n * @hidden\n\n */\nexport var linkToolbarAction = 'link-toolbar-action';\n/**\n * @hidden\n\n */\nexport var windowResize = 'resize';\n/**\n * @hidden\n\n */\nexport var resizeStart = 'resizeStart';\n/**\n * @hidden\n\n */\nexport var onResize = 'resizing';\n/**\n * @hidden\n\n */\nexport var resizeStop = 'resizeStop';\n/**\n * @hidden\n\n */\nexport var undo = 'undo';\n/**\n * @hidden\n\n */\nexport var redo = 'redo';\n/**\n * @hidden\n\n */\nexport var insertLink = 'insertLink';\n/**\n * @hidden\n\n */\nexport var unLink = 'unLink';\n/**\n * @hidden\n\n */\nexport var editLink = 'editLink';\n/**\n * @hidden\n\n */\nexport var openLink = 'openLink';\n/**\n * @hidden\n\n */\nexport var actionBegin = 'actionBegin';\n/**\n * @hidden\n\n */\nexport var actionComplete = 'actionComplete';\n/**\n * @hidden\n\n */\nexport var updatedToolbarStatus = 'updatedToolbarStatus';\n/**\n * @hidden\n\n */\nexport var actionSuccess = 'actionSuccess';\n/**\n * @hidden\n\n */\nexport var updateToolbarItem = 'updateToolbarItem';\n/**\n * @hidden\n\n */\nexport var insertImage = 'insertImage';\n/**\n * @hidden\n\n */\nexport var insertAudio = 'insertAudio';\n/**\n * @hidden\n\n */\nexport var insertVideo = 'insertVideo';\n/**\n * @hidden\n\n */\nexport var insertCompleted = 'insertCompleted';\n/**\n * @hidden\n\n */\nexport var imageLeft = 'justifyLeft';\n/**\n * @hidden\n\n */\nexport var imageRight = 'justifyRight';\n/**\n * @hidden\n\n */\nexport var imageCenter = 'justifyCenter';\n/**\n * @hidden\n\n */\nexport var imageBreak = 'break';\n/**\n * @hidden\n\n */\nexport var imageInline = 'inline';\n/**\n * @hidden\n\n */\nexport var imageLink = 'insertImgLink';\n/**\n * @hidden\n\n */\nexport var imageAlt = 'imgAltText';\n/**\n * @hidden\n\n */\nexport var imageDelete = 'delete';\n/**\n * @hidden\n\n */\nexport var audioDelete = 'delete';\n/**\n * @hidden\n\n */\nexport var videoDelete = 'delete';\n/**\n * @hidden\n\n */\nexport var imageCaption = 'caption';\n/**\n * @hidden\n\n */\nexport var imageSize = 'imageSize';\n/**\n * @hidden\n\n */\nexport var videoSize = 'videoSize';\n/**\n * @hidden\n\n */\nexport var sourceCode = 'sourceCode';\n/**\n * @hidden\n\n */\nexport var updateSource = 'updateSource';\n/**\n * @hidden\n\n */\nexport var toolbarOpen = 'toolbarOpen';\n/**\n * @hidden\n\n */\nexport var beforeDropDownOpen = 'beforeDropDownOpen';\n/**\n * @hidden\n\n */\nexport var selectionSave = 'selection-save';\n/**\n * @hidden\n\n */\nexport var selectionRestore = 'selection-restore';\n/**\n * @hidden\n\n */\nexport var expandPopupClick = 'expandPopupClick';\n/**\n * @hidden\n\n */\nexport var count = 'count';\n/**\n * @hidden\n\n */\nexport var contentFocus = 'contentFocus';\n/**\n * @hidden\n\n */\nexport var contentBlur = 'contentBlur';\n/**\n * @hidden\n\n */\nexport var mouseDown = 'mouseDown';\n/**\n * @hidden\n\n */\nexport var sourceCodeMouseDown = 'sourceCodeMouseDown';\n/**\n * @hidden\n\n */\nexport var editAreaClick = 'editAreaClick';\n/**\n * @hidden\n\n */\nexport var scroll = 'scroll';\n/**\n * @hidden\n\n */\nexport var contentscroll = 'contentscroll';\n/**\n * @hidden\n\n */\nexport var colorPickerChanged = 'colorPickerChanged';\n/**\n * @hidden\n\n */\nexport var tableColorPickerChanged = 'tableColorPickerChanged';\n/**\n * @hidden\n\n */\nexport var focusChange = 'focusChange';\n/**\n * @hidden\n\n */\nexport var selectAll = 'selectAll';\n/**\n * @hidden\n\n */\nexport var selectRange = 'selectRange';\n/**\n * @hidden\n\n */\nexport var getSelectedHtml = 'getSelectedHtml';\n/**\n * @hidden\n\n */\nexport var renderInlineToolbar = 'renderInlineToolbar';\n/**\n * @hidden\n\n */\nexport var paste = 'paste-content';\n/**\n * @hidden\n\n */\nexport var imgModule = 'imageModule';\n/**\n * @hidden\n\n */\nexport var rtlMode = 'rtl-mode';\n/**\n * @hidden\n\n */\nexport var createTable = 'createTable';\n/**\n * @hidden\n\n */\nexport var docClick = 'docClick';\n/**\n * @hidden\n\n */\nexport var tableToolbarAction = 'table-toolbar-action';\n/**\n * @hidden\n\n */\nexport var checkUndo = 'checkUndoStack';\n/**\n * @hidden\n\n */\nexport var readOnlyMode = 'readOnlyMode';\n/**\n * @hidden\n\n */\nexport var moduleDestroy = 'moduleDestroy';\n/**\n * @hidden\n\n */\nexport var pasteClean = 'pasteClean';\n/**\n * @hidden\n\n */\nexport var enterHandler = 'enterHandler';\n/**\n * @hidden\n\n */\nexport var beforeDialogOpen = 'beforeDialogOpen';\n/**\n * @hidden\n\n */\nexport var clearDialogObj = 'clearDialogObj';\n/**\n * @hidden\n\n */\nexport var dialogOpen = 'dialogOpen';\n/**\n * @hidden\n\n */\nexport var beforeDialogClose = 'beforeDialogClose';\n/**\n * @hidden\n\n */\nexport var dialogClose = 'dialogClose';\n/**\n * @hidden\n\n */\nexport var beforeQuickToolbarOpen = 'beforeQuickToolbarOpen';\n/**\n * @hidden\n\n */\nexport var quickToolbarOpen = 'quickToolbarOpen';\n/**\n * @hidden\n\n */\nexport var quickToolbarClose = 'quickToolbarClose';\n/**\n * @hidden\n\n */\nexport var popupHide = 'popupHide';\n/**\n * @hidden\n\n */\nexport var imageSelected = 'imageSelected';\n/**\n * @hidden\n\n */\nexport var imageUploading = 'imageUploading';\n/**\n * @hidden\n\n */\nexport var imageUploadSuccess = 'imageUploadSuccess';\n/**\n * @hidden\n\n */\nexport var imageUploadFailed = 'imageUploadFailed';\n/**\n * @hidden\n\n */\nexport var imageRemoving = 'imageRemoving';\n/**\n * @hidden\n\n */\nexport var fileSelected = 'fileSelected';\n/**\n * @hidden\n\n */\nexport var fileUploading = 'fileUploading';\n/**\n * @hidden\n\n */\nexport var fileUploadSuccess = 'fileUploadSuccess';\n/**\n * @hidden\n\n */\nexport var fileUploadFailed = 'fileUploadFailed';\n/**\n * @hidden\n\n */\nexport var fileRemoving = 'fileRemoving';\n/**\n * @hidden\n\n */\nexport var afterImageDelete = 'afterImageDelete';\n/**\n * @hidden\n\n */\nexport var afterMediaDelete = 'afterMediaDelete';\n/**\n * @hidden\n\n */\nexport var drop = 'drop';\n/**\n * @hidden\n\n */\nexport var xhtmlValidation = 'xhtmlValidation';\n/**\n * @hidden\n\n */\nexport var beforeImageUpload = 'beforeImageUpload';\n/**\n * @hidden\n\n */\nexport var beforeFileUpload = 'beforeFileUpload';\n/**\n * @hidden\n\n */\nexport var resizeInitialized = 'resizeInitialized';\n/**\n * @hidden\n\n */\nexport var renderFileManager = 'renderFileManager';\n/**\n * @hidden\n\n */\nexport var beforeImageDrop = 'beforeImageDrop';\n/**\n * @hidden\n\n */\nexport var dynamicModule = 'dynamicModule';\n/**\n * @hidden\n\n */\nexport var beforePasteCleanup = 'beforePasteCleanup';\n/**\n * @hidden\n\n */\nexport var afterPasteCleanup = 'afterPasteCleanup';\n/**\n * @hidden\n\n */\nexport var updateTbItemsStatus = 'updateTbItemsStatus';\n/**\n * @hidden\n\n */\nexport var showLinkDialog = 'showLinkDialog';\n/**\n * @hidden\n\n */\nexport var closeLinkDialog = 'closeLinkDialog';\n/**\n * @hidden\n\n */\nexport var showImageDialog = 'showImageDialog';\n/**\n * @hidden\n\n */\nexport var showAudioDialog = 'showAudioDialog';\n/**\n * @hidden\n\n */\nexport var showVideoDialog = 'showVideoDialog';\n/**\n * @hidden\n\n */\nexport var closeImageDialog = 'closeImageDialog';\n/**\n * @hidden\n\n */\nexport var closeAudioDialog = 'closeAudioDialog';\n/**\n * @hidden\n\n */\nexport var closeVideoDialog = 'closeVideoDialog';\n/**\n * @hidden\n\n */\nexport var showTableDialog = 'showTableDialog';\n/**\n * @hidden\n\n */\nexport var closeTableDialog = 'closeTableDialog';\n/**\n * @hidden\n\n */\nexport var bindCssClass = 'closeTableDialog';\n/**\n * @hidden\n\n */\nexport var formatPainterClick = 'formatPainterClick';\n/**\n * @hidden\n\n */\nexport var formatPainterDoubleClick = 'formatPainterDoubleClick';\n/**\n * @hidden\n\n */\nexport var emojiPicker = 'emojiPicker';\n/**\n * @hidden\n\n */\nexport var maximizeMinimizeClick = 'maximizeMinimizeClick';\n/**\n * @hidden\n\n */\nexport var blockEmptyNodes = \"address:empty, article:empty, aside:empty, blockquote:empty,\\n details:empty, dd:empty, div:empty, dl:empty, dt:empty, fieldset:empty, footer:empty,form:empty, h1:empty,\\n h2:empty, h3:empty, h4:empty, h5:empty, h6:empty, header:empty, hgroup:empty, li:empty, main:empty, nav:empty,\\n noscript:empty, output:empty, p:empty, pre:empty, section:empty, td:empty, th:empty\";\n/**\n * @hidden\n\n */\nexport var inlineEmptyNodes = \"a:empty, abbr:empty, acronym:empty, b:empty, bdi:empty, bdo:empty, big:empty, button:empty,\\ncanvas:empty, cite:empty, code:empty, data:empty, datalist:empty, del:empty, dfn:empty, em:empty, font:empty, i:empty, iframe:empty,\\nins:empty, kbd:empty, label:empty, map:empty, mark:empty, meter:empty, noscript:empty, object:empty, output:empty, picture:empty, progress:empty,\\nq:empty, ruby:empty, s:empty, samp:empty, script:empty, select:empty, slot:empty, small:empty, span:empty, strong:empty, strike:empty, sub:empty, sup:empty, svg:empty,\\ntemplate:empty, textarea:empty, time:empty, u:empty, tt:empty, var:empty, wbr:empty\";\n","/**\n * Rich Text Editor classes defined here.\n */\n/**\n * @hidden\n\n */\nexport var CLS_RTE = 'e-richtexteditor';\n/**\n * @hidden\n\n */\nexport var CLS_RTL = 'e-rtl';\n/**\n * @hidden\n\n */\nexport var CLS_CONTENT = 'e-content';\n/**\n * @hidden\n\n */\nexport var CLS_DISABLED = 'e-disabled';\n/**\n * @hidden\n\n */\nexport var CLS_SCRIPT_SHEET = 'rte-iframe-script-sheet';\n/**\n * @hidden\n\n */\nexport var CLS_STYLE_SHEET = 'rte-iframe-style-sheet';\n/**\n * @hidden\n\n */\nexport var CLS_TOOLBAR = 'e-rte-toolbar';\n/**\n * @hidden\n\n */\nexport var CLS_TB_FIXED = 'e-rte-tb-fixed';\n/**\n * @hidden\n\n */\nexport var CLS_TB_FLOAT = 'e-rte-tb-float';\n/**\n * @hidden\n\n */\nexport var CLS_TB_ABS_FLOAT = 'e-rte-tb-abs-float';\n/**\n * @hidden\n\n */\nexport var CLS_INLINE = 'e-rte-inline';\n/**\n * @hidden\n\n */\nexport var CLS_TB_INLINE = 'e-rte-tb-inline';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_EXPAND_TB = 'e-rte-tb-expand';\n/**\n * @hidden\n\n */\nexport var CLS_FULL_SCREEN = 'e-rte-full-screen';\n/**\n * @hidden\n\n */\nexport var CLS_QUICK_TB = 'e-rte-quick-toolbar';\n/**\n * @hidden\n\n */\nexport var CLS_POP = 'e-rte-pop';\n/**\n * @hidden\n\n */\nexport var CLS_TB_STATIC = 'e-tb-static';\n/**\n * @hidden\n\n */\nexport var CLS_QUICK_POP = 'e-rte-quick-popup';\n/**\n * @hidden\n\n */\nexport var CLS_QUICK_DROPDOWN = 'e-quick-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_IMAGE_POP = 'e-rte-image-popup';\n/**\n * @hidden\n\n */\nexport var CLS_INLINE_POP = 'e-rte-inline-popup';\n/**\n * @hidden\n\n */\nexport var CLS_INLINE_DROPDOWN = 'e-rte-inline-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_DROPDOWN_POPUP = 'e-rte-dropdown-popup';\n/**\n * @hidden\n\n */\nexport var CLS_DROPDOWN_ICONS = 'e-rte-dropdown-icons';\n/**\n * @hidden\n\n */\nexport var CLS_DROPDOWN_ITEMS = 'e-rte-dropdown-items';\n/**\n * @hidden\n\n */\nexport var CLS_DROPDOWN_BTN = 'e-rte-dropdown-btn';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_CONTENT = 'e-rte-content';\n/**\n * @hidden\n\n */\nexport var CLS_TB_ITEM = 'e-toolbar-item';\n/**\n * @hidden\n\n */\nexport var CLS_TB_EXTENDED = 'e-toolbar-extended';\n/**\n * @hidden\n\n */\nexport var CLS_TB_WRAP = 'e-toolbar-wrapper';\n/**\n * @hidden\n\n */\nexport var CLS_POPUP = 'e-popup';\n/**\n * @hidden\n\n */\nexport var CLS_SEPARATOR = 'e-separator';\n/**\n * @hidden\n\n */\nexport var CLS_MINIMIZE = 'e-minimize';\n/**\n * @hidden\n\n */\nexport var CLS_MAXIMIZE = 'e-maximize';\n/**\n * @hidden\n\n */\nexport var CLS_BACK = 'e-back';\n/**\n * @hidden\n\n */\nexport var CLS_SHOW = 'e-show';\n/**\n * @hidden\n\n */\nexport var CLS_HIDE = 'e-hide';\n/**\n * @hidden\n\n */\nexport var CLS_VISIBLE = 'e-visible';\n/**\n * @hidden\n\n */\nexport var CLS_FOCUS = 'e-focused';\n/**\n * @hidden\n\n */\nexport var CLS_RM_WHITE_SPACE = 'e-remove-white-space';\n/**\n * @hidden\n\n */\nexport var CLS_IMGRIGHT = 'e-imgright';\n/**\n * @hidden\n\n */\nexport var CLS_IMGLEFT = 'e-imgleft';\n/**\n * @hidden\n\n */\nexport var CLS_IMGCENTER = 'e-imgcenter';\n/**\n * @hidden\n\n */\nexport var CLS_IMGBREAK = 'e-imgbreak';\n/**\n * @hidden\n\n */\nexport var CLS_AUDIOBREAK = 'e-audio-break';\n/**\n * @hidden\n\n */\nexport var CLS_CLICKELEM = 'e-clickelem';\n/**\n * @hidden\n\n */\nexport var CLS_VID_CLICK_ELEM = 'e-video-clickelem';\n/**\n * @hidden\n\n */\nexport var CLS_AUDIOWRAP = 'e-audio-wrap';\n/**\n * @hidden\n\n */\nexport var CLS_VIDEOWRAP = 'e-video-wrap';\n/**\n * @hidden\n\n */\nexport var CLS_VIDEOBREAK = 'e-video-break';\n/**\n * @hidden\n\n */\nexport var CLS_CAPTION = 'e-img-caption';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_CAPTION = 'e-rte-img-caption';\n/**\n * @hidden\n\n */\nexport var CLS_CAPINLINE = 'e-caption-inline';\n/**\n * @hidden\n\n */\nexport var CLS_IMGINLINE = 'e-imginline';\n/**\n * @hidden\n\n */\nexport var CLS_AUDIOINLINE = 'e-audio-inline';\n/**\n * @hidden\n\n */\nexport var CLS_VIDEOINLINE = 'e-video-inline';\n/**\n * @hidden\n\n */\nexport var CLS_COUNT = 'e-rte-character-count';\n/**\n * @hidden\n\n */\nexport var CLS_WARNING = 'e-warning';\n/**\n * @hidden\n\n */\nexport var CLS_ERROR = 'e-error';\n/**\n * @hidden\n\n */\nexport var CLS_ICONS = 'e-icons';\n/**\n * @hidden\n\n */\nexport var CLS_ACTIVE = 'e-active';\n/**\n * @hidden\n\n */\nexport var CLS_EXPAND_OPEN = 'e-expand-open';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_ELEMENTS = 'e-rte-elements';\n/**\n * @hidden\n\n */\nexport var CLS_TB_BTN = 'e-tbar-btn';\n/**\n * @hidden\n\n */\nexport var CLS_HR_SEPARATOR = 'e-rte-horizontal-separator';\n/**\n * @hidden\n\n */\nexport var CLS_TB_IOS_FIX = 'e-tbar-ios-fixed';\n/**\n * @hidden\n\n */\nexport var CLS_LIST_PRIMARY_CONTENT = 'e-rte-list-primary-content';\n/**\n * @hidden\n\n */\nexport var CLS_NUMBERFORMATLIST_TB_BTN = 'e-rte-numberformatlist-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_BULLETFORMATLIST_TB_BTN = 'e-rte-bulletformatlist-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_FORMATS_TB_BTN = 'e-formats-tbar-btn';\n/**\n * @hidden\n\n */\nexport var CLS_FONT_NAME_TB_BTN = 'e-font-name-tbar-btn';\n/**\n * @hidden\n\n */\nexport var CLS_FONT_SIZE_TB_BTN = 'e-font-size-tbar-btn';\n/**\n * @hidden\n\n */\nexport var CLS_ALIGN_TB_BTN = 'e-alignment-tbar-btn';\n/**\n * @hidden\n\n */\nexport var CLS_FONT_COLOR_TARGET = 'e-rte-fontcolor-element';\n/**\n * @hidden\n\n */\nexport var CLS_BACKGROUND_COLOR_TARGET = 'e-rte-backgroundcolor-element';\n/**\n * @hidden\n\n */\nexport var CLS_COLOR_CONTENT = 'e-rte-color-content';\n/**\n * @hidden\n\n */\nexport var CLS_FONT_COLOR_DROPDOWN = 'e-rte-fontcolor-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_BACKGROUND_COLOR_DROPDOWN = 'e-rte-backgroundcolor-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_COLOR_PALETTE = 'e-rte-square-palette';\n/**\n * @hidden\n\n */\nexport var CLS_FONT_COLOR_PICKER = 'e-rte-fontcolor-colorpicker';\n/**\n * @hidden\n\n */\nexport var CLS_BACKGROUND_COLOR_PICKER = 'e-rte-backgroundcolor-colorpicker';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_READONLY = 'e-rte-readonly';\n/**\n * @hidden\n\n */\nexport var CLS_TABLE_SEL = 'e-cell-select';\n/**\n * @hidden\n\n */\nexport var CLS_TB_DASH_BOR = 'e-dashed-border';\n/**\n * @hidden\n\n */\nexport var CLS_TB_ALT_BOR = 'e-alternate-border';\n/**\n * @hidden\n\n */\nexport var CLS_TB_COL_RES = 'e-column-resize';\n/**\n * @hidden\n\n */\nexport var CLS_TB_ROW_RES = 'e-row-resize';\n/**\n * @hidden\n\n */\nexport var CLS_TB_BOX_RES = 'e-table-box';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_HIDDEN = 'e-rte-hidden';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_PASTE_KEEP_FORMAT = 'e-rte-keepformat';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_PASTE_REMOVE_FORMAT = 'e-rte-removeformat';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_PASTE_PLAIN_FORMAT = 'e-rte-plainformat';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_PASTE_OK = 'e-rte-pasteok';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_PASTE_CANCEL = 'e-rte-pastecancel';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_DIALOG_MIN_HEIGHT = 'e-rte-dialog-minheight';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_RES_HANDLE = 'e-resize-handle';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_RES_EAST = 'e-south-east';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_IMAGE = 'e-rte-image';\n/**\n * @hidden\n\n */\nexport var CLS_RESIZE = 'e-resize';\n/**\n * @hidden\n\n */\nexport var CLS_IMG_FOCUS = 'e-img-focus';\n/**\n * @hidden\n\n */\nexport var CLS_AUD_FOCUS = 'e-audio-focus';\n/**\n * @hidden\n\n */\nexport var CLS_VID_FOCUS = 'e-video-focus';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_DRAG_IMAGE = 'e-rte-drag-image';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_UPLOAD_POPUP = 'e-rte-upload-popup';\n/**\n * @hidden\n\n */\nexport var CLS_POPUP_OPEN = 'e-popup-open';\n/**\n * @hidden\n\n */\nexport var CLS_IMG_RESIZE = 'e-img-resize';\n/**\n * @hidden\n\n */\nexport var CLS_DROPAREA = 'e-droparea';\n/**\n * @hidden\n\n */\nexport var CLS_IMG_INNER = 'e-img-inner';\n/**\n * @hidden\n\n */\nexport var CLS_UPLOAD_FILES = 'e-upload-files';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_DIALOG_UPLOAD = 'e-rte-dialog-upload';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_RES_CNT = 'e-rte-resize';\n/**\n * @hidden\n\n */\nexport var CLS_CUSTOM_TILE = 'e-custom-tile';\n/**\n * @hidden\n\n */\nexport var CLS_NOCOLOR_ITEM = 'e-nocolor-item';\n/**\n * @hidden\n\n */\nexport var CLS_TABLE = 'e-rte-table';\n/**\n * @hidden\n\n */\nexport var CLS_TABLE_BORDER = 'e-rte-table-border';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_TABLE_RESIZE = 'e-rte-table-resize';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_FIXED_TB_EXPAND = 'e-rte-fixed-tb-expand';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_TB_ENABLED = 'e-rte-toolbar-enabled';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_RES_WEST = 'e-south-west';\n","import { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\n/**\n * Content module is used to render Rich Text Editor content\n *\n * @hidden\n\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IRichTextEditor} parent - specifies the parent\n * @param {ServiceLocator} locator - specifies the locator.\n * @returns {void}\n */\n function Render(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize Rich Text Editor header, content and footer rendering\n *\n * @returns {void}\n * @hidden\n\n */\n Render.prototype.render = function () {\n // eslint-disable-next-line\n var rteObj = this.parent;\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.contentRenderer.renderPanel();\n };\n /**\n * Refresh the entire RichTextEditor.\n *\n * @param {NotifyArgs} e - specifies the arguments.\n * @returns {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n };\n /**\n * Destroy the entire RichTextEditor.\n *\n * @returns {void}\n */\n Render.prototype.destroy = function () {\n this.removeEventListener();\n };\n Render.prototype.moduleDestroy = function () {\n this.parent = null;\n };\n Render.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.keyUp, this.keyUp, this);\n this.parent.on(events.moduleDestroy, this.moduleDestroy, this);\n };\n Render.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.modelChanged, this.refresh);\n this.parent.off(events.keyUp, this.keyUp);\n this.parent.off(events.moduleDestroy, this.moduleDestroy);\n };\n Render.prototype.keyUp = function (e) {\n if (this.parent.editorMode === 'HTML') {\n switch (e.args.which) {\n case 46:\n case 8:\n // eslint-disable-next-line\n var childNodes = this.parent.contentModule.getEditPanel().childNodes;\n if ((childNodes.length === 0) ||\n (childNodes.length === 1 && childNodes[0].childNodes.length === 0 && ((childNodes[0].tagName === 'BR') ||\n ((childNodes[0].tagName === 'P' || childNodes[0].tagName === 'DIV') && childNodes[0].textContent === '')))) {\n var node = this.parent.contentModule.getEditPanel();\n if (this.parent.enterKey === 'DIV') {\n node.innerHTML = '

';\n }\n else if (this.parent.enterKey === 'BR') {\n node.innerHTML = '
';\n }\n else {\n node.innerHTML = '


';\n }\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), node.childNodes[0], 0);\n }\n break;\n }\n }\n };\n return Render;\n}());\nexport { Render };\n","/**\n * Constant values for Common\n */\n/**\n * Keydown event trigger\n *\n * @hidden\n */\nexport var KEY_DOWN = 'keydown';\n/**\n * Undo and Redo action HTML plugin events\n *\n * @hidden\n */\nexport var ACTION = 'action';\n/**\n * Formats plugin events\n *\n * @hidden\n */\nexport var FORMAT_TYPE = 'format-type';\n/**\n * Keydown handler event trigger\n *\n * @hidden\n */\nexport var KEY_DOWN_HANDLER = 'keydown-handler';\n/**\n * List plugin events\n *\n * @hidden\n */\nexport var LIST_TYPE = 'list-type';\n/**\n * Keyup handler event trigger\n *\n * @hidden\n */\nexport var KEY_UP_HANDLER = 'keyup-handler';\n/**\n * Keyup event trigger\n *\n * @hidden\n */\nexport var KEY_UP = 'keyup';\n/**\n * Model changed plugin event trigger\n *\n * @hidden\n */\nexport var MODEL_CHANGED_PLUGIN = 'model_changed_plugin';\n/**\n * Model changed event trigger\n *\n * @hidden\n */\nexport var MODEL_CHANGED = 'model_changed';\n/**\n * PasteCleanup plugin for MSWord content\n *\n * @hidden\n */\nexport var MS_WORD_CLEANUP_PLUGIN = 'ms_word_cleanup_plugin';\n/**\n * PasteCleanup for MSWord content\n *\n * @hidden\n */\nexport var MS_WORD_CLEANUP = 'ms_word_cleanup';\n/**\n * ActionBegin event callback\n *\n * @hidden\n */\nexport var ON_BEGIN = 'onBegin';\n/**\n * Callback for spacelist action\n *\n * @hidden\n */\nexport var SPACE_ACTION = 'actionBegin';\n/**\n * Format painter event constant\n *\n * @hidden\n */\nexport var FORMAT_PAINTER_ACTIONS = 'format_painter_actions';\n/**\n * Emoji picker event constant\n *\n * @hidden\n */\nexport var EMOJI_PICKER_ACTIONS = 'emoji_picker_actions';\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\nimport { Base } from '@syncfusion/ej2-base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222,\n ']': 221,\n '[': 219,\n '=': 187\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
;\n * \n * ```\n *\n * @hidden\n\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n *\n * @param {HTMLElement} element - specifies the elements.\n * @param {KeyboardEventsModel} options - specify the options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n *\n * @param {KeyboardEventArgs} e - specifies the event arguments.\n * @returns {void}\n */\n _this.keyPressHandler = function (e) {\n /* eslint-disable */\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var isMetaKey = e.metaKey;\n /* eslint-enable */\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[\"\" + key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && (isCtrlKey === rKeyObj.ctrlKey || isMetaKey) &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n }\n }\n }\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n *\n * @param {KeyboardEventsModel} newProp - specifies the keyboard event.\n * @param {KeyboardEventsModel} oldProp - specifies the old property.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n *\n * @param {string} config - configuration data\n * @returns {KeyData} - specifies the key data\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[\"\" + config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[\"\" + config] = keyData;\n return keyData;\n };\n // Return the keycode value as string\n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[\"\" + keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { removeClass, selectAll, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_EXPAND_OPEN, CLS_TB_ITEM, CLS_ACTIVE } from '../base/classes';\nimport * as CONSTANT from '../../common/constant';\nimport { RenderType } from '../base/enum';\nimport { KeyboardEvents } from '../actions/keyboard';\n/**\n * Content module is used to render Rich Text Editor content\n *\n * @hidden\n\n */\nvar ViewSource = /** @class */ (function () {\n /**\n * Constructor for view source module\n *\n * @param {IRichTextEditor} parent - specifies the parent element.\n * @param {ServiceLocator} locator - specifies the locator.\n * @returns {void}\n */\n function ViewSource(parent, locator) {\n this.parent = parent;\n var serviceLocator = locator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n ViewSource.prototype.addEventListener = function () {\n this.parent.on(events.sourceCode, this.sourceCode, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.updateSource, this.updateSourceCode, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.moduleDestroy, this.moduleDestroy, this);\n };\n ViewSource.prototype.onInitialEnd = function () {\n this.parent.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ViewSource.prototype.removeEventListener = function () {\n this.unWireEvent();\n this.parent.off(events.sourceCode, this.sourceCode);\n this.parent.off(events.updateSource, this.updateSourceCode);\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.moduleDestroy, this.moduleDestroy);\n this.parent.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.onKeyDown);\n };\n ViewSource.prototype.getSourceCode = function () {\n return this.parent.createElement('textarea', { className: 'e-rte-srctextarea' + ' ' + this.parent.cssClass });\n };\n ViewSource.prototype.wireEvent = function (element) {\n this.keyboardModule = new KeyboardEvents(element, {\n keyAction: this.previewKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n EventHandler.add(this.previewElement, 'mousedown', this.mouseDownHandler, this);\n };\n ViewSource.prototype.unWireEvent = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n if (this.previewElement) {\n EventHandler.remove(this.previewElement, 'mousedown', this.mouseDownHandler);\n }\n };\n ViewSource.prototype.wireBaseKeyDown = function () {\n this.parent.keyboardModule = new KeyboardEvents(this.contentModule.getEditPanel(), {\n keyAction: this.parent.keyDown.bind(this.parent), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n };\n ViewSource.prototype.unWireBaseKeyDown = function () {\n this.parent.keyboardModule.destroy();\n };\n ViewSource.prototype.mouseDownHandler = function (e) {\n this.parent.notify(events.sourceCodeMouseDown, { args: e });\n };\n ViewSource.prototype.previewKeyDown = function (event) {\n switch (event.action) {\n case 'html-source':\n this.updateSourceCode(event);\n event.preventDefault();\n break;\n case 'toolbar-focus':\n if (this.parent.toolbarSettings.enable) {\n var selector = '.e-toolbar-item[title] [tabindex]';\n this.parent.toolbarModule.baseToolbar.toolbarObj.element.querySelector(selector).focus();\n }\n break;\n }\n };\n ViewSource.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'html-source':\n e.event.preventDefault();\n this.sourceCode(e);\n e.callBack({\n requestType: 'SourceCode',\n editorMode: 'HTML',\n event: e.event\n });\n break;\n }\n };\n /**\n * sourceCode method\n *\n * @param {ClickEventArgs} args - specifies the click event.\n * @returns {void}\n * @hidden\n\n */\n ViewSource.prototype.sourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.parent.element);\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'SourceCode', updateItem: 'Preview',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (isNullOrUndefined(this.previewElement)) {\n this.previewElement = this.getSourceCode();\n }\n this.parent.updateValueData();\n if (this.parent.iframeSettings.enable) {\n var rteContent = void 0;\n if (isNullOrUndefined(this.parent.element.querySelector('#' + this.parent.element.id + '_source-view'))) {\n rteContent = this.parent.createElement('div', {\n className: 'e-source-content', id: this.parent.element.id + '_source-view'\n });\n }\n else {\n rteContent = this.parent.element.querySelector('#' + this.parent.element.id + '_source-view');\n }\n rteContent.appendChild(this.previewElement);\n this.parent.element.appendChild(rteContent);\n rteContent.style.height = this.contentModule.getPanel().style.height;\n rteContent.style.marginTop = this.contentModule.getPanel().style.marginTop;\n this.getPanel().value = this.getTextAreaValue();\n this.contentModule.getPanel().style.display = 'none';\n rteContent.style.display = 'block';\n this.getPanel().style.display = 'block';\n }\n else {\n this.contentModule.getPanel().appendChild(this.previewElement);\n this.getPanel().value = this.getTextAreaValue();\n this.contentModule.getEditPanel().style.display = 'none';\n this.previewElement.style.display = 'block';\n }\n this.parent.isBlur = false;\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n this.parent.enableToolbarItem('SourceCode');\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n removeClass(tbItems, [CLS_ACTIVE]);\n this.parent.setContentHeight('sourceCode', true);\n this.wireEvent(this.previewElement);\n this.unWireBaseKeyDown();\n this.previewElement.focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && !this.parent.iframeSettings.enable) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder.e-rte-placeholder');\n placeHolderWrapper.style.display = 'none';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n this.parent.invokeChangeEvent();\n };\n /**\n * updateSourceCode method\n *\n * @param {ClickEventArgs} args - specifies the click event.\n * @returns {void}\n * @hidden\n\n */\n ViewSource.prototype.updateSourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'Preview', targetItem: 'Preview', args: args });\n var editHTML = this.getPanel();\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'Preview', updateItem: 'SourceCode',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n var serializeValue = this.parent.serializeValue(editHTML.value);\n var value;\n if (serializeValue === null || serializeValue === '') {\n if (this.parent.enterKey === 'DIV') {\n value = '

';\n }\n else if (this.parent.enterKey === 'BR') {\n value = '
';\n }\n else {\n value = '


';\n }\n }\n else {\n value = serializeValue;\n }\n if (this.parent.iframeSettings.enable) {\n editHTML.parentElement.style.display = 'none';\n editHTML.style.display = 'none';\n this.contentModule.getPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = value;\n }\n else {\n editHTML.style.display = 'none';\n this.contentModule.getEditPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = value;\n }\n this.parent.isBlur = false;\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n this.parent.setContentHeight('preview', true);\n this.unWireEvent();\n this.wireBaseKeyDown();\n this.contentModule.getEditPanel().focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && this.contentModule.getEditPanel().innerText.length === 0) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder.e-rte-placeholder');\n placeHolderWrapper.style.display = 'block';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Preview', targetItem: 'Preview', args: args });\n this.parent.formatter.enableUndo(this.parent);\n this.parent.addAudioVideoWrapper();\n this.parent.invokeChangeEvent();\n this.parent.notify(events.tableclass, {});\n };\n ViewSource.prototype.getTextAreaValue = function () {\n return (this.contentModule.getEditPanel().innerHTML === '


') ||\n (this.contentModule.getEditPanel().innerHTML === '

') ||\n (this.contentModule.getEditPanel().innerHTML === '
') ||\n (this.contentModule.getEditPanel().childNodes.length === 1 &&\n (this.contentModule.getEditPanel().childNodes[0].tagName === 'P' &&\n this.contentModule.getEditPanel().innerHTML.length === 7) ||\n (this.contentModule.getEditPanel().childNodes[0].tagName === 'DIV' &&\n this.contentModule.getEditPanel().innerHTML.length === 11)) ? '' : this.parent.value;\n };\n /**\n * getPanel method\n *\n * @returns {void}\n * @hidden\n\n */\n ViewSource.prototype.getPanel = function () {\n return this.parent.element && this.parent.element.querySelector('.e-rte-srctextarea');\n };\n /**\n * getViewPanel method\n *\n * @returns {void}\n * @hidden\n\n */\n ViewSource.prototype.getViewPanel = function () {\n return (this.parent.iframeSettings.enable && this.getPanel()) ? this.getPanel().parentElement : this.getPanel();\n };\n /**\n * Destroy the entire RichTextEditor.\n *\n * @returns {void}\n * @hidden\n\n */\n ViewSource.prototype.destroy = function () {\n this.removeEventListener();\n };\n ViewSource.prototype.moduleDestroy = function () {\n this.parent = null;\n };\n return ViewSource;\n}());\nexport { ViewSource };\n","/**\n * @hidden\n\n */\nexport var executeGroup = {\n 'bold': {\n command: 'Style',\n subCommand: 'Bold',\n value: 'strong'\n },\n 'italic': {\n command: 'Style',\n subCommand: 'Italic',\n value: 'em'\n },\n 'underline': {\n command: 'Style',\n subCommand: 'Underline',\n value: 'span'\n },\n 'strikeThrough': {\n command: 'Style',\n subCommand: 'StrikeThrough',\n value: 'span'\n },\n 'insertCode': {\n command: 'Formats',\n subCommand: 'Pre',\n value: 'pre'\n },\n 'superscript': {\n command: 'Effects',\n subCommand: 'SuperScript',\n value: 'sup'\n },\n 'subscript': {\n command: 'Effects',\n subCommand: 'SubScript',\n value: 'sub'\n },\n 'uppercase': {\n command: 'Casing',\n subCommand: 'UpperCase'\n },\n 'lowercase': {\n command: 'Casing',\n subCommand: 'LowerCase'\n },\n 'fontColor': {\n command: 'font',\n subCommand: 'fontcolor',\n value: '#ff0000'\n },\n 'fontName': {\n command: 'font',\n subCommand: 'fontname',\n value: 'Segoe UI'\n },\n 'fontSize': {\n command: 'font',\n subCommand: 'fontsize',\n value: '10pt'\n },\n 'backColor': {\n command: 'font',\n subCommand: 'backgroundcolor',\n value: '#ffff00'\n },\n 'justifyCenter': {\n command: 'Alignments',\n subCommand: 'JustifyCenter'\n },\n 'justifyFull': {\n command: 'Alignments',\n subCommand: 'JustifyFull'\n },\n 'justifyLeft': {\n command: 'Alignments',\n subCommand: 'JustifyLeft'\n },\n 'justifyRight': {\n command: 'Alignments',\n subCommand: 'JustifyRight'\n },\n 'undo': {\n command: 'Actions',\n subCommand: 'Undo'\n },\n 'redo': {\n command: 'Actions',\n subCommand: 'Redo'\n },\n 'createLink': {\n command: 'Links',\n subCommand: 'createLink'\n },\n 'editLink': {\n command: 'Links',\n subCommand: 'createLink'\n },\n 'createImage': {\n command: 'Images',\n subCommand: 'Images'\n },\n 'formatBlock': {\n command: 'Formats',\n value: 'P'\n },\n 'heading': {\n command: 'Formats',\n value: 'H1'\n },\n 'indent': {\n command: 'Indents',\n subCommand: 'Indent'\n },\n 'outdent': {\n command: 'Indents',\n subCommand: 'Outdent'\n },\n 'insertHTML': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertText': {\n command: 'InsertText',\n subCommand: 'InsertText',\n value: ''\n },\n 'insertHorizontalRule': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '
'\n },\n 'insertImage': {\n command: 'Images',\n subCommand: 'Image'\n },\n 'insertAudio': {\n command: 'Audios',\n subCommand: 'Audio'\n },\n 'insertVideo': {\n command: 'Videos',\n subCommand: 'Video'\n },\n 'editImage': {\n command: 'Images',\n subCommand: 'Image'\n },\n 'insertTable': {\n command: 'Table',\n subCommand: 'CreateTable'\n },\n 'insertBrOnReturn': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '
'\n },\n 'insertOrderedList': {\n command: 'Lists',\n value: 'OL'\n },\n 'insertUnorderedList': {\n command: 'Lists',\n value: 'UL'\n },\n 'insertParagraph': {\n command: 'Formats',\n value: 'P'\n },\n 'removeFormat': {\n command: 'Clear',\n subCommand: 'ClearFormat'\n },\n 'copyFormatPainter': {\n command: 'FormatPainter',\n value: 'format-copy'\n },\n 'applyFormatPainter': {\n command: 'FormatPainter',\n value: 'format-paste'\n },\n 'escapeFormatPainter': {\n command: 'FormatPainter',\n value: 'escape'\n }\n};\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n *\n * @hidden\n\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n /* eslint-disable */\n /**\n * register method\n *\n * @param {string} name - specifies the name.\n * @param {T} type - specifies the type.\n * @returns {void}\n * @hidden\n\n */\n /* eslint-enable */\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[\"\" + name])) {\n this.services[\"\" + name] = type;\n }\n };\n /**\n * getService method\n *\n * @param {string} name - specifies the name.\n * @returns {void}\n * @hidden\n\n */\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[\"\" + name])) {\n // eslint-disable-next-line\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[\"\" + name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n *\n * @hidden\n\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n /**\n * addRenderer method\n *\n * @param {RenderType} name - specifies the render type\n * @param {IRenderer} type - specifies the renderer.\n * @returns {void}\n * @hidden\n\n */\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[\"\" + rName])) {\n this.rendererMap[\"\" + rName] = type;\n }\n };\n /**\n * getRenderer method\n *\n * @param {RenderType} name - specifies the render type\n * @returns {void}\n * @hidden\n\n */\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[\"\" + rName])) {\n // eslint-disable-next-line\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[\"\" + rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\n/**\n * `ExecCommandCallBack` module is used to run the editor manager command\n */\nvar ExecCommandCallBack = /** @class */ (function () {\n function ExecCommandCallBack(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ExecCommandCallBack.prototype.addEventListener = function () {\n this.parent.on(events.execCommandCallBack, this.commandCallBack, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ExecCommandCallBack.prototype.commandCallBack = function (args) {\n var formatPainterCopy = !isNOU(args.requestType) && args.requestType === 'FormatPainter' && args.action === 'format-copy';\n if (!isNOU(args) && !isNOU(args.requestType) && args.requestType !== 'Undo' && args.requestType !== 'Redo' && !formatPainterCopy) {\n this.parent.formatter.saveData();\n }\n this.parent.notify(events.toolbarRefresh, { args: args });\n this.parent.notify(events.count, {});\n };\n ExecCommandCallBack.prototype.removeEventListener = function () {\n this.parent.off(events.execCommandCallBack, this.commandCallBack);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ExecCommandCallBack;\n}());\nexport { ExecCommandCallBack };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, initializeCSPTemplate } from '@syncfusion/ej2-base';\n/**\n * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120, isPrimaryKey: true,\n template: initializeCSPTemplate(function (data) {\n return \"\" + data.name + \"\";\n }),\n customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110',\n template: initializeCSPTemplate(function (data) {\n return \"\" + data.size + \"\";\n }), format: 'n2'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nexport var toolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(toolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","/* eslint-disable */\n/**\n * Export items model\n */\nexport var templateItems = ['alignments', 'formats', 'fontname', 'fontsize', 'fontcolor', 'backgroundcolor', 'align', 'display', 'audiolayoutoption', 'videolayoutoption', 'videoalign', 'tablerows', 'tablecolumns', 'tablecell', 'tablecellhorizontalalign', 'tablecellverticalalign', 'styles', 'numberformatlist', 'bulletformatlist'];\nexport var tools = {\n 'alignments': {\n 'id': 'Alignments',\n 'icon': 'e-alignments',\n 'tooltip': 'Alignments',\n 'command': 'Alignments',\n 'subCommand': 'Alignments'\n },\n 'justifyleft': {\n 'id': 'JustifyLeft',\n 'icon': 'e-justify-left',\n 'tooltip': 'JustifyLeft',\n 'command': 'Alignments',\n 'subCommand': 'JustifyLeft'\n },\n 'justifycenter': {\n 'id': 'JustifyCenter',\n 'icon': 'e-justify-center',\n 'tooltip': 'JustifyCenter',\n 'command': 'Alignments',\n 'subCommand': 'JustifyCenter'\n },\n 'justifyright': {\n 'id': 'JustifyRight',\n 'icon': 'e-justify-right',\n 'tooltip': 'JustifyRight',\n 'command': 'Alignments',\n 'subCommand': 'JustifyRight'\n },\n 'justifyfull': {\n 'id': 'JustifyFull',\n 'icon': 'e-justify-full',\n 'tooltip': 'JustifyFull',\n 'command': 'Alignments',\n 'subCommand': 'JustifyFull'\n },\n 'fontname': {\n 'id': 'FontName',\n 'icon': 'e-font-name',\n 'tooltip': 'Font Name',\n 'command': 'Font',\n 'subCommand': 'FontName'\n },\n 'fontsize': {\n 'id': 'FontSize',\n 'icon': 'e-font-size',\n 'tooltip': 'Font Size',\n 'command': 'Font',\n 'subCommand': 'FontSize'\n },\n 'fontcolor': {\n 'id': 'FontColor',\n 'icon': 'e-rte-font-color',\n 'tooltip': 'Font Color',\n 'command': 'Font',\n 'subCommand': 'FontColor',\n 'value': '#ff0000ff'\n },\n 'backgroundcolor': {\n 'id': 'BackgroundColor',\n 'icon': 'e-background-color',\n 'tooltip': 'Background Color',\n 'command': 'Font',\n 'subCommand': 'BackgroundColor',\n 'value': '#ffff00ff'\n },\n 'bold': {\n 'id': 'Bold',\n 'icon': 'e-bold',\n 'tooltip': 'Bold',\n 'command': 'Style',\n 'subCommand': 'Bold'\n },\n 'italic': {\n 'id': 'Italic',\n 'icon': 'e-italic',\n 'tooltip': 'Italic',\n 'command': 'Style',\n 'subCommand': 'Italic'\n },\n 'underline': {\n 'id': 'Underline',\n 'icon': 'e-underline',\n 'tooltip': 'Underline',\n 'command': 'Style',\n 'subCommand': 'Underline'\n },\n 'strikethrough': {\n 'id': 'StrikeThrough',\n 'icon': 'e-strike-through',\n 'tooltip': 'StrikeThrough',\n 'command': 'Style',\n 'subCommand': 'StrikeThrough'\n },\n 'clearformat': {\n 'id': 'ClearFormat',\n 'icon': 'e-clear-format',\n 'tooltip': 'Clear Format',\n 'command': 'Clear',\n 'subCommand': 'ClearFormat'\n },\n 'clearall': {\n 'id': 'ClearAll',\n 'icon': 'e-clear-all',\n 'tooltip': 'Clear All',\n 'command': 'Clear',\n 'subCommand': 'ClearAll'\n },\n 'cut': {\n 'id': 'Cut',\n 'icon': 'e-cut',\n 'tooltip': 'Cut',\n 'command': 'ClipBoard',\n 'subCommand': 'Cut'\n },\n 'copy': {\n 'id': 'Copy',\n 'icon': 'e-copy',\n 'tooltip': 'Copy',\n 'command': 'ClipBoard',\n 'subCommand': 'Copy'\n },\n 'paste': {\n 'id': 'Paste',\n 'icon': 'e-paste',\n 'tooltip': 'Paste',\n 'command': 'ClipBoard',\n 'subCommand': 'Paste'\n },\n 'unorderedlist': {\n 'id': 'UnorderedList',\n 'icon': 'e-unorder-list',\n 'tooltip': 'Bulleted List',\n 'command': 'Lists',\n 'subCommand': 'UL'\n },\n 'orderedlist': {\n 'id': 'OrderedList',\n 'icon': 'e-order-list',\n 'tooltip': 'Numbered List',\n 'command': 'Lists',\n 'subCommand': 'OL'\n },\n 'numberformatlist': {\n 'id': 'NumberFormatList',\n 'icon': 'e-order-list',\n 'tooltip': 'Number Format List',\n 'command': 'NumberFormatList',\n 'subCommand': 'NumberFormatList'\n },\n 'bulletformatlist': {\n 'id': 'BulletFormatList',\n 'icon': 'e-unorder-list',\n 'tooltip': 'Bullet Format List',\n 'command': 'BulletFormatList',\n 'subCommand': 'BulletFormatList'\n },\n 'indent': {\n 'id': 'Indent',\n 'icon': 'e-indent',\n 'tooltip': 'Increase Indent',\n 'command': 'Indents',\n 'subCommand': 'Indent'\n },\n 'outdent': {\n 'id': 'Outdent',\n 'icon': 'e-outdent',\n 'tooltip': 'Decrease Indent',\n 'command': 'Indents',\n 'subCommand': 'Outdent'\n },\n 'undo': {\n 'id': 'Undo',\n 'icon': 'e-undo',\n 'tooltip': 'Undo',\n 'command': 'Actions',\n 'subCommand': 'Undo'\n },\n 'redo': {\n 'id': 'Redo',\n 'icon': 'e-redo',\n 'tooltip': 'Redo',\n 'command': 'Actions',\n 'subCommand': 'Redo'\n },\n 'superscript': {\n 'id': 'SuperScript',\n 'icon': 'e-super-script',\n 'tooltip': 'Superscript',\n 'command': 'Effects',\n 'subCommand': 'SuperScript'\n },\n 'subscript': {\n 'id': 'SubScript',\n 'icon': 'e-sub-script',\n 'tooltip': 'Subscript',\n 'command': 'Effects',\n 'subCommand': 'SubScript'\n },\n 'createlink': {\n 'id': 'CreateLink',\n 'icon': 'e-create-link',\n 'tooltip': 'Insert Hyperlink',\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n },\n 'openlink': {\n 'id': 'OpenLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Links',\n 'subCommand': 'OpenLink'\n },\n 'editlink': {\n 'id': 'EditLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Links',\n 'subCommand': 'EditLink'\n },\n 'removelink': {\n 'id': 'RemoveLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Links',\n 'subCommand': 'RemoveLink'\n },\n 'image': {\n 'id': 'Image',\n 'icon': 'e-image',\n 'tooltip': 'Insert Image',\n 'command': 'Images',\n 'subCommand': 'Image'\n },\n 'audio': {\n 'id': 'Audio',\n 'icon': 'e-audio',\n 'tooltip': 'Insert Audio',\n 'command': 'Audios',\n 'subCommand': 'Audio'\n },\n 'video': {\n 'id': 'Video',\n 'icon': 'e-video',\n 'tooltip': 'Insert Video',\n 'command': 'Videos',\n 'subCommand': 'Video'\n },\n 'filemanager': {\n 'id': 'FileManager',\n 'icon': 'e-rte-file-manager',\n 'tooltip': 'File Manager',\n 'command': 'Files',\n 'subCommand': 'File'\n },\n 'createtable': {\n 'id': 'CreateTable',\n 'icon': 'e-create-table',\n 'tooltip': 'Create Table',\n 'command': 'Table',\n 'subCommand': 'CreateTable'\n },\n 'removetable': {\n 'id': 'removeTable',\n 'icon': 'e-remove-table',\n 'tooltip': 'Remove Table',\n 'command': 'removeTable',\n 'subCommand': 'removeTable'\n },\n 'replace': {\n 'id': 'Replace',\n 'icon': 'e-replace',\n 'tooltip': 'Replace',\n 'command': 'Images',\n 'subCommand': 'Replace'\n },\n 'audioreplace': {\n 'id': 'AudioReplace',\n 'icon': 'e-audio-replace',\n 'tooltip': 'Audio Replace',\n 'command': 'Audios',\n 'subCommand': 'AudioReplace'\n },\n 'audioremove': {\n 'id': 'AudioRemove',\n 'icon': 'e-audio-remove',\n 'tooltip': 'Audio Remove',\n 'command': 'Audios',\n 'subCommand': 'AudioRemove'\n },\n 'audiolayoutoption': {\n 'id': 'AudioLayoutOption',\n 'icon': 'e-audio-display',\n 'tooltip': 'Audio LayoutOption',\n 'command': 'Audios',\n 'subCommand': 'AudioLayoutOption'\n },\n 'videoreplace': {\n 'id': 'VideoReplace',\n 'icon': 'e-video-replace',\n 'tooltip': 'Video Replace',\n 'command': 'Videos',\n 'subCommand': 'VideoReplace'\n },\n 'videoalign': {\n 'id': 'VideoAlign',\n 'icon': 'e-video-align',\n 'tooltip': 'Video Align',\n 'command': 'Videos',\n 'subCommand': 'VideoAlign'\n },\n 'videoremove': {\n 'id': 'VideoRemove',\n 'icon': 'e-video-remove',\n 'tooltip': 'Video Remove',\n 'command': 'Videos',\n 'subCommand': 'VideoRemove'\n },\n 'videolayoutoption': {\n 'id': 'VideoLayoutOption',\n 'icon': 'e-video-display',\n 'tooltip': 'Video LayoutOption',\n 'command': 'Videos',\n 'subCommand': 'VideoLayoutOption'\n },\n 'videodimension': {\n 'id': 'VideoDimension',\n 'icon': 'e-video-dimension',\n 'tooltip': 'Video Dimension',\n 'command': 'Videos',\n 'subCommand': 'VideoDimension'\n },\n 'align': {\n 'id': 'Align',\n 'icon': 'e-align',\n 'tooltip': 'Align',\n 'command': 'Images',\n 'subCommand': 'Align'\n },\n 'caption': {\n 'id': 'Caption',\n 'icon': 'e-caption',\n 'tooltip': 'Image Caption',\n 'command': 'Images',\n 'subCommand': 'Caption'\n },\n 'remove': {\n 'id': 'Remove',\n 'icon': 'e-remove',\n 'tooltip': 'Remove',\n 'command': 'Images',\n 'subCommand': 'Remove'\n },\n 'openimagelink': {\n 'id': 'OpenImageLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Images',\n 'subCommand': 'OpenImageLink'\n },\n 'editimagelink': {\n 'id': 'EditImageLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Images',\n 'subCommand': 'EditImageLink'\n },\n 'removeimagelink': {\n 'id': 'RemoveImageLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Images',\n 'subCommand': 'RemoveImageLink'\n },\n 'insertlink': {\n 'id': 'InsertLink',\n 'icon': 'e-insert-link',\n 'tooltip': 'Insert Link',\n 'command': 'Images',\n 'subCommand': 'InsertLink'\n },\n 'display': {\n 'id': 'Display',\n 'icon': 'e-display',\n 'tooltip': 'Display',\n 'command': 'Images',\n 'subCommand': 'Display'\n },\n 'alttext': {\n 'id': 'AltText',\n 'icon': 'e-alt-text',\n 'tooltip': 'Alternative Text',\n 'command': 'Images',\n 'subCommand': 'AltText'\n },\n 'dimension': {\n 'id': 'Dimension',\n 'icon': 'e-img-dimension',\n 'tooltip': 'Change Size',\n 'command': 'Images',\n 'subCommand': 'Dimension'\n },\n 'fullscreen': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'View',\n 'subCommand': 'Maximize'\n },\n 'maximize': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'FullScreen',\n 'subCommand': 'Maximize'\n },\n 'minimize': {\n 'id': 'Minimize',\n 'icon': 'e-minimize',\n 'tooltip': 'Minimize',\n 'command': 'FullScreen',\n 'subCommand': 'Minimize'\n },\n 'lowercase': {\n 'id': 'LowerCase',\n 'icon': 'e-lower-case',\n 'tooltip': 'Lower Case',\n 'command': 'Casing',\n 'subCommand': 'LowerCase'\n },\n 'uppercase': {\n 'id': 'UpperCase',\n 'icon': 'e-upper-case',\n 'tooltip': 'Upper Case',\n 'command': 'Casing',\n 'subCommand': 'UpperCase'\n },\n 'print': {\n 'id': 'Print',\n 'icon': 'e-print',\n 'tooltip': 'Print',\n 'command': 'Print',\n 'subCommand': 'Print'\n },\n 'formats': {\n 'id': 'Formats',\n 'icon': 'e-formats',\n 'tooltip': 'Formats',\n 'command': 'Formats',\n 'subCommand': 'Formats'\n },\n 'sourcecode': {\n 'id': 'SourceCode',\n 'icon': 'e-source-code',\n 'tooltip': 'Source Code',\n 'command': 'SourceCode',\n 'subCommand': 'SourceCode'\n },\n 'preview': {\n 'id': 'Preview',\n 'icon': 'e-preview',\n 'tooltip': 'Preview',\n 'command': 'Preview',\n 'subCommand': 'Preview'\n },\n 'viewside': {\n 'id': 'ViewSide',\n 'icon': 'e-view-side',\n 'tooltip': 'ViewSide',\n 'command': 'ViewSide',\n 'subCommand': 'ViewSide'\n },\n 'insertcode': {\n 'id': 'InsertCode',\n 'icon': 'e-insert-code',\n 'tooltip': 'Insert Code',\n 'command': 'Formats',\n 'subCommand': 'Pre'\n },\n 'tableheader': {\n 'id': 'TableHeader',\n 'icon': 'e-table-header',\n 'tooltip': 'Table Header',\n 'command': 'Table',\n 'subCommand': 'TableHeader'\n },\n 'tableremove': {\n 'id': 'TableRemove',\n 'icon': 'e-table-remove',\n 'tooltip': 'Table Remove',\n 'command': 'Table',\n 'subCommand': 'TableRemove'\n },\n 'tablerows': {\n 'id': 'TableRows',\n 'icon': 'e-table-rows',\n 'tooltip': 'Table Rows',\n 'command': 'Table',\n 'subCommand': 'TableRows'\n },\n 'tablecolumns': {\n 'id': 'TableColumns',\n 'icon': 'e-table-columns',\n 'tooltip': 'Table Columns',\n 'command': 'Table',\n 'subCommand': 'TableColumns'\n },\n 'tablecell': {\n 'id': 'TableCell',\n 'icon': 'e-table-cell',\n 'tooltip': 'Table Cell',\n 'command': 'Table',\n 'subCommand': 'TableCell'\n },\n 'tablecellbackground': {\n 'id': 'TableCellBackground',\n 'icon': 'e-table-cell-background',\n 'tooltip': 'Table Cell Background',\n 'command': 'Table',\n 'subCommand': 'TableCellBackground'\n },\n 'tablecellhorizontalalign': {\n 'id': 'TableCellHorizontalAlign',\n 'icon': 'e-table-cell-horizontalAlign',\n 'tooltip': 'Table Cell HorizontalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellHorizontalAlign'\n },\n 'tablecellverticalalign': {\n 'id': 'TableCellVerticalAlign',\n 'icon': 'e-table-cell-verticalAlign',\n 'tooltip': 'Table Cell VerticalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellVerticalAlign'\n },\n 'tableeditproperties': {\n 'id': 'TableEditProperties',\n 'icon': 'e-table-edit-properties',\n 'tooltip': 'Table Edit Properties',\n 'command': 'Table',\n 'subCommand': 'TableEditProperties'\n },\n 'styles': {\n 'id': 'Styles',\n 'icon': 'e-table-styles',\n 'tooltip': 'Styles',\n 'command': 'Table',\n 'subCommand': 'Styles'\n },\n 'formatpainter': {\n 'id': 'FormatPainter',\n 'icon': 'e-rte-format-painter',\n 'tooltip': 'Format Painter',\n 'command': 'FormatPainter',\n 'subCommand': 'FormatPainter'\n },\n 'emojipicker': {\n 'id': 'EmojiPicker',\n 'icon': 'e-emoji',\n 'tooltip': 'Emoji Icon',\n 'command': 'EmojiPicker',\n 'subCommand': 'EmojiPicker'\n }\n};\nvar alignmentLocale = [\n { locale: 'alignmentsDropDownLeft', value: 'JustifyLeft' },\n { locale: 'alignmentsDropDownCenter', value: 'JustifyCenter' },\n { locale: 'alignmentsDropDownRight', value: 'JustifyRight' },\n { locale: 'alignmentsDropDownJustify', value: 'JustifyFull' }\n];\nexport var alignmentItems = [\n { iconCss: 'e-icons e-justify-left', text: 'Align Left', command: 'Alignments', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', text: 'Align Center', command: 'Alignments', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', text: 'Align Right', command: 'Alignments', subCommand: 'JustifyRight' },\n { iconCss: 'e-icons e-justify-full', text: 'Align Justify', command: 'Alignments', subCommand: 'JustifyFull' }\n];\nexport var imageAlignItems = [\n { iconCss: 'e-icons e-justify-left', command: 'Images', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', command: 'Images', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', command: 'Images', subCommand: 'JustifyRight' },\n];\nexport var videoAlignItems = [\n { iconCss: 'e-icons e-justify-left', command: 'Videos', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', command: 'Videos', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', command: 'Videos', subCommand: 'JustifyRight' },\n];\nvar displayLocale = [\n { locale: 'imageDisplayDropDownInline', value: 'Inline' },\n { locale: 'imageDisplayDropDownBreak', value: 'Break' }\n];\nvar audioLayoutOptionLocale = [\n { locale: 'audioLayoutOptionDropDownInline', value: 'Inline' },\n { locale: 'audioLayoutOptionDropDownBreak', value: 'Break' }\n];\nvar videoLayoutOptionLocale = [\n { locale: 'videoLayoutOptionDropDownInline', value: 'Inline' },\n { locale: 'videoLayoutOptionDropDownBreak', value: 'Break' }\n];\nexport var imageDisplayItems = [\n { text: 'Inline', cssClass: 'e-inline', command: 'Images', subCommand: 'Inline' },\n { text: 'Break', cssClass: 'e-break', command: 'Images', subCommand: 'Break' },\n];\nexport var audioLayoutOptionItems = [\n { text: 'Inline', cssClass: 'e-audio-inline', command: 'Audios', subCommand: 'Inline' },\n { text: 'Break', cssClass: 'e-audio-break', command: 'Audios', subCommand: 'Break' },\n];\nexport var videoLayoutOptionItems = [\n { text: 'Inline', cssClass: 'e-video-inline', command: 'Videos', subCommand: 'Inline' },\n { text: 'Break', cssClass: 'e-video-break', command: 'Videos', subCommand: 'Break' },\n];\nexport var tableCellItems = [\n { iconCss: 'e-icons e-cell-merge', text: 'Merge cells', command: 'Table', subCommand: 'Merge' },\n { iconCss: 'e-icons e-cell-horizontal-split', text: 'Horizontal split', command: 'Table', subCommand: 'HorizontalSplit' },\n { iconCss: 'e-icons e-cell-vertical-split', text: 'Vertical split', command: 'Table', subCommand: 'VerticalSplit' },\n];\nvar tableRowLocale = [\n { locale: 'tableInsertRowDropDownBefore', value: 'InsertRowBefore' },\n { locale: 'tableInsertRowDropDownAfter', value: 'InsertRowAfter' },\n { locale: 'tableInsertRowDropDownDelete', value: 'DeleteRow' }\n];\nexport var tableRowsItems = [\n { iconCss: 'e-icons e-insert-row-before', text: 'Insert row before', command: 'Table', subCommand: 'InsertRowBefore' },\n { iconCss: 'e-icons e-insert-row-after', text: 'Insert row after', command: 'Table', subCommand: 'InsertRowAfter' },\n { iconCss: 'e-icons e-delete-row', text: 'Delete row', command: 'Table', subCommand: 'DeleteRow' },\n];\nvar tableColumnLocale = [\n { locale: 'tableInsertColumnDropDownLeft', value: 'InsertColumnLeft' },\n { locale: 'tableInsertColumnDropDownRight', value: 'InsertColumnRight' },\n { locale: 'tableInsertColumnDropDownDelete', value: 'DeleteColumn' }\n];\nexport var tableColumnsItems = [\n { iconCss: 'e-icons e-insert-column-left', text: 'Insert column left', command: 'Table', subCommand: 'InsertColumnLeft' },\n { iconCss: 'e-icons e-insert-column-right', text: 'Insert column right', command: 'Table', subCommand: 'InsertColumnRight' },\n { iconCss: 'e-icons e-delete-column', text: 'Delete column', command: 'Table', subCommand: 'DeleteColumn' },\n];\nvar tableVerticalLocale = [\n { locale: 'tableVerticalAlignDropDownTop', value: 'AlignTop' },\n { locale: 'tableVerticalAlignDropDownMiddle', value: 'AlignMiddle' },\n { locale: 'tableVerticalAlignDropDownBottom', value: 'AlignBottom' }\n];\nexport var TableCellVerticalAlignItems = [\n { iconCss: 'e-icons e-align-top', text: 'Align Top', command: 'Table', subCommand: 'AlignTop' },\n { iconCss: 'e-icons e-align-middle', text: 'Align Middle', command: 'Table', subCommand: 'AlignMiddle' },\n { iconCss: 'e-icons e-align-bottom', text: 'Align Bottom', command: 'Table', subCommand: 'AlignBottom' },\n];\nvar tableStyleLocale = [\n { locale: 'tableStylesDropDownDashedBorder', value: 'Dashed' },\n { locale: 'tableStylesDropDownAlternateRows', value: 'Alternate' }\n];\nexport var TableStyleItems = [\n { text: 'Dashed Borders', cssClass: 'e-dashed-borders', command: 'Table', subCommand: 'Dashed' },\n { text: 'Alternate Rows', cssClass: 'e-alternate-rows', command: 'Table', subCommand: 'Alternate' }\n];\nexport var predefinedItems = ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments',\n 'OrderedList', 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo'];\nexport var fontFamily = [\n { cssClass: 'e-segoe-ui', text: 'Segoe UI', command: 'Font', subCommand: 'FontName', value: 'Segoe UI' },\n { cssClass: 'e-arial', text: 'Arial', command: 'Font', subCommand: 'FontName', value: 'Arial,Helvetica,sans-serif' },\n { cssClass: 'e-georgia', text: 'Georgia', command: 'Font', subCommand: 'FontName', value: 'Georgia,serif' },\n { cssClass: 'e-impact', text: 'Impact', command: 'Font', subCommand: 'FontName', value: 'Impact,Charcoal,sans-serif' },\n { cssClass: 'e-tahoma', text: 'Tahoma', command: 'Font', subCommand: 'FontName', value: 'Tahoma,Geneva,sans-serif' },\n { cssClass: 'e-times-new-roman', text: 'Times New Roman', command: 'Font', subCommand: 'FontName', value: 'Times New Roman,Times,serif' },\n { cssClass: 'e-verdana', text: 'Verdana', command: 'Font', subCommand: 'FontName', value: 'Verdana,Geneva,sans-serif' }\n];\nexport var fontSize = [\n { text: '8 pt', value: '8pt' },\n { text: '10 pt', value: '10pt' },\n { text: '12 pt', value: '12pt' },\n { text: '14 pt', value: '14pt' },\n { text: '18 pt', value: '18pt' },\n { text: '24 pt', value: '24pt' },\n { text: '36 pt', value: '36pt' }\n];\nexport var formatItems = [\n { cssClass: 'e-paragraph', text: 'Paragraph', command: 'Formats', subCommand: 'P', value: 'P' },\n { cssClass: 'e-code', text: 'Code', command: 'Formats', subCommand: 'Pre', value: 'Pre' },\n { cssClass: 'e-quote', text: 'Quotation', command: 'Formats', subCommand: 'BlockQuote', value: 'BlockQuote' },\n { cssClass: 'e-h1', text: 'Heading 1', command: 'Formats', subCommand: 'H1', value: 'H1' },\n { cssClass: 'e-h2', text: 'Heading 2', command: 'Formats', subCommand: 'H2', value: 'H2' },\n { cssClass: 'e-h3', text: 'Heading 3', command: 'Formats', subCommand: 'H3', value: 'H3' },\n { cssClass: 'e-h4', text: 'Heading 4', command: 'Formats', subCommand: 'H4', value: 'H4' }\n];\nexport var fontColor = {\n 'Custom': [\n '', '#000000', '#e7e6e6', '#44546a', '#4472c4', '#ed7d31', '#a5a5a5', '#ffc000', '#70ad47', '#ff0000',\n '#f2f2f2', '#808080', '#cfcdcd', '#d5dce4', '#d9e2f3', '#fbe4d5', '#ededed', '#fff2cc', '#e2efd9', '#ffcccc',\n '#d9d9d9', '#595959', '#aeaaaa', '#acb9ca', '#b4c6e7', '#f7caac', '#dbdbdb', '#ffe599', '#c5e0b3', '#ff8080',\n '#bfbfbf', '#404040', '#747070', '#8496b0', '#8eaadb', '#f4b083', '#c9c9c9', '#ffd966', '#a8d08d', '#ff3333',\n '#a6a6a6', '#262626', '#3b3838', '#323e4f', '#2f5496', '#c45911', '#7b7b7b', '#bf8f00', '#538135', '#b30000',\n '#7f7f7f', '#0d0d0d', '#161616', '#212934', '#1f3763', '#823b0b', '#525252', '#7f5f00', '#375623', '#660000'\n ]\n};\nexport var backgroundColor = {\n 'Custom': [\n '', '#000000', '#ffff00', '#00ff00', '#00ffff', '#0000ff', '#ff0000', '#000080', '#800080', '#996633',\n '#f2f2f2', '#808080', '#ffffcc', '#b3ffb3', '#ccffff', '#ccccff', '#ffcccc', '#ccccff', '#ff80ff', '#f2e6d9',\n '#d9d9d9', '#595959', '#ffff80', '#80ff80', '#b3ffff', '#8080ff', '#ff8080', '#8080ff', '#ff00ff', '#dfbf9f',\n '#bfbfbf', '#404040', '#ffff33', '#33ff33', '#33ffff', '#3333ff', '#ff3333', '#0000b3', '#b300b3', '#c68c53',\n '#a6a6a6', '#262626', '#e6e600', '#00b300', '#009999', '#000099', '#b30000', '#000066', '#660066', '#86592d',\n '#7f7f7f', '#0d0d0d', '#999900', '#006600', '#006666', '#000066', '#660000', '#00004d', '#4d004d', '#734d26'\n ]\n};\nexport var numberFormatList = [\n { text: 'None', command: 'Lists', subCommand: 'NumberFormatList', value: 'none' },\n { text: 'Number', command: 'Lists', subCommand: 'NumberFormatList', value: 'decimal' },\n { text: 'Lower Greek', command: 'Lists', subCommand: 'NumberFormatList', value: 'lowerGreek' },\n { text: 'Lower Roman', command: 'Lists', subCommand: 'NumberFormatList', value: 'lowerRoman' },\n { text: 'Upper Alpha', command: 'Lists', subCommand: 'NumberFormatList', value: 'upperAlpha' },\n { text: 'Lower Alpha', command: 'Lists', subCommand: 'NumberFormatList', value: 'lowerAlpha' },\n { text: 'Upper Roman', command: 'Lists', subCommand: 'NumberFormatList', value: 'upperRoman' },\n];\nexport var bulletFormatList = [\n { text: 'None', command: 'Lists', subCommand: 'BulletFormatList', value: 'none' },\n { text: 'Disc', command: 'Lists', subCommand: 'BulletFormatList', value: 'disc' },\n { text: 'Circle', command: 'Lists', subCommand: 'BulletFormatList', value: 'circle' },\n { text: 'Square', command: 'Lists', subCommand: 'BulletFormatList', value: 'square' },\n];\nfunction getLocale(self, localeItems, item) {\n for (var i = 0; localeItems.length > i; i++) {\n if (localeItems[i].value === item.subCommand) {\n return self.localeObj.getConstant(localeItems[i].locale);\n }\n }\n return item.text;\n}\nexport function updateDropDownLocale(self) {\n alignmentItems.forEach(function (item, i) {\n alignmentItems[i].text = getLocale(self, alignmentLocale, alignmentItems[i]);\n });\n imageDisplayItems.forEach(function (item, i) {\n imageDisplayItems[i].text = getLocale(self, displayLocale, imageDisplayItems[i]);\n });\n audioLayoutOptionItems.forEach(function (item, i) {\n audioLayoutOptionItems[i].text = getLocale(self, audioLayoutOptionLocale, audioLayoutOptionItems[i]);\n });\n videoLayoutOptionItems.forEach(function (item, i) {\n videoLayoutOptionItems[i].text = getLocale(self, videoLayoutOptionLocale, videoLayoutOptionItems[i]);\n });\n tableRowsItems.forEach(function (item, i) {\n tableRowsItems[i].text = getLocale(self, tableRowLocale, tableRowsItems[i]);\n });\n tableColumnsItems.forEach(function (item, i) {\n tableColumnsItems[i].text = getLocale(self, tableColumnLocale, tableColumnsItems[i]);\n });\n TableCellVerticalAlignItems.forEach(function (item, i) {\n TableCellVerticalAlignItems[i].text = getLocale(self, tableVerticalLocale, TableCellVerticalAlignItems[i]);\n });\n TableStyleItems.forEach(function (item, i) {\n TableStyleItems[i].text = getLocale(self, tableStyleLocale, TableStyleItems[i]);\n });\n}\nexport var windowKeys = {\n 'Insert Link': 'Ctrl + K',\n 'Insert Image': 'Ctrl + Shift + I',\n 'Create Table': 'Ctrl + Shift + E',\n 'Undo': 'Ctrl + Z',\n 'Redo': 'Ctrl + Y',\n 'Copy': 'Ctrl + C',\n 'Cut': 'Ctrl + X',\n 'Paste': 'Ctrl + V',\n 'Bold': 'Ctrl + B',\n 'Italic': 'Ctrl + I',\n 'Underline': 'Ctrl + U',\n 'Strikethrough': 'Ctrl + Shift + S',\n 'Upper Case': 'Ctrl + Shift + U',\n 'Lower Case': 'Ctrl + Shift + L',\n 'Superscript': 'Ctrl + Shift + =',\n 'Subscript': 'Ctrl + =',\n 'Source Code': 'Ctrl + Shift + H',\n 'Maximize': 'Ctrl + Shift + F',\n 'Minimize': 'Esc',\n 'Clear Format': 'Ctrl + Shift + R',\n 'Numbered List': 'Ctrl + Shift + O',\n 'Bulleted List': 'Ctrl + Alt + O',\n 'Format Painter': 'Alt + Shift + C, Alt + Shift + V'\n};\nexport var defaultEmojiIcons = [{\n name: 'Smilies & People', code: '1F600', iconCss: 'e-emoji', icons: [{ code: '1F600', desc: 'Grinning face' },\n { code: '1F603', desc: 'Grinning face with big eyes' },\n { code: '1F604', desc: 'Grinning face with smiling eyes' },\n { code: '1F606', desc: 'Grinning squinting face' },\n { code: '1F605', desc: 'Grinning face with sweat' },\n { code: '1F602', desc: 'Face with tears of joy' },\n { code: '1F923', desc: 'Rolling on the floor laughing' },\n { code: '1F60A', desc: 'Smiling face with smiling eyes' },\n { code: '1F607', desc: 'Smiling face with halo' },\n { code: '1F642', desc: 'Slightly smiling face' },\n { code: '1F643', desc: 'Upside-down face' },\n { code: '1F60D', desc: 'Smiling face with heart-eyes' },\n { code: '1F618', desc: 'Face blowing a kiss' },\n { code: '1F61B', desc: 'Face with tongue' },\n { code: '1F61C', desc: 'Winking face with tongue' },\n { code: '1F604', desc: 'Grinning face with smiling eyes' },\n { code: '1F469', desc: 'Woman' },\n { code: '1F468', desc: 'Man' },\n { code: '1F467', desc: 'Girl' },\n { code: '1F466', desc: 'Boy' },\n { code: '1F476', desc: 'Baby' },\n { code: '1F475', desc: 'Old woman' },\n { code: '1F474', desc: 'Old man' },\n { code: '1F46E', desc: 'Police officer' },\n { code: '1F477', desc: 'Construction worker' },\n { code: '1F482', desc: 'Guard' },\n { code: '1F575', desc: 'Detective' },\n { code: '1F9D1', desc: 'Cook' }]\n }, {\n name: 'Animals & Nature', code: '1F435', iconCss: 'e-animals', icons: [{ code: '1F436', desc: 'Dog face' },\n { code: '1F431', desc: 'Cat face' },\n { code: '1F42D', desc: 'Mouse face' },\n { code: '1F439', desc: 'Hamster face' },\n { code: '1F430', desc: 'Rabbit face' },\n { code: '1F98A', desc: 'Fox face' },\n { code: '1F43B', desc: 'Bear face' },\n { code: '1F43C', desc: 'Panda face' },\n { code: '1F428', desc: 'Koala' },\n { code: '1F42F', desc: 'Tiger face' },\n { code: '1F981', desc: 'Lion face' },\n { code: '1F42E', desc: 'Cow face' },\n { code: '1F437', desc: 'Pig face' },\n { code: '1F43D', desc: 'Pig nose' },\n { code: '1F438', desc: 'Frog face' },\n { code: '1F435', desc: 'Monkey face' },\n { code: '1F649', desc: 'Hear-no-evil monkey' },\n { code: '1F64A', desc: 'Speak-no-evil monkey' },\n { code: '1F412', desc: 'Monkey' },\n { code: '1F414', desc: 'Chicken' },\n { code: '1F427', desc: 'Penguin' },\n { code: '1F426', desc: 'Bird' },\n { code: '1F424', desc: 'Baby chick' },\n { code: '1F986', desc: 'Duck' },\n { code: '1F985', desc: 'Eagle' }]\n }, {\n name: 'Food & Drink', code: '1F347', iconCss: 'e-food-and-drinks', icons: [{ code: '1F34E', desc: 'Red apple' },\n { code: '1F34C', desc: 'Banana' },\n { code: '1F347', desc: 'Grapes' },\n { code: '1F353', desc: 'Strawberry' },\n { code: '1F35E', desc: 'Bread' },\n { code: '1F950', desc: 'Croissant' },\n { code: '1F955', desc: 'Carrot' },\n { code: '1F354', desc: 'Hamburger' },\n { code: '1F355', desc: 'Pizza' },\n { code: '1F32D', desc: 'Hot dog' },\n { code: '1F35F', desc: 'French fries' },\n { code: '1F37F', desc: 'Popcorn' },\n { code: '1F366', desc: 'Soft ice cream' },\n { code: '1F367', desc: 'Shaved ice' },\n { code: '1F36A', desc: 'Cookie' },\n { code: '1F382', desc: 'Birthday cake' },\n { code: '1F370', desc: 'Shortcake' },\n { code: '1F36B', desc: 'Chocolate bar' },\n { code: '1F369', desc: 'Donut' },\n { code: '1F36E', desc: 'Custard' },\n { code: '1F36D', desc: 'Lollipop' },\n { code: '1F36C', desc: 'Candy' },\n { code: '1F377', desc: 'Wine glass' },\n { code: '1F37A', desc: 'Beer mug' },\n { code: '1F37E', desc: 'Bottle with popping cork' }]\n }, {\n name: 'Activities', code: '1F383', iconCss: 'e-activities', icons: [{ code: '26BD', desc: 'Soccer ball' },\n { code: '1F3C0', desc: 'Basketball' },\n { code: '1F3C8', desc: 'American football' },\n { code: '26BE', desc: 'Baseball' },\n { code: '1F3BE', desc: 'Tennis' },\n { code: '1F3D0', desc: 'Volleyball' },\n { code: '1F3C9', desc: 'Rugby football' },\n { code: '1F3B1', desc: 'Pool 8 ball' },\n { code: '1F3D3', desc: 'Ping pong' },\n { code: '1F3F8', desc: 'Badminton' },\n { code: '1F94A', desc: 'Boxing glove' },\n { code: '1F3CA', desc: 'Swimmer' },\n { code: '1F3CB', desc: 'Weightlifter' },\n { code: '1F6B4', desc: 'Bicyclist' },\n { code: '1F6F9', desc: 'Skateboard' },\n { code: '1F3AE', desc: 'Video game' },\n { code: '1F579', desc: 'Joystick' },\n { code: '1F3CF', desc: 'Cricket' },\n { code: '1F3C7', desc: 'Horse racing' },\n { code: '1F3AF', desc: 'Direct hit' },\n { code: '1F3D1', desc: 'Field hockey' },\n { code: '1F3B0', desc: 'Slot machine' },\n { code: '1F3B3', desc: 'Bowling' },\n { code: '1F3B2', desc: 'Game die' },\n { code: '265F', desc: 'Chess pawn' }]\n }, {\n name: 'Travel & Places', code: '1F30D', iconCss: 'e-travel-and-places', icons: [{ code: '2708', desc: 'Airplane' },\n { code: '1F697', desc: 'Automobile' },\n { code: '1F695', desc: 'Taxi' },\n { code: '1F6B2', desc: 'Bicycle' },\n { code: '1F68C', desc: 'Bus' },\n { code: '1F682', desc: 'Locomotive' },\n { code: '1F6F3', desc: 'Passenger ship' },\n { code: '1F680', desc: 'Rocket' },\n { code: '1F681', desc: 'Helicopter' },\n { code: '1F6A2', desc: 'Ship' },\n { code: '1F3DF', desc: 'Stadium' },\n { code: '1F54C', desc: 'Mosque' },\n { code: '26EA', desc: 'Church' },\n { code: '1F6D5', desc: 'Hindu Temple' },\n { code: '1F3D4', desc: 'Snow-capped mountain' },\n { code: '1F3EB', desc: 'School' },\n { code: '1F30B', desc: 'Volcano' },\n { code: '1F3D6', desc: 'Beach with umbrella' },\n { code: '1F3DD', desc: 'Desert island' },\n { code: '1F3DE', desc: 'National park' },\n { code: '1F3F0', desc: 'Castle' },\n { code: '1F5FC', desc: 'Tokyo tower' },\n { code: '1F5FD', desc: 'Statue of liberty' },\n { code: '26E9', desc: 'Shinto shrine' },\n { code: '1F3EF', desc: 'Japanese castle' },\n { code: '1F3A2', desc: 'Roller coaster' }]\n }, {\n name: 'Objects', code: '1F507', iconCss: 'e-objects', icons: [{ code: '1F4A1', desc: 'Light bulb' },\n { code: '1F526', desc: 'Flashlight' },\n { code: '1F4BB', desc: 'Laptop computer' },\n { code: '1F5A5', desc: 'Desktop computer' },\n { code: '1F5A8', desc: 'Printer' },\n { code: '1F4F7', desc: 'Camera' },\n { code: '1F4F8', desc: 'Camera with flash' },\n { code: '1F4FD', desc: 'Film projector' },\n { code: '1F3A5', desc: 'Movie camera' },\n { code: '1F4FA', desc: 'Television' },\n { code: '1F4FB', desc: 'Radio' },\n { code: '1F50B', desc: 'Battery' },\n { code: '231A', desc: 'Watch' },\n { code: '1F4F1', desc: 'Mobile phone' },\n { code: '260E', desc: 'Telephone' },\n { code: '1F4BE', desc: 'Floppy disk' },\n { code: '1F4BF', desc: 'Optical disk' },\n { code: '1F4C0', desc: 'Digital versatile disc' },\n { code: '1F4BD', desc: 'Computer disk' },\n { code: '1F3A7', desc: 'Headphone' },\n { code: '1F3A4', desc: 'Microphone' },\n { code: '1F3B6', desc: 'Multiple musical notes' },\n { code: '1F4DA', desc: 'Books' }]\n }, {\n name: 'Symbols', code: '1F3E7', iconCss: 'e-symbols', icons: [{ code: '274C', desc: 'Cross mark' },\n { code: '2714', desc: 'Check mark' },\n { code: '26A0', desc: 'Warning sign' },\n { code: '1F6AB', desc: 'Prohibited' },\n { code: '2139', desc: 'Information' },\n { code: '267B', desc: 'Recycling symbol' },\n { code: '1F6AD', desc: 'No smoking' },\n { code: '1F4F5', desc: 'No mobile phones' },\n { code: '1F6AF', desc: 'No littering' },\n { code: '1F6B3', desc: 'No bicycles' },\n { code: '1F6B7', desc: 'No pedestrians' },\n { code: '2795', desc: 'Plus' },\n { code: '2796', desc: 'Minus' },\n { code: '2797', desc: 'Divide' },\n { code: '2716', desc: 'Multiplication' },\n { code: '1F4B2', desc: 'Dollar banknote' },\n { code: '1F4AC', desc: 'Speech balloon' },\n { code: '2755', desc: 'White exclamation mark' },\n { code: '2754', desc: 'White question mark' },\n { code: '2764', desc: 'Red heart' }]\n }];\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex, Event } from '@syncfusion/ej2-base';\nimport { AjaxSettings, ContextMenuSettings } from '@syncfusion/ej2-filemanager';\nimport { DetailsViewSettings, NavigationPaneSettings } from '@syncfusion/ej2-filemanager';\nimport { SearchSettings } from '@syncfusion/ej2-filemanager';\nimport { ToolbarSettings as FileToolbarSettings } from '@syncfusion/ej2-filemanager';\nimport { UploadSettings } from '@syncfusion/ej2-filemanager';\nimport { ToolbarType } from '../base/enum';\nimport { backgroundColor, fontColor, fontFamily, fontSize, formatItems, predefinedItems, TableStyleItems, numberFormatList, bulletFormatList, defaultEmojiIcons } from './items';\n/**\n * Configures the toolbar settings of the RichTextEditor.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enableFloating\", void 0);\n __decorate([\n Property(ToolbarType.Expand)\n ], ToolbarSettings.prototype, \"type\", void 0);\n __decorate([\n Property(predefinedItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property({})\n ], ToolbarSettings.prototype, \"itemConfigs\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\n/**\n * Configures the image settings of the RichTextEditor.\n */\nvar ImageSettings = /** @class */ (function (_super) {\n __extends(ImageSettings, _super);\n function ImageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(['.jpeg', '.jpg', '.png'])\n ], ImageSettings.prototype, \"allowedTypes\", void 0);\n __decorate([\n Property('inline')\n ], ImageSettings.prototype, \"display\", void 0);\n __decorate([\n Property('Blob')\n ], ImageSettings.prototype, \"saveFormat\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"path\", void 0);\n __decorate([\n Property(true)\n ], ImageSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], ImageSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property(0)\n ], ImageSettings.prototype, \"minHeight\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"maxHeight\", void 0);\n __decorate([\n Property(false)\n ], ImageSettings.prototype, \"resizeByPercent\", void 0);\n return ImageSettings;\n}(ChildProperty));\nexport { ImageSettings };\n/**\n * Configures the audio settings of the RichTextEditor.\n */\nvar AudioSettings = /** @class */ (function (_super) {\n __extends(AudioSettings, _super);\n function AudioSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(['.wav', '.mp3', '.m4a', '.wma'])\n ], AudioSettings.prototype, \"allowedTypes\", void 0);\n __decorate([\n Property('Inline')\n ], AudioSettings.prototype, \"layoutOption\", void 0);\n __decorate([\n Property('Blob')\n ], AudioSettings.prototype, \"saveFormat\", void 0);\n __decorate([\n Property(null)\n ], AudioSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property(null)\n ], AudioSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(null)\n ], AudioSettings.prototype, \"path\", void 0);\n return AudioSettings;\n}(ChildProperty));\nexport { AudioSettings };\n/**\n * Configures the video settings of the RichTextEditor.\n */\nvar VideoSettings = /** @class */ (function (_super) {\n __extends(VideoSettings, _super);\n function VideoSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(['.mp4', '.mov', '.wmv', '.avi'])\n ], VideoSettings.prototype, \"allowedTypes\", void 0);\n __decorate([\n Property('Inline')\n ], VideoSettings.prototype, \"layoutOption\", void 0);\n __decorate([\n Property('Blob')\n ], VideoSettings.prototype, \"saveFormat\", void 0);\n __decorate([\n Property('auto')\n ], VideoSettings.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], VideoSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], VideoSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property(null)\n ], VideoSettings.prototype, \"path\", void 0);\n __decorate([\n Property(true)\n ], VideoSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(null)\n ], VideoSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], VideoSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], VideoSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property(0)\n ], VideoSettings.prototype, \"minHeight\", void 0);\n __decorate([\n Property(null)\n ], VideoSettings.prototype, \"maxHeight\", void 0);\n __decorate([\n Property(false)\n ], VideoSettings.prototype, \"resizeByPercent\", void 0);\n return VideoSettings;\n}(ChildProperty));\nexport { VideoSettings };\n/**\n * Configures the file manager settings of the RichTextEditor.\n */\nvar FileManagerSettings = /** @class */ (function (_super) {\n __extends(FileManagerSettings, _super);\n function FileManagerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Event()\n ], FileManagerSettings.prototype, \"beforeSend\", void 0);\n __decorate([\n Complex({ getImageUrl: null, url: null, uploadUrl: null }, AjaxSettings)\n ], FileManagerSettings.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property(false)\n ], FileManagerSettings.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Complex({ visible: true, file: ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Rename', '|', 'Details'], folder: ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', '|', 'Details'], layout: ['SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'] }, ContextMenuSettings)\n ], FileManagerSettings.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManagerSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManagerSettings.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(false)\n ], FileManagerSettings.prototype, \"enable\", void 0);\n __decorate([\n Complex({ maxWidth: '650px', minWidth: '240px', visible: true }, NavigationPaneSettings)\n ], FileManagerSettings.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManagerSettings.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManagerSettings.prototype, \"rootAliasName\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManagerSettings.prototype, \"searchSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManagerSettings.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(false)\n ], FileManagerSettings.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManagerSettings.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManagerSettings.prototype, \"sortOrder\", void 0);\n __decorate([\n Complex({ visible: true, items: ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename', 'SortBy', 'Refresh', 'Selection', 'View', 'Details'] }, FileToolbarSettings)\n ], FileManagerSettings.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Complex({ autoUpload: true, minFileSize: 0, maxFileSize: 30000000, allowedExtensions: '', autoClose: false }, UploadSettings)\n ], FileManagerSettings.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManagerSettings.prototype, \"view\", void 0);\n return FileManagerSettings;\n}(ChildProperty));\nexport { FileManagerSettings };\nvar TableSettings = /** @class */ (function (_super) {\n __extends(TableSettings, _super);\n function TableSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('100%')\n ], TableSettings.prototype, \"width\", void 0);\n __decorate([\n Property(TableStyleItems)\n ], TableSettings.prototype, \"styles\", void 0);\n __decorate([\n Property(true)\n ], TableSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(0)\n ], TableSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], TableSettings.prototype, \"maxWidth\", void 0);\n return TableSettings;\n}(ChildProperty));\nexport { TableSettings };\n/**\n * Configures the quick toolbar settings of the RichTextEditor.\n */\nvar QuickToolbarSettings = /** @class */ (function (_super) {\n __extends(QuickToolbarSettings, _super);\n function QuickToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], QuickToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], QuickToolbarSettings.prototype, \"showOnRightClick\", void 0);\n __decorate([\n Property('hide')\n ], QuickToolbarSettings.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(['Open', 'Edit', 'UnLink'])\n ], QuickToolbarSettings.prototype, \"link\", void 0);\n __decorate([\n Property(['Replace', 'Align', 'Caption', 'Remove', '-', 'InsertLink', 'OpenImageLink', 'EditImageLink', 'RemoveImageLink', 'Display', 'AltText', 'Dimension'])\n ], QuickToolbarSettings.prototype, \"image\", void 0);\n __decorate([\n Property(['AudioReplace', 'AudioRemove', 'AudioLayoutOption'])\n ], QuickToolbarSettings.prototype, \"audio\", void 0);\n __decorate([\n Property(['VideoReplace', 'VideoAlign', 'VideoRemove', 'VideoLayoutOption', 'VideoDimension'])\n ], QuickToolbarSettings.prototype, \"video\", void 0);\n __decorate([\n Property(['Cut', 'Copy', 'Paste'])\n ], QuickToolbarSettings.prototype, \"text\", void 0);\n __decorate([\n Property(['TableHeader', 'TableRows', 'TableColumns', 'BackgroundColor', '-', 'TableRemove', 'Alignments', 'TableCellVerticalAlign', 'Styles'])\n ], QuickToolbarSettings.prototype, \"table\", void 0);\n return QuickToolbarSettings;\n}(ChildProperty));\nexport { QuickToolbarSettings };\n/**\n * Configure the format painter settings of the Rich Text Editor.\n */\nvar FormatPainterSettings = /** @class */ (function (_super) {\n __extends(FormatPainterSettings, _super);\n function FormatPainterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('b; em; font; sub; sup; kbd; i; s; u; code; strong; span; p; div; h1; h2; h3; h4; h5; h6; blockquote; ol; ul; li; pre;')\n ], FormatPainterSettings.prototype, \"allowedFormats\", void 0);\n __decorate([\n Property(null)\n ], FormatPainterSettings.prototype, \"deniedFormats\", void 0);\n return FormatPainterSettings;\n}(ChildProperty));\nexport { FormatPainterSettings };\n/**\n * Specifies the emoji picker options in Rich Text Editor with the following properties.\n */\nvar EmojiSettings = /** @class */ (function (_super) {\n __extends(EmojiSettings, _super);\n function EmojiSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(defaultEmojiIcons)\n ], EmojiSettings.prototype, \"iconsSet\", void 0);\n __decorate([\n Property(true)\n ], EmojiSettings.prototype, \"showSearchBox\", void 0);\n return EmojiSettings;\n}(ChildProperty));\nexport { EmojiSettings };\n/**\n * Configures the Paste Cleanup settings of the RichTextEditor.\n */\nvar PasteCleanupSettings = /** @class */ (function (_super) {\n __extends(PasteCleanupSettings, _super);\n function PasteCleanupSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], PasteCleanupSettings.prototype, \"prompt\", void 0);\n __decorate([\n Property(null)\n ], PasteCleanupSettings.prototype, \"deniedAttrs\", void 0);\n __decorate([\n Property(['background', 'background-color', 'border', 'border-bottom', 'border-left', 'border-radius', 'border-right', 'border-style', 'border-top', 'border-width', 'clear', 'color', 'cursor', 'direction', 'display', 'float', 'font', 'font-family', 'font-size', 'font-weight', 'font-style', 'height', 'left', 'line-height', 'list-style-type', 'margin', 'margin-top', 'margin-left', 'margin-right', 'margin-bottom', 'max-height', 'max-width', 'min-height', 'min-width', 'overflow', 'overflow-x', 'overflow-y', 'padding', 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', 'position', 'right', 'table-layout', 'text-align', 'text-decoration', 'text-indent', 'top', 'vertical-align', 'visibility', 'white-space', 'width'])\n ], PasteCleanupSettings.prototype, \"allowedStyleProps\", void 0);\n __decorate([\n Property(null)\n ], PasteCleanupSettings.prototype, \"deniedTags\", void 0);\n __decorate([\n Property(true)\n ], PasteCleanupSettings.prototype, \"keepFormat\", void 0);\n __decorate([\n Property(false)\n ], PasteCleanupSettings.prototype, \"plainText\", void 0);\n return PasteCleanupSettings;\n}(ChildProperty));\nexport { PasteCleanupSettings };\n/**\n * Configures the font family settings of the RichTextEditor.\n */\nvar FontFamily = /** @class */ (function (_super) {\n __extends(FontFamily, _super);\n function FontFamily() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FontFamily.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], FontFamily.prototype, \"width\", void 0);\n __decorate([\n Property(fontFamily)\n ], FontFamily.prototype, \"items\", void 0);\n return FontFamily;\n}(ChildProperty));\nexport { FontFamily };\n/**\n * Configures the font size settings of the RichTextEditor.\n */\nvar FontSize = /** @class */ (function (_super) {\n __extends(FontSize, _super);\n function FontSize() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FontSize.prototype, \"default\", void 0);\n __decorate([\n Property('35px')\n ], FontSize.prototype, \"width\", void 0);\n __decorate([\n Property(fontSize)\n ], FontSize.prototype, \"items\", void 0);\n return FontSize;\n}(ChildProperty));\nexport { FontSize };\n/**\n * Configures the format settings of the RichTextEditor.\n */\nvar Format = /** @class */ (function (_super) {\n __extends(Format, _super);\n function Format() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Format.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], Format.prototype, \"width\", void 0);\n __decorate([\n Property(formatItems)\n ], Format.prototype, \"types\", void 0);\n return Format;\n}(ChildProperty));\nexport { Format };\n/**\n * Configures the font Color settings of the RichTextEditor.\n */\nvar FontColor = /** @class */ (function (_super) {\n __extends(FontColor, _super);\n function FontColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ff0000')\n ], FontColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], FontColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], FontColor.prototype, \"columns\", void 0);\n __decorate([\n Property(fontColor)\n ], FontColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], FontColor.prototype, \"modeSwitcher\", void 0);\n return FontColor;\n}(ChildProperty));\nexport { FontColor };\n/**\n * Configures the background Color settings of the RichTextEditor.\n */\nvar BackgroundColor = /** @class */ (function (_super) {\n __extends(BackgroundColor, _super);\n function BackgroundColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ffff00')\n ], BackgroundColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], BackgroundColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], BackgroundColor.prototype, \"columns\", void 0);\n __decorate([\n Property(backgroundColor)\n ], BackgroundColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], BackgroundColor.prototype, \"modeSwitcher\", void 0);\n return BackgroundColor;\n}(ChildProperty));\nexport { BackgroundColor };\n/**\n * Configures the numberFormatList settings of the RichTextEditor.\n */\nvar NumberFormatList = /** @class */ (function (_super) {\n __extends(NumberFormatList, _super);\n function NumberFormatList() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(numberFormatList)\n ], NumberFormatList.prototype, \"types\", void 0);\n return NumberFormatList;\n}(ChildProperty));\nexport { NumberFormatList };\n/**\n * Configures the bulletFormatList settings of the RichTextEditor.\n */\nvar BulletFormatList = /** @class */ (function (_super) {\n __extends(BulletFormatList, _super);\n function BulletFormatList() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(bulletFormatList)\n ], BulletFormatList.prototype, \"types\", void 0);\n return BulletFormatList;\n}(ChildProperty));\nexport { BulletFormatList };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Objects used for configuring the iframe resources properties.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], Resources.prototype, \"styles\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"scripts\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n/**\n * Configures the iframe settings of the RTE.\n */\nvar IFrameSettings = /** @class */ (function (_super) {\n __extends(IFrameSettings, _super);\n function IFrameSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], IFrameSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], IFrameSettings.prototype, \"attributes\", void 0);\n __decorate([\n Complex({}, Resources)\n ], IFrameSettings.prototype, \"resources\", void 0);\n return IFrameSettings;\n}(ChildProperty));\nexport { IFrameSettings };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the inlineMode property of the RTE.\n */\nvar InlineMode = /** @class */ (function (_super) {\n __extends(InlineMode, _super);\n function InlineMode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InlineMode.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], InlineMode.prototype, \"onSelection\", void 0);\n return InlineMode;\n}(ChildProperty));\nexport { InlineMode };\n","/* eslint-disable */\n/**\n * Export default locale\n */\nexport var defaultLocale = {\n 'alignments': 'Alignments',\n 'justifyLeft': 'Align Left',\n 'justifyCenter': 'Align Center',\n 'justifyRight': 'Align Right',\n 'justifyFull': 'Align Justify',\n 'fontName': 'Font Name',\n 'fontSize': 'Font Size',\n 'fontColor': 'Font Color',\n 'backgroundColor': 'Background Color',\n 'bold': 'Bold',\n 'italic': 'Italic',\n 'underline': 'Underline',\n 'strikethrough': 'Strikethrough',\n 'clearFormat': 'Clear Format',\n 'clearAll': 'Clear All',\n 'cut': 'Cut',\n 'copy': 'Copy',\n 'paste': 'Paste',\n 'unorderedList': 'Bulleted List',\n 'orderedList': 'Numbered List',\n 'indent': 'Increase Indent',\n 'outdent': 'Decrease Indent',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'superscript': 'Superscript',\n 'subscript': 'Subscript',\n 'createLink': 'Insert Link',\n 'openLink': 'Open Link',\n 'editLink': 'Edit Link',\n 'removeLink': 'Remove Link',\n 'image': 'Insert Image',\n 'audio': 'Insert Audio',\n 'video': 'Insert Video',\n 'replace': 'Replace',\n 'numberFormatList': 'Number Format List',\n 'bulletFormatList': 'Bullet Format List',\n 'audioReplace': 'Replace',\n 'videoReplace': 'Replace',\n 'videoAlign': 'Align',\n 'videoDimension': 'Dimension',\n 'audioRemove': 'Remove',\n 'videoRemove': 'Remove',\n 'audioLayoutOption': 'Layout option',\n 'videoLayoutOption': 'Layout option',\n 'align': 'Align',\n 'caption': 'Image Caption',\n 'remove': 'Remove',\n 'insertLink': 'Insert Link',\n 'display': 'Display',\n 'altText': 'Alternative Text',\n 'dimension': 'Change Size',\n 'fullscreen': 'Maximize',\n 'maximize': 'Maximize',\n 'minimize': 'Minimize',\n 'lowerCase': 'Lower Case',\n 'upperCase': 'Upper Case',\n 'print': 'Print',\n 'formats': 'Formats',\n 'sourcecode': 'Code View',\n 'preview': 'Preview',\n 'viewside': 'ViewSide',\n 'insertCode': 'Insert Code',\n 'linkText': 'Display Text',\n 'linkTooltipLabel': 'Title',\n 'linkWebUrl': 'Web Address',\n 'linkTitle': 'Enter a title',\n 'linkurl': 'http://example.com',\n 'linkOpenInNewWindow': 'Open Link in New Window',\n 'linkHeader': 'Insert Link',\n 'dialogInsert': 'Insert',\n 'dialogCancel': 'Cancel',\n 'dialogUpdate': 'Update',\n 'imageHeader': 'Insert Image',\n 'audioHeader': 'Insert Audio',\n 'videoHeader': 'Insert Video',\n 'imageLinkHeader': 'You can also provide a link from the web',\n 'audioLinkHeader': 'You can also provide a link from the web',\n 'videoLinkHeader': 'Web URL',\n 'embedVideoLinkHeader': 'Media Embed URL',\n 'mdimageLink': 'Please provide a URL for your image',\n 'imageUploadMessage': 'Drop image here or browse to upload',\n 'audioUploadMessage': 'Drop an audio file or browse to upload',\n 'videoUploadMessage': 'Drop a video file or browse to upload',\n 'imageDeviceUploadMessage': 'Click here to upload',\n 'audioDeviceUploadMessage': 'Click here to upload',\n 'videoDeviceUploadMessage': 'Click here to upload',\n 'imageAlternateText': 'Alternate Text',\n 'alternateHeader': 'Alternative Text',\n 'browse': 'Browse',\n 'imageUrl': 'http://example.com/image.png',\n 'audioUrl': 'http://example.com/audio.mp3',\n 'videoUrl': 'http://example.com/video.mp3',\n 'webUrl': 'Web URL',\n 'embedUrl': 'Embed Code',\n 'imageCaption': 'Caption',\n 'imageSizeHeader': 'Image Size',\n 'videoSizeHeader': 'Video Size',\n 'imageHeight': 'Height',\n 'imageWidth': 'Width',\n 'videoHeight': 'Height',\n 'videoWidth': 'Width',\n 'textPlaceholder': 'Enter Text',\n 'inserttablebtn': 'Insert Table',\n 'tabledialogHeader': 'Insert Table',\n 'tableWidth': 'Width',\n 'cellpadding': 'Cell Padding',\n 'cellspacing': 'Cell Spacing',\n 'columns': 'Number of columns',\n 'rows': 'Number of rows',\n 'tableRows': 'Table Rows',\n 'tableColumns': 'Table Columns',\n 'tableCellHorizontalAlign': 'Table Cell Horizontal Align',\n 'tableCellVerticalAlign': 'Table Cell Vertical Align',\n 'createTable': 'Create Table',\n 'removeTable': 'Remove Table',\n 'tableHeader': 'Table Header',\n 'tableRemove': 'Table Remove',\n 'tableCellBackground': 'Table Cell Background',\n 'tableEditProperties': 'Table Edit Properties',\n 'styles': 'Styles',\n 'insertColumnLeft': 'Insert Column Left',\n 'insertColumnRight': 'Insert Column Right',\n 'deleteColumn': 'Delete Column',\n 'insertRowBefore': 'Insert Row Before',\n 'insertRowAfter': 'Insert Row After',\n 'deleteRow': 'Delete Row',\n 'tableEditHeader': 'Edit Table',\n 'TableHeadingText': 'Heading',\n 'TableColText': 'Col',\n 'imageInsertLinkHeader': 'Insert Link',\n 'editImageHeader': 'Edit Image',\n 'editAudioHeader': 'Edit Audio',\n 'editVideoHeader': 'Edit Video',\n \"alignmentsDropDownLeft\": 'Align Left',\n \"alignmentsDropDownCenter\": 'Align Center',\n \"alignmentsDropDownRight\": 'Align Right',\n \"alignmentsDropDownJustify\": 'Align Justify',\n \"imageDisplayDropDownInline\": 'Inline',\n \"imageDisplayDropDownBreak\": 'Break',\n \"audioLayoutOptionDropDownInline\": 'Inline',\n \"audioLayoutOptionDropDownBreak\": 'Break',\n \"videoLayoutOptionDropDownInline\": 'Inline',\n \"videoLayoutOptionDropDownBreak\": 'Break',\n \"tableInsertRowDropDownBefore\": 'Insert row before',\n \"tableInsertRowDropDownAfter\": 'Insert row after',\n \"tableInsertRowDropDownDelete\": 'Delete row',\n \"tableInsertColumnDropDownLeft\": 'Insert column left',\n \"tableInsertColumnDropDownRight\": 'Insert column right',\n \"tableInsertColumnDropDownDelete\": 'Delete column',\n \"tableVerticalAlignDropDownTop\": 'Align Top',\n \"tableVerticalAlignDropDownMiddle\": 'Align Middle',\n \"tableVerticalAlignDropDownBottom\": 'Align Bottom',\n \"tableStylesDropDownDashedBorder\": 'Dashed Borders',\n \"tableStylesDropDownAlternateRows\": 'Alternate Rows',\n 'pasteFormat': 'Paste Format',\n 'pasteFormatContent': 'Choose the formatting action',\n 'plainText': 'Plain Text',\n 'cleanFormat': 'Clean',\n 'keepFormat': 'Keep',\n 'pasteDialogOk': 'OK',\n 'pasteDialogCancel': 'Cancel',\n 'fileManager': 'File Manager',\n 'fileDialogHeader': 'File Browser',\n \"formatsDropDownParagraph\": 'Paragraph',\n 'formatsDropDownCode': 'Code',\n 'formatsDropDownQuotation': 'Quotation',\n 'formatsDropDownHeading1': 'Heading 1',\n 'formatsDropDownHeading2': 'Heading 2',\n 'formatsDropDownHeading3': 'Heading 3',\n 'formatsDropDownHeading4': 'Heading 4',\n 'fontNameSegoeUI': 'Segoe UI',\n 'fontNameArial': 'Arial',\n 'fontNameGeorgia': 'Georgia',\n 'fontNameImpact': 'Impact',\n 'fontNameTahoma': 'Tahoma',\n 'fontNameTimesNewRoman': 'Times New Roman',\n 'fontNameVerdana': 'Verdana',\n 'numberFormatListNumber': 'Number',\n 'numberFormatListLowerAlpha': 'LowerAlpha',\n 'numberFormatListUpperAlpha': 'UpperAlpha',\n 'numberFormatListLowerRoman': 'LowerRoman',\n 'numberFormatListUpperRoman': 'UpperRoman',\n 'numberFormatListLowerGreek': 'LowerGreek',\n 'bulletFormatListDisc': 'Disc',\n 'bulletFormatListCircle': 'Circle',\n 'bulletFormatListSquare': 'Square',\n 'numberFormatListNone': 'None',\n 'bulletFormatListNone': 'None',\n 'formatPainter': 'Format Painter',\n 'emojiPicker': 'Emoji Picker',\n 'embeddedCode': 'Embedded Code',\n 'pasteEmbeddedCodeHere': 'Paste Embedded Code here',\n 'emojiPickerTypeToFind': 'Type to find',\n 'emojiPickerNoResultFound': 'No results found',\n 'emojiPickerTrySomethingElse': 'Try something else',\n};\nexport var toolsLocale = {\n 'alignments': 'alignments',\n 'justifyleft': 'justifyLeft',\n 'justifycenter': 'justifyCenter',\n 'justifyright': 'justifyRight',\n 'justifyfull': 'justifyFull',\n 'fontname': 'fontName',\n 'fontsize': 'fontSize',\n 'fontcolor': 'fontColor',\n 'backgroundcolor': 'backgroundColor',\n 'bold': 'bold',\n 'italic': 'italic',\n 'underline': 'underline',\n 'strikethrough': 'strikethrough',\n 'clearformat': 'clearFormat',\n 'clearall': 'clearAll',\n 'cut': 'cut',\n 'copy': 'copy',\n 'paste': 'paste',\n 'unorderedlist': 'unorderedList',\n 'orderedlist': 'orderedList',\n 'indent': 'indent',\n 'outdent': 'outdent',\n 'numberformatlist': 'numberFormatList',\n 'bulletformatlist': 'bulletFormatList',\n 'undo': 'undo',\n 'redo': 'redo',\n 'superscript': 'superscript',\n 'subscript': 'subscript',\n 'createlink': 'createLink',\n 'openlink': 'openLink',\n 'editlink': 'editLink',\n 'removelink': 'removeLink',\n 'openimagelink': 'openLink',\n 'editimagelink': 'editLink',\n 'removeimagelink': 'removeLink',\n 'image': 'image',\n 'audio': 'audio',\n 'video': 'video',\n 'replace': 'replace',\n 'audioreplace': 'audioReplace',\n 'videoreplace': 'videoReplace',\n 'videoalign': 'videoAlign',\n 'videodimension': 'videoDimension',\n 'audioremove': 'audioRemove',\n 'videoremove': 'videoRemove',\n 'audiolayoutoption': 'audioLayoutOption',\n 'videolayoutoption': 'videoLayoutOption',\n 'align': 'align',\n 'caption': 'caption',\n 'remove': 'remove',\n 'insertlink': 'insertLink',\n 'display': 'display',\n 'alttext': 'altText',\n 'dimension': 'dimension',\n 'fullscreen': 'fullscreen',\n 'maximize': 'maximize',\n 'minimize': 'minimize',\n 'lowercase': 'lowerCase',\n 'uppercase': 'upperCase',\n 'print': 'print',\n 'formats': 'formats',\n 'sourcecode': 'sourcecode',\n 'preview': 'preview',\n 'viewside': 'viewside',\n 'insertcode': 'insertCode',\n 'tablerows': 'tableRows',\n 'tablecolumns': 'tableColumns',\n 'tablecellhorizontalalign': 'tableCellHorizontalAlign',\n 'tablecellverticalalign': 'tableCellVerticalAlign',\n 'createtable': 'createTable',\n 'removetable': 'removeTable',\n 'tableheader': 'tableHeader',\n 'tableremove': 'tableRemove',\n 'tablecellbackground': 'tableCellBackground',\n 'tableeditproperties': 'tableEditProperties',\n 'styles': 'styles',\n 'insertcolumnleft': 'insertColumnLeft',\n 'insertcolumnright': 'insertColumnRight',\n 'deletecolumn': 'deleteColumn',\n 'aligntop': 'AlignTop',\n 'alignmiddle': 'AlignMiddle',\n 'alignbottom': 'AlignBottom',\n 'insertrowbefore': 'insertRowBefore',\n 'insertrowafter': 'insertRowAfter',\n 'deleterow': 'deleteRow',\n 'formatpainter': 'formatPainter',\n 'emojipicker': 'emojiPicker',\n 'embeddedCode': 'Embedded Code',\n 'pasteEmbeddedCodeHere': 'Paste Embedded Code here',\n 'emojiPickerTypeToFind': 'Type to find',\n 'emojiPickerNoResultFound': 'No results found',\n 'emojiPickerTrySomethingElse': 'Try something else',\n};\nexport var fontNameLocale = [\n { locale: 'fontNameSegoeUI', value: 'Segoe UI' },\n { locale: 'fontNameArial', value: 'Arial,Helvetica,sans-serif' },\n { locale: 'fontNameGeorgia', value: 'Georgia,serif' },\n { locale: 'fontNameImpact', value: 'Impact,Charcoal,sans-serif' },\n { locale: 'fontNameTahoma', value: 'Tahoma,Geneva,sans-serif' },\n { locale: 'fontNameTimesNewRoman', value: 'Times New Roman,Times,serif' },\n { locale: 'fontNameVerdana', value: 'Verdana,Geneva,sans-serif' }\n];\nexport var formatsLocale = [\n { locale: 'formatsDropDownParagraph', value: 'P' },\n { locale: 'formatsDropDownCode', value: 'Pre' },\n { locale: 'formatsDropDownQuotation', value: 'BlockQuote' },\n { locale: 'formatsDropDownHeading1', value: 'H1' },\n { locale: 'formatsDropDownHeading2', value: 'H2' },\n { locale: 'formatsDropDownHeading3', value: 'H3' },\n { locale: 'formatsDropDownHeading4', value: 'H4' }\n];\nexport var numberFormatListLocale = [\n { locale: 'numberFormatListNone', value: 'none' },\n { locale: 'numberFormatListNumber', value: 'decimal' },\n { locale: 'numberFormatListLowerAlpha', value: 'lower-alpha' },\n { locale: 'numberFormatListUpperAlpha', value: 'upper-alpha' },\n { locale: 'numberFormatListLowerRoman', value: 'lower-roman' },\n { locale: 'numberFormatListUpperRoman', value: 'upper-roman' },\n { locale: 'numberFormatListLowerGreek', value: 'lower-greek' }\n];\nexport var bulletFormatListLocale = [\n { locale: 'bulletFormatListNone', value: 'none' },\n { locale: 'bulletFormatListDisc', value: 'disc' },\n { locale: 'bulletFormatListCircle', value: 'circle' },\n { locale: 'bulletFormatListSquare', value: 'square' },\n];\n","/**\n * @param {string} htmlAttributes - specifies the string value\n * @param {IRichTextEditor} rte - specifies the rte value\n * @param {boolean} isFrame - specifies the boolean value\n * @param {boolean} initial - specifies the boolean value\n * @returns {void}\n * @hidden\n */\nexport function setAttributes(htmlAttributes, rte, isFrame, initial) {\n var target;\n if (isFrame) {\n var iFrame = rte.contentModule.getDocument();\n target = iFrame.querySelector('body');\n }\n else {\n target = rte.element;\n }\n if (Object.keys(htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n target.classList.add(htmlAttributes[\"\" + htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && htmlAttributes[\"\" + htmlAttr] === 'disabled') {\n rte.enabled = false;\n rte.setEnable();\n }\n else if (htmlAttr === 'readonly' && htmlAttributes[\"\" + htmlAttr] === 'readonly') {\n rte.readonly = true;\n rte.setReadOnly(initial);\n }\n else if (htmlAttr === 'style') {\n target.setAttribute('style', htmlAttributes[\"\" + htmlAttr]);\n }\n else if (htmlAttr === 'tabindex') {\n rte.inputElement.setAttribute('tabindex', htmlAttributes[\"\" + htmlAttr]);\n }\n else if (htmlAttr === 'placeholder') {\n rte.placeholder = htmlAttributes[\"\" + htmlAttr];\n rte.setPlaceHolder();\n }\n else {\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n rte.valueContainer.setAttribute(htmlAttr, htmlAttributes[\"\" + htmlAttr]);\n }\n else {\n target.setAttribute(htmlAttr, htmlAttributes[\"\" + htmlAttr]);\n }\n }\n }\n }\n}\n","import { Browser, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\n/**\n * `FullScreen` module is used to maximize and minimize screen\n */\nvar FullScreen = /** @class */ (function () {\n function FullScreen(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * showFullScreen method\n *\n * @param {MouseEvent} event - specifies the mouse event\n * @returns {void}\n * @hidden\n\n */\n FullScreen.prototype.showFullScreen = function (event) {\n var _this = this;\n if (this.parent.toolbarSettings.enable === true && this.parent.editorMode !== 'Markdown'\n && !isNOU(this.parent.quickToolbarModule)) {\n this.parent.quickToolbarModule.hideQuickToolbars();\n }\n if (this.parent.showTooltip && !isNOU(document.querySelector('.e-tooltip-wrap'))) {\n this.parent.notify(events.maximizeMinimizeClick, { args: event });\n }\n this.scrollableParent = getScrollableParent(this.parent.element);\n if (!this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n var evenArgs = {\n cancel: false,\n requestType: 'Maximize',\n targetItem: 'Maximize',\n args: event\n };\n this.parent.trigger(events.actionBegin, evenArgs, function (beginEventArgs) {\n if (!beginEventArgs.cancel) {\n if (_this.parent.toolbarSettings.enableFloating &&\n !_this.parent.inlineMode.enable && _this.parent.toolbarSettings.enable) {\n _this.parent.getToolbarElement().style.width = '100%';\n _this.parent.getToolbarElement().style.top = '0px';\n }\n _this.parent.element.classList.add(classes.CLS_FULL_SCREEN);\n _this.toggleParentOverflow(true);\n var isExpand = _this.parent.element.querySelectorAll('.e-toolbar-extended.e-popup-open').length > 0 ? true : false;\n _this.parent.setContentHeight(null, isExpand);\n if (_this.parent.toolbarModule) {\n if (!_this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {\n _this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);\n }\n if (Browser.isDevice) {\n _this.parent.toolbarModule.removeFixedTBarClass();\n }\n _this.parent.toolbarModule.updateItem({\n targetItem: 'Maximize',\n updateItem: 'Minimize',\n baseToolbar: _this.parent.getBaseToolbarObject()\n });\n }\n _this.parent.refreshUI();\n _this.parent.trigger(events.actionComplete, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n }\n });\n }\n };\n /**\n * hideFullScreen method\n *\n * @param {MouseEvent} event - specifies the mouse event\n * @returns {void}\n * @hidden\n\n */\n FullScreen.prototype.hideFullScreen = function (event) {\n var _this = this;\n if (this.parent.toolbarSettings.enable === true && this.parent.editorMode !== 'Markdown'\n && !isNOU(this.parent.quickToolbarModule)) {\n this.parent.quickToolbarModule.hideQuickToolbars();\n }\n if (this.parent.showTooltip && !isNOU(document.querySelector('.e-tooltip-wrap'))) {\n this.parent.notify(events.maximizeMinimizeClick, { args: event });\n }\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n var evenArgs = {\n cancel: false,\n requestType: 'Minimize',\n targetItem: 'Minimize',\n args: event\n };\n this.parent.trigger(events.actionBegin, evenArgs, function (beginEventArgs) {\n if (!beginEventArgs.cancel) {\n _this.parent.element.classList.remove(classes.CLS_FULL_SCREEN);\n var elem = document.querySelectorAll('.e-rte-overflow');\n for (var i = 0; i < elem.length; i++) {\n removeClass([elem[i]], ['e-rte-overflow']);\n }\n var isExpand = _this.parent.element.querySelectorAll('.e-toolbar-extended.e-popup-open').length > 0 ? true : false;\n _this.parent.setContentHeight(null, isExpand);\n if (_this.parent.toolbarModule) {\n if (!_this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {\n _this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);\n }\n _this.parent.toolbarModule.updateItem({\n targetItem: 'Minimize',\n updateItem: 'Maximize',\n baseToolbar: _this.parent.getBaseToolbarObject()\n });\n if (Browser.isDevice && _this.parent.inlineMode.enable) {\n _this.parent.toolbarModule.addFixedTBarClass();\n }\n }\n _this.parent.trigger(events.actionComplete, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n }\n });\n }\n };\n // eslint-disable-next-line\n FullScreen.prototype.toggleParentOverflow = function (isAdd) {\n if (isNOU(this.scrollableParent)) {\n return;\n }\n for (var i = 0; i < this.scrollableParent.length; i++) {\n if (this.scrollableParent[i].nodeName === '#document') {\n var elem = document.querySelector('body');\n addClass([elem], ['e-rte-overflow']);\n }\n else {\n var elem = this.scrollableParent[i];\n addClass([elem], ['e-rte-overflow']);\n }\n }\n };\n FullScreen.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'full-screen':\n this.showFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n case 'escape':\n this.hideFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n }\n };\n FullScreen.prototype.addEventListener = function () {\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.moduleDestroy, this.moduleDestroy, this);\n };\n FullScreen.prototype.removeEventListener = function () {\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.moduleDestroy, this.moduleDestroy);\n };\n /**\n * destroy method\n *\n * @returns {void}\n * @hidden\n\n */\n FullScreen.prototype.destroy = function () {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.toggleParentOverflow(false);\n }\n var elem = document.querySelectorAll('.e-rte-overflow');\n for (var i = 0; i < elem.length; i++) {\n removeClass([elem[i]], ['e-rte-overflow']);\n }\n this.removeEventListener();\n };\n FullScreen.prototype.moduleDestroy = function () {\n this.parent = null;\n };\n return FullScreen;\n}());\nexport { FullScreen };\n","import { isNullOrUndefined as isNOU, detach, Browser } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * `EnterKey` module is used to handle enter key press actions.\n */\nvar EnterKeyAction = /** @class */ (function () {\n function EnterKeyAction(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n EnterKeyAction.prototype.addEventListener = function () {\n this.parent.on(events.enterHandler, this.enterHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.moduleDestroy, this.moduleDestroy, this);\n };\n EnterKeyAction.prototype.destroy = function () {\n this.removeEventListener();\n };\n EnterKeyAction.prototype.moduleDestroy = function () {\n this.parent = null;\n };\n EnterKeyAction.prototype.removeEventListener = function () {\n this.parent.off(events.enterHandler, this.enterHandler);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.moduleDestroy, this.moduleDestroy);\n };\n EnterKeyAction.prototype.getRangeNode = function () {\n this.range = this.parent.getRange();\n this.startNode = this.range.startContainer.nodeName === '#text' ? this.range.startContainer.parentElement :\n this.range.startContainer;\n this.endNode = this.range.endContainer.nodeName === '#text' ? this.range.endContainer.parentElement :\n this.range.endContainer;\n };\n EnterKeyAction.prototype.enterHandler = function (e) {\n var _this = this;\n this.getRangeNode();\n var isTableEnter = true;\n this.formatTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote'];\n if (!isNOU(this.startNode.closest('TABLE')) && !isNOU(this.endNode.closest('TABLE'))) {\n isTableEnter = false;\n var curElement = this.startNode;\n var blockElement = curElement;\n while (!this.parent.formatter.editorManager.domNode.isBlockNode(curElement)) {\n curElement = curElement.parentElement;\n blockElement = curElement;\n }\n isTableEnter = blockElement.tagName === 'TD' || blockElement.tagName === 'TBODY' ? false : true;\n }\n if (e.args.which === 13 && !e.args.ctrlKey && (!Browser.isDevice ? e.args.code === 'Enter' : e.args.key === 'Enter')) {\n if (isNOU(this.startNode.closest('LI, UL, OL')) && isNOU(this.endNode.closest('LI, UL, OL')) && isTableEnter &&\n isNOU(this.startNode.closest('PRE')) && isNOU(this.endNode.closest('PRE'))) {\n var shiftKey_1 = e.args.shiftKey;\n var actionBeginArgs = {\n cancel: false,\n name: events.actionBegin,\n requestType: shiftKey_1 ? 'ShiftEnterAction' : 'EnterAction',\n originalEvent: e.args\n };\n this.parent.trigger(events.actionBegin, actionBeginArgs, function (actionBeginArgs) {\n if (!actionBeginArgs.cancel) {\n if (!(_this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.range.endContainer)) {\n if (!(_this.range.startContainer.nodeName === 'SPAN' && (_this.range.startContainer.classList.contains('e-video-wrap') ||\n _this.range.startContainer.classList.contains('e-audio-wrap')))) {\n _this.range.deleteContents();\n }\n if (_this.range.startContainer.nodeName === '#text' && _this.range.startContainer.textContent.length === 0 &&\n _this.range.startContainer.parentElement !== _this.parent.inputElement) {\n if (_this.parent.enterKey === 'BR') {\n _this.range.startContainer.parentElement.innerHTML = '​';\n }\n else {\n _this.range.startContainer.parentElement.innerHTML = '
';\n }\n }\n else if (_this.range.startContainer === _this.parent.inputElement && _this.range.startContainer.innerHTML === '') {\n _this.range.startContainer.innerHTML = '
';\n var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, 0);\n }\n else if (_this.parent.inputElement === _this.range.startContainer) {\n var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];\n if (focusElem.nodeName === '#text' && focusElem.textContent.length === 0) {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.textContent.length === 0 ? 0 : focusElem.previousSibling.textContent.length);\n }\n else {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.textContent.length >= 0 ? 0 : 1);\n if (focusElem.previousSibling.textContent.length === 0) {\n detach(focusElem.previousSibling);\n if (!shiftKey_1) {\n var currentFocusElem = !isNOU(focusElem.lastChild) ? focusElem.lastChild : focusElem;\n while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text' && currentFocusElem.nodeName !== 'BR') {\n currentFocusElem = currentFocusElem.lastChild;\n }\n if (currentFocusElem.nodeName !== 'BR' && currentFocusElem.parentElement.textContent.length === 0 && currentFocusElem.parentElement.innerHTML.length === 0 &&\n currentFocusElem.parentElement.nodeName !== 'BR') {\n currentFocusElem.parentElement.appendChild(_this.parent.createElement('BR'));\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem.nodeName === 'BR' ? currentFocusElem : currentFocusElem.parentElement, currentFocusElem.parentElement.textContent.length >= 0 || currentFocusElem.nodeName === 'BR' ? 0 : 1);\n }\n }\n else if (focusElem.textContent.length === 0) {\n var currentFocusElem = focusElem.previousSibling.nodeName === '#text' ? focusElem.previousSibling : focusElem.previousSibling.lastChild;\n while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {\n currentFocusElem = currentFocusElem.lastChild;\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, currentFocusElem.textContent.length);\n detach(focusElem);\n }\n else if (_this.parent.enterKey !== 'BR' &&\n focusElem.previousSibling.textContent.length !== 0 && focusElem.textContent.length !== 0) {\n e.args.preventDefault();\n return;\n }\n }\n _this.getRangeNode();\n }\n }\n if (_this.range.startContainer === _this.range.endContainer &&\n _this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.parent.inputElement) {\n if (!(_this.parent.inputElement.childNodes.length === 1 && _this.parent.inputElement.childNodes[0].nodeName === 'TABLE')) {\n if (isNOU(_this.range.startContainer.childNodes[_this.range.startOffset])) {\n var currentLastElem = _this.range.startContainer.childNodes[_this.range.startOffset - 1];\n while (currentLastElem.lastChild !== null && currentLastElem.nodeName !== '#text') {\n currentLastElem = currentLastElem.lastChild;\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentLastElem, (currentLastElem.nodeName === 'BR' ? 0 : currentLastElem.textContent.length));\n }\n else {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.range.startContainer.childNodes[_this.range.startOffset], 0);\n }\n }\n _this.getRangeNode();\n }\n if ((_this.parent.enterKey === 'P' && !shiftKey_1) || (_this.parent.enterKey === 'DIV' && !shiftKey_1) ||\n (_this.parent.shiftEnterKey === 'P' && shiftKey_1) ||\n (_this.parent.shiftEnterKey === 'DIV' && shiftKey_1)) {\n if (_this.range.startOffset === 1 && _this.parent.inputElement.childNodes.length === 1 && _this.parent.inputElement.childNodes[0].nodeName === 'TABLE') {\n var newElem = _this.createInsertElement(shiftKey_1);\n newElem.appendChild(_this.parent.createElement('BR'));\n _this.parent.inputElement.appendChild(newElem);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, 0);\n }\n else {\n var nearBlockNode = void 0;\n if (isTableEnter && _this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode)) {\n nearBlockNode = _this.startNode;\n }\n else {\n nearBlockNode = _this.parent.formatter.editorManager.domNode.blockParentNode(_this.startNode);\n }\n var isMediaNode = false; // To check the image audio and video node cases\n var isFocusedFirst = false;\n if (_this.range.startOffset !== 0 && _this.range.endOffset !== 0 &&\n _this.range.startContainer === _this.range.endContainer && !(!isNOU(nearBlockNode.childNodes[0])\n && (nearBlockNode.childNodes[0].nodeName === 'IMG' || nearBlockNode.querySelectorAll('img, audio, video').length > 0))) {\n var startNodeText = _this.range.startContainer.textContent;\n var splitFirstText = startNodeText.substring(0, _this.range.startOffset);\n // eslint-disable-next-line max-len\n if (splitFirstText.charCodeAt(_this.range.startOffset - 1) !== 160 && splitFirstText.trim().length === 0) {\n isFocusedFirst = true;\n }\n }\n else if (_this.range.startOffset === 0 && _this.range.endOffset === 0) {\n isFocusedFirst = true;\n }\n _this.removeBRElement(nearBlockNode);\n var fireFoxEnterAtMiddle = Browser.userAgent.indexOf('Firefox') !== -1 && _this.range.startOffset === 0 && _this.range.startContainer === _this.range.endContainer &&\n _this.range.startContainer.nodeName === '#text' && !_this.parent.formatter.editorManager.domNode.isBlockNode(_this.range.startContainer.previousSibling) &&\n _this.range.startContainer.parentElement === _this.range.startContainer.previousSibling.parentElement;\n // eslint-disable-next-line max-len\n if (!fireFoxEnterAtMiddle && ((_this.range.startOffset === 0 && _this.range.endOffset === 0) || isFocusedFirst) &&\n !(!isNOU(_this.range.startContainer.previousSibling) &&\n (_this.range.startContainer.previousSibling.nodeName === 'IMG' || _this.range.startContainer.previousSibling.nodeName === 'BR'))) {\n var isNearBlockLengthZero = void 0;\n var newElem = void 0;\n if (!isNOU(_this.range.startContainer.childNodes) && _this.range.startContainer.textContent.length === 0\n && (_this.range.startContainer.querySelectorAll('img, audio, video').length > 0 ||\n _this.range.startContainer.nodeName === 'IMG' || _this.range.startContainer.nodeName === 'TABLE')) {\n newElem = _this.createInsertElement(shiftKey_1);\n isMediaNode = true;\n isNearBlockLengthZero = false;\n }\n else {\n if ((nearBlockNode.textContent.trim().length !== 0 ||\n nearBlockNode.childNodes[0].nodeName === 'IMG' ||\n (nearBlockNode.textContent.trim() === '' && nearBlockNode.querySelectorAll('img, audio, video').length > 0))) {\n if ((_this.range.startOffset === _this.range.endOffset && _this.range.startOffset !== 0)) {\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);\n }\n else {\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);\n isMediaNode = true;\n }\n isNearBlockLengthZero = false;\n }\n else {\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);\n isNearBlockLengthZero = true;\n }\n }\n var insertElem = void 0;\n if (_this.formatTags.indexOf(newElem.nodeName.toLocaleLowerCase()) < 0) {\n insertElem = _this.createInsertElement(shiftKey_1);\n }\n else {\n insertElem = _this.parent.createElement(newElem.nodeName);\n }\n while (newElem.firstChild) {\n insertElem.appendChild(newElem.firstChild);\n }\n nearBlockNode.parentElement.insertBefore(insertElem, nearBlockNode);\n if (!isNearBlockLengthZero) {\n var currentFocusElem = insertElem;\n var finalFocusElem = void 0;\n if (_this.range.startOffset === _this.range.endOffset && _this.range.startOffset !== 0) {\n while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text' &&\n currentFocusElem.nodeName !== 'BR') {\n finalFocusElem = currentFocusElem;\n currentFocusElem = currentFocusElem.lastChild;\n }\n }\n else {\n finalFocusElem = currentFocusElem;\n }\n finalFocusElem.innerHTML = '
';\n if (!isMediaNode) {\n detach(nearBlockNode);\n }\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem.nextElementSibling, 0);\n }\n else if (nearBlockNode.textContent.length === 0 && !(!isNOU(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG')) {\n if (!isNOU(nearBlockNode.children[0]) && nearBlockNode.children[0].tagName !== 'BR') {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);\n _this.parent.formatter.editorManager.domNode.insertAfter(newElem, nearBlockNode);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, newElem.textContent.length >= 0 ? 0 : 1);\n }\n else {\n var insertElem = _this.createInsertElement(shiftKey_1);\n insertElem.innerHTML = '
';\n _this.parent.formatter.editorManager.domNode.insertAfter(insertElem, nearBlockNode);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem, 0);\n }\n }\n else if (_this.range.startContainer === _this.range.endContainer && _this.range.startContainer.nodeName === 'SPAN' &&\n (_this.range.startContainer.classList.contains('e-video-wrap') ||\n _this.range.startContainer.classList.contains('e-audio-wrap'))) {\n if (nearBlockNode.textContent.trim().length > 0) {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);\n var audioVideoElem = !isNOU(newElem.previousSibling.querySelector('.e-video-wrap')) ?\n newElem.previousSibling.querySelector('.e-video-wrap') : newElem.previousSibling.querySelector('.e-audio-wrap');\n var isBRInserted = false;\n var lastNode = audioVideoElem.previousSibling;\n while (!isNOU(lastNode) && lastNode.nodeName !== '#text') {\n lastNode = lastNode.lastChild;\n }\n if (isNOU(lastNode)) {\n var brElm = _this.parent.createElement('br');\n audioVideoElem.parentElement.appendChild(brElm);\n isBRInserted = true;\n }\n if (isBRInserted) {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), audioVideoElem.parentElement, 0);\n }\n else {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), lastNode, lastNode.textContent.length);\n }\n detach(audioVideoElem);\n }\n else {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);\n var focusElem = newElem.previousSibling;\n while (!isNOU(focusElem.firstChild)) {\n detach(focusElem.firstChild);\n }\n var brElm = _this.parent.createElement('br');\n focusElem.appendChild(brElm);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, 0);\n }\n if (!isNOU(_this.parent.audioModule)) {\n _this.parent.audioModule.hideAudioQuickToolbar();\n }\n if (!isNOU(_this.parent.videoModule)) {\n _this.parent.videoModule.hideVideoQuickToolbar();\n }\n }\n else {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);\n if (!isNOU(newElem.childNodes[0]) && newElem.childNodes[0].nodeName === '#text' &&\n newElem.childNodes[0].textContent.length === 0) {\n detach(newElem.childNodes[0]);\n }\n if (newElem.textContent.trim().length === 0) {\n var brElm = _this.parent.createElement('br');\n if (_this.startNode.nodeName === 'A') {\n var startParentElem = _this.startNode.parentElement;\n _this.startNode.parentElement.insertBefore(brElm, _this.startNode);\n detach(_this.startNode);\n _this.startNode = startParentElem;\n }\n else {\n if (_this.startNode.nodeName !== 'BR') {\n _this.startNode.appendChild(brElm);\n }\n }\n if (newElem.childNodes[0].textContent === '\\n') {\n detach(newElem.childNodes[0]);\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.startNode, 0);\n }\n if (((_this.parent.enterKey === 'P' || _this.parent.enterKey === 'DIV') && !shiftKey_1) || ((_this.parent.shiftEnterKey === 'DIV' ||\n _this.parent.shiftEnterKey === 'P') && shiftKey_1)) {\n var isHeadingTag = _this.formatTags.indexOf(newElem.nodeName.toLocaleLowerCase());\n if ((isHeadingTag < 0) || (isHeadingTag >= 0 && newElem.textContent.trim().length === 0)) {\n var insertElm = _this.createInsertElement(shiftKey_1);\n while (newElem.firstChild) {\n insertElm.appendChild(newElem.firstChild);\n }\n _this.parent.formatter.editorManager.domNode.insertAfter(insertElm, newElem);\n detach(newElem);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode) ?\n insertElm : _this.startNode, 0);\n }\n }\n }\n }\n e.args.preventDefault();\n }\n if ((_this.parent.enterKey === 'BR' && !shiftKey_1) || (_this.parent.shiftEnterKey === 'BR' && shiftKey_1)) {\n var currentParent = void 0;\n if (!_this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode)) {\n var currentNode = _this.startNode;\n var previousNode = currentNode;\n while (!_this.parent.formatter.editorManager.domNode.isBlockNode(currentNode)) {\n previousNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n currentParent = currentNode === _this.parent.inputElement ?\n previousNode : currentNode;\n }\n else {\n currentParent = _this.startNode;\n }\n _this.removeBRElement(currentParent);\n var isEmptyBrInserted = false;\n var currentParentLastChild = currentParent.lastChild;\n while (!isNOU(currentParentLastChild) && !(currentParentLastChild.nodeName === '#text' || currentParentLastChild.nodeName === 'BR'\n || currentParentLastChild.nodeName === 'IMG')) {\n currentParentLastChild = currentParentLastChild.lastChild;\n }\n var isLastNodeLength = _this.range.startContainer === currentParentLastChild ?\n _this.range.startContainer.textContent.length : currentParent.textContent.length;\n var isImageElement = (_this.range.startContainer.nodeName === 'IMG' || (_this.range.startContainer.childNodes.length > 0\n && _this.range.startContainer.childNodes[_this.range.startOffset].nodeName === 'IMG'));\n if (currentParent !== _this.parent.inputElement &&\n _this.parent.formatter.editorManager.domNode.isBlockNode(currentParent) &&\n _this.range.startOffset === _this.range.endOffset &&\n (_this.range.startOffset === isLastNodeLength ||\n (currentParent.textContent.trim().length === 0 && isImageElement))) {\n var focusBRElem = _this.parent.createElement('br');\n if (_this.range.startOffset === 0 && _this.range.startContainer.nodeName === 'TABLE') {\n _this.range.startContainer.parentElement.insertBefore(focusBRElem, _this.range.startContainer);\n }\n else {\n if (currentParentLastChild.nodeName === 'BR' && currentParent.textContent.length === 0) {\n _this.parent.formatter.editorManager.domNode.insertAfter(focusBRElem, currentParentLastChild);\n }\n else if (_this.range.startOffset === 0 && _this.range.endOffset === 0 && isImageElement) {\n var imageElement = _this.range.startContainer.nodeName === 'IMG' ? _this.range.startContainer :\n _this.range.startContainer.childNodes[_this.range.startOffset];\n currentParent.insertBefore(focusBRElem, imageElement);\n focusBRElem = imageElement;\n }\n else {\n var lineBreakBRElem = _this.parent.createElement('br');\n _this.parent.formatter.editorManager.domNode.insertAfter(focusBRElem, _this.range.startContainer);\n _this.parent.formatter.editorManager.domNode.insertAfter(lineBreakBRElem, _this.range.startContainer);\n }\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusBRElem, 0);\n }\n else if (!isNOU(currentParent) && currentParent !== _this.parent.inputElement && currentParent.nodeName !== 'BR') {\n if (currentParent.textContent.trim().length === 0 || (currentParent.textContent.trim().length === 1 &&\n currentParent.textContent.charCodeAt(0) === 8203)) {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, true).cloneNode(true);\n _this.parent.formatter.editorManager.domNode.insertAfter(newElem, currentParent);\n var outerBRElem = _this.parent.createElement('br');\n newElem.parentElement.insertBefore(outerBRElem, newElem);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, 0);\n }\n else {\n var newElem = void 0;\n var outerBRElem = _this.parent.createElement('br');\n if (_this.range.startOffset === 0 && _this.range.endOffset === 0 &&\n !isNOU(currentParent.previousSibling) && currentParent.previousSibling.nodeName === 'BR') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, false).cloneNode(true);\n _this.parent.formatter.editorManager.domNode.insertAfter(outerBRElem, currentParent);\n _this.insertFocusContent();\n var currentFocusElem = outerBRElem.nextSibling;\n while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {\n currentFocusElem = currentFocusElem.lastChild;\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, 0);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isEmptyBrInserted = true;\n }\n else {\n _this.insertBRElement();\n }\n }\n }\n else {\n _this.insertBRElement();\n }\n e.args.preventDefault();\n }\n _this.parent.trigger(events.actionComplete, { requestType: shiftKey_1 ? 'ShiftEnterAction' : 'EnterAction', args: e.args });\n }\n });\n }\n }\n };\n EnterKeyAction.prototype.removeBRElement = function (currentElement) {\n if (Browser.userAgent.indexOf('Firefox') !== -1 &&\n this.range.endOffset === currentElement.textContent.length && (currentElement.textContent.length !== 0 ||\n currentElement.querySelectorAll('BR').length > 1) &&\n !isNOU(currentElement.lastChild) && currentElement.lastChild.nodeName === 'BR') {\n detach(currentElement.lastChild);\n }\n };\n EnterKeyAction.prototype.insertBRElement = function () {\n var isEmptyBrInserted = false;\n var isFocusTextNode = true;\n if (this.range.endContainer.textContent.length === 0 && this.range.startContainer.nodeName === 'BR') {\n isFocusTextNode = false;\n }\n var brElm = this.parent.createElement('br');\n if (this.startNode.nodeName === 'BR' && this.endNode.nodeName === 'BR' && this.range.startOffset === 0 && this.range.startOffset === this.range.endOffset) {\n this.parent.formatter.editorManager.domNode.insertAfter(brElm, this.startNode);\n isEmptyBrInserted = true;\n }\n else {\n if (this.startNode === this.parent.inputElement && !isNOU(this.range.startContainer.previousSibling) &&\n this.range.startContainer.previousSibling.nodeName === 'BR' && this.range.startContainer.textContent.length === 0) {\n isEmptyBrInserted = true;\n }\n this.range.insertNode(brElm);\n }\n if (isEmptyBrInserted || (!isNOU(brElm.nextElementSibling) && brElm.nextElementSibling.tagName === 'BR') || (!isNOU(brElm.nextSibling) && brElm.nextSibling.textContent.length > 0)) {\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), !isNOU(brElm.nextSibling) && isFocusTextNode ? brElm.nextSibling : brElm, 0);\n isEmptyBrInserted = false;\n }\n else {\n var brElm2 = this.parent.createElement('br');\n this.range.insertNode(brElm2);\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), brElm, 0);\n }\n };\n EnterKeyAction.prototype.insertFocusContent = function () {\n if (this.range.startContainer.textContent.length === 0) {\n if (this.range.startContainer.nodeName === '#text') {\n this.range.startContainer.parentElement.innerHTML = '​';\n }\n else {\n this.range.startContainer.innerHTML = '​';\n }\n }\n };\n EnterKeyAction.prototype.createInsertElement = function (shiftKey) {\n var insertElem;\n if ((this.parent.enterKey === 'DIV' && !shiftKey) || (this.parent.shiftEnterKey === 'DIV' && shiftKey)) {\n insertElem = this.parent.createElement('div');\n }\n else if ((this.parent.enterKey === 'P' && !shiftKey) || (this.parent.shiftEnterKey === 'P' && shiftKey)) {\n insertElem = this.parent.createElement('p');\n }\n return insertElem;\n };\n return EnterKeyAction;\n}());\nexport { EnterKeyAction };\n","/**\n * Defines util methods used by Rich Text Editor.\n */\nimport { isNullOrUndefined as isNOU, addClass, removeClass, selectAll, createElement } from '@syncfusion/ej2-base';\nimport { Browser, detach, SanitizeHtmlHelper, extend } from '@syncfusion/ej2-base';\nimport * as classes from '../base/classes';\nimport * as CONSTANT from '../base/constant';\nimport * as model from '../models/items';\nimport { toolsLocale, fontNameLocale, formatsLocale, numberFormatListLocale, bulletFormatListLocale } from '../models/default-locale';\nvar undoRedoItems = ['Undo', 'Redo'];\nvar inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\n/**\n * @param {string} val - specifies the string value\n * @param {string} items - specifies the value\n * @returns {number} - returns the number value\n * @hidden\n */\nexport function getIndex(val, items) {\n var index = -1;\n items.some(function (item, i) {\n if (typeof item === 'string' && val === item.toLocaleLowerCase()) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n}\n/**\n * @param {Element} element - specifies the element\n * @param {string} className - specifies the string value\n * @returns {boolean} - returns the boolean value\n * @hidden\n */\nexport function hasClass(element, className) {\n var hasClass = false;\n if (element.classList.contains(className)) {\n hasClass = true;\n }\n return hasClass;\n}\n/**\n * @param {IDropDownItemModel} items - specifies the item model\n * @param {string} value - specifies the string value\n * @param {string} type - specifies the string value\n * @param {string} returnType - specifies the return type\n * @returns {string} - returns the string value\n * @hidden\n */\nexport function getDropDownValue(items, value, type, returnType) {\n var data;\n var result;\n for (var k = 0; k < items.length; k++) {\n if (type === 'value' && items[k].value.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'text' && items[k].text.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'subCommand' && items[k].subCommand.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n }\n if (!isNOU(data)) {\n switch (returnType) {\n case 'text':\n result = data.text;\n break;\n case 'value':\n result = data.value;\n break;\n case 'iconCss':\n result = data.iconCss;\n break;\n }\n }\n return result;\n}\n/**\n * @returns {boolean} - returns the boolean value\n * @hidden\n */\nexport function isIDevice() {\n var result = false;\n if (Browser.isDevice && Browser.isIos) {\n result = true;\n }\n return result;\n}\n/**\n * @param {string} value - specifies the value\n * @returns {string} - returns the string value\n * @hidden\n */\nexport function getFormattedFontSize(value) {\n if (isNOU(value)) {\n return '';\n }\n return value;\n}\n/**\n * @param {MouseEvent} e - specifies the mouse event\n * @param {HTMLElement} parentElement - specifies the parent element\n * @param {boolean} isIFrame - specifies the boolean value\n * @returns {number} - returns the number\n * @hidden\n */\nexport function pageYOffset(e, parentElement, isIFrame) {\n var y = 0;\n if (isIFrame) {\n y = window.pageYOffset + parentElement.getBoundingClientRect().top + e.clientY;\n }\n else {\n y = e.pageY;\n }\n return y;\n}\n/**\n * @param {string} item - specifies the string\n * @param {ServiceLocator} serviceLocator - specifies the service locator\n * @returns {string} - returns the string\n * @hidden\n */\nexport function getTooltipText(item, serviceLocator) {\n var i10n = serviceLocator.getService('rteLocale');\n var itemLocale = toolsLocale[\"\" + item];\n var tooltipText = i10n.getConstant(itemLocale);\n return tooltipText;\n}\n/**\n * @param {ISetToolbarStatusArgs} e - specifies the e element\n * @param {boolean} isPopToolbar - specifies the boolean value\n * @param {IRichTextEditor} self - specifies the parent element\n * @returns {void}\n * @hidden\n */\nexport function setToolbarStatus(e, isPopToolbar, self) {\n updateDropDownFontFormatLocale(self);\n var dropDown = e.dropDownModule;\n var data = e.args;\n var keys = Object.keys(e.args);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n for (var j = 0; j < e.tbItems.length; j++) {\n var item = e.tbItems[j].subCommand;\n var itemStr = item && item.toLocaleLowerCase();\n if (item && (itemStr === key) || (item === 'UL' && key === 'unorderedlist') || (item === 'OL' && key === 'orderedlist') ||\n (itemStr === 'pre' && key === 'insertcode') || (item === 'NumberFormatList' && key === 'numberFormatList' ||\n item === 'BulletFormatList' && key === 'bulletFormatList')) {\n if (typeof data[\"\" + key] === 'boolean') {\n if (data[\"\" + key] === true) {\n addClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n else {\n removeClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n }\n else if ((typeof data[\"\" + key] === 'string' || data[\"\" + key] === null) &&\n getIndex(key, e.parent.toolbarSettings.items) > -1) {\n var value = ((data[\"\" + key]) ? data[\"\" + key] : '');\n var result = '';\n switch (key) {\n case 'formats': {\n if (isNOU(dropDown.formatDropDown) || isPopToolbar ||\n (!isNOU(dropDown.formatDropDown) && dropDown.formatDropDown.isDestroyed)) {\n break;\n }\n var formatItems = e.parent.format.types;\n var formatContent = isNOU(e.parent.format.default) ? formatItems[0].text :\n e.parent.format.default;\n result = getDropDownValue(formatItems, value, 'subCommand', 'text');\n dropDown.formatDropDown.content = ('' +\n ''\n + (isNOU(result) ? formatContent : result) +\n '');\n dropDown.formatDropDown.dataBind();\n break;\n }\n case 'alignments': {\n if (isNOU(dropDown.alignDropDown) ||\n (!isNOU(dropDown.alignDropDown) && dropDown.alignDropDown.isDestroyed)) {\n break;\n }\n var alignItems = model.alignmentItems;\n result = getDropDownValue(alignItems, value, 'subCommand', 'iconCss');\n dropDown.alignDropDown.iconCss = isNOU(result) ? 'e-icons e-justify-left' : result;\n dropDown.alignDropDown.dataBind();\n break;\n }\n case 'fontname': {\n if (isNOU(dropDown.fontNameDropDown) || isPopToolbar ||\n (!isNOU(dropDown.fontNameDropDown) && dropDown.fontNameDropDown.isDestroyed)) {\n break;\n }\n var fontNameItems = e.parent.fontFamily.items;\n result = getDropDownValue(fontNameItems, value, 'value', 'text');\n var fontNameContent = isNOU(e.parent.fontFamily.default) ? fontNameItems[0].text :\n e.parent.fontFamily.default;\n var name_1 = (isNOU(result) ? fontNameContent : result);\n dropDown.fontNameDropDown.content = ('' +\n ''\n + name_1 + '');\n dropDown.fontNameDropDown.dataBind();\n break;\n }\n case 'fontsize': {\n if (isNOU(dropDown.fontSizeDropDown) ||\n (!isNOU(dropDown.fontSizeDropDown) && dropDown.fontSizeDropDown.isDestroyed)) {\n break;\n }\n var fontSizeItems = e.parent.fontSize.items;\n var fontSizeContent = isNOU(e.parent.fontSize.default) ? fontSizeItems[1].text :\n e.parent.fontSize.default;\n result = getDropDownValue(fontSizeItems, (value === '' ? fontSizeContent.replace(/\\s/g, '') : value), 'value', 'text');\n dropDown.fontSizeDropDown.content = ('' +\n ''\n + getFormattedFontSize(result) + '');\n dropDown.fontSizeDropDown.dataBind();\n break;\n }\n }\n }\n }\n }\n }\n}\n/**\n * @param {string} items - specifies the string value\n * @returns {string[]} - returns the array value\n * @hidden\n */\nexport function getCollection(items) {\n if (typeof items === 'object') {\n return items;\n }\n else {\n return [items];\n }\n}\n/**\n * @param {string[]} items - specifies the array of string value\n * @param {IToolbarItemModel} toolbarItems - specifies the tool bar model\n * @returns {number} - returns the number\n * @hidden\n */\nexport function getTBarItemsIndex(items, toolbarItems) {\n var itemsIndex = [];\n for (var i = 0; i < items.length; i++) {\n for (var j = 0; j < toolbarItems.length; j++) {\n if (toolbarItems[j].type === 'Separator') {\n continue;\n }\n else {\n if (items[i] === 'OrderedList' && toolbarItems[j].subCommand === 'OL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'UnorderedList' && toolbarItems[j].subCommand === 'UL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'InsertCode' && toolbarItems[j].subCommand === 'Pre') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'FileManager' && toolbarItems[j].subCommand === 'File') {\n itemsIndex.push(j);\n break;\n }\n else if (typeof (items[i]) === 'object' && items[i].command === 'Custom') {\n itemsIndex.push(i);\n break;\n }\n else if (items[i] === toolbarItems[j].subCommand) {\n itemsIndex.push(j);\n break;\n }\n }\n }\n }\n return itemsIndex;\n}\n/**\n * @param {BaseToolbar} baseToolbar - specifies the base\n * @param {boolean} undoRedoStatus - specifies the boolean value\n * @returns {void}\n * @hidden\n */\nexport function updateUndoRedoStatus(baseToolbar, undoRedoStatus) {\n var i = 0;\n var trgItems = getTBarItemsIndex(getCollection(undoRedoItems), baseToolbar.toolbarObj.items);\n var tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n var keys = Object.keys(undoRedoStatus);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var target = tbItems[trgItems[i]];\n if (target) {\n baseToolbar.toolbarObj.enableItems(target, undoRedoStatus[\"\" + key]);\n }\n i++;\n }\n}\n/**\n * To dispatch the event manually\n *\n * @param {Element} element - specifies the element.\n * @param {string} type - specifies the string type.\n * @returns {void}\n * @hidden\n\n */\nexport function dispatchEvent(element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n}\n/**\n * To parse the HTML\n *\n * @param {string} value - specifies the string value\n * @returns {DocumentFragment} - returns the document\n * @hidden\n */\nexport function parseHtml(value) {\n var tempNode = createElement('template');\n tempNode.innerHTML = value;\n if (tempNode.content instanceof DocumentFragment) {\n return tempNode.content;\n }\n else {\n return document.createRange().createContextualFragment(value);\n }\n}\n/**\n * @param {Document} docElement - specifies the document element\n * @param {Element} node - specifies the node\n * @returns {Node[]} - returns the node array\n * @hidden\n */\nexport function getTextNodesUnder(docElement, node) {\n var nodes = [];\n for (node = node.firstChild; node; node = node.nextSibling) {\n if (node.nodeType === 3) {\n nodes.push(node);\n }\n else {\n nodes = nodes.concat(getTextNodesUnder(docElement, node));\n }\n }\n return nodes;\n}\n/**\n * @param {IToolsItemConfigs} obj - specifies the configuration\n * @returns {void}\n * @hidden\n */\nexport function toObjectLowerCase(obj) {\n var convertedValue = {};\n var keys = Object.keys(obj);\n for (var i = 0; i < Object.keys(obj).length; i++) {\n convertedValue[keys[i].toLocaleLowerCase()] = obj[keys[i]];\n }\n return convertedValue;\n}\n/**\n * @param {string} value - specifies the string value\n * @param {IRichTextEditor} rteObj - specifies the rte object\n * @returns {string} - returns the string\n * @hidden\n */\nexport function getEditValue(value, rteObj) {\n var val;\n if (value !== null && value !== '') {\n val = rteObj.enableHtmlEncode ? updateTextNode(decode(value), rteObj) : updateTextNode(value, rteObj);\n rteObj.setProperties({ value: val }, true);\n }\n else {\n if (rteObj.enterKey === 'DIV') {\n val = rteObj.enableHtmlEncode ? '<div><br/></div>' : '

';\n }\n else if (rteObj.enterKey === 'BR') {\n val = rteObj.enableHtmlEncode ? '<br/>' : '
';\n }\n else {\n val = rteObj.enableHtmlEncode ? '<p><br/></p>' : '


';\n }\n }\n return val;\n}\n/**\n * @param {string} value - specifies the value\n * @param {IRichTextEditor} rteObj - specifies the rich text editor instance.\n * @returns {string} - returns the string\n * @hidden\n */\nexport function updateTextNode(value, rteObj) {\n var tempNode = document.createElement('div');\n var resultElm = document.createElement('div');\n var childNodes = tempNode.childNodes;\n tempNode.innerHTML = value;\n tempNode.setAttribute('class', 'tempDiv');\n if (childNodes.length > 0) {\n var isPreviousInlineElem = void 0;\n var previousParent = void 0;\n var insertElem = void 0;\n while (tempNode.firstChild) {\n var emptyBlockElem = tempNode.querySelectorAll(CONSTANT.blockEmptyNodes);\n for (var i = 0; i < emptyBlockElem.length; i++) {\n emptyBlockElem[i].innerHTML = '
';\n }\n var emptyInlineElem = tempNode.querySelectorAll(CONSTANT.inlineEmptyNodes);\n for (var i = 0; i < emptyInlineElem.length; i++) {\n emptyInlineElem[i].innerHTML = '​';\n }\n if (rteObj.enterKey !== 'BR' && ((tempNode.firstChild.nodeName === '#text' &&\n (tempNode.firstChild.textContent.indexOf('\\n') < 0 || tempNode.firstChild.textContent.trim() !== '')) ||\n inlineNode.indexOf(tempNode.firstChild.nodeName.toLocaleLowerCase()) >= 0)) {\n if (!isPreviousInlineElem) {\n if (rteObj.enterKey === 'DIV') {\n insertElem = createElement('div');\n }\n else {\n insertElem = createElement('p');\n }\n resultElm.appendChild(insertElem);\n insertElem.appendChild(tempNode.firstChild);\n }\n else {\n previousParent.appendChild(tempNode.firstChild);\n }\n previousParent = insertElem;\n isPreviousInlineElem = true;\n }\n else if (tempNode.firstChild.nodeName === '#text' && (tempNode.firstChild.textContent === '\\n' ||\n (tempNode.firstChild.textContent.indexOf('\\n') >= 0 && tempNode.firstChild.textContent.trim() === ''))) {\n detach(tempNode.firstChild);\n }\n else {\n resultElm.appendChild(tempNode.firstChild);\n isPreviousInlineElem = false;\n }\n }\n var imageElm = resultElm.querySelectorAll('img');\n for (var i = 0; i < imageElm.length; i++) {\n if (!imageElm[i].classList.contains(classes.CLS_RTE_IMAGE)) {\n imageElm[i].classList.add(classes.CLS_RTE_IMAGE);\n }\n if (!(imageElm[i].classList.contains(classes.CLS_IMGINLINE) ||\n imageElm[i].classList.contains(classes.CLS_IMGBREAK))) {\n imageElm[i].classList.add(classes.CLS_IMGINLINE);\n }\n }\n }\n return resultElm.innerHTML;\n}\n/**\n * @param {IRichTextEditor} rteObj - specifies the rte object\n * @returns {string} - returns the value based on enter configuration.\n * @hidden\n */\nexport function getDefaultValue(rteObj) {\n var currentVal;\n if (rteObj.enterKey === 'DIV') {\n currentVal = rteObj.enableHtmlEncode ? '<div><br/></div>' : '

';\n }\n else if (rteObj.enterKey === 'BR') {\n currentVal = rteObj.enableHtmlEncode ? '<br/>' : '
';\n }\n else {\n currentVal = rteObj.enableHtmlEncode ? '<p><br/></p>' : '


';\n }\n return currentVal;\n}\n/**\n * @param {string} value - specifies the value\n * @returns {boolean} - returns the boolean value\n * @hidden\n */\nexport function isEditableValueEmpty(value) {\n return (value === '


' || value === '<p><br></p>'\n || value === '

' || value === '<div><br></div>'\n || value === '
' || value === '<br>'\n || value === '') ? true : false;\n}\n/**\n * @param {string} value - specifies the string value\n * @returns {string} - returns the string\n * @hidden\n */\nexport function decode(value) {\n return value.replace(/&/g, '&').replace(/&lt;/g, '<')\n .replace(/</g, '<').replace(/&gt;/g, '>')\n .replace(/>/g, '>').replace(/ /g, ' ')\n .replace(/&nbsp;/g, ' ').replace(/"/g, '');\n}\n/**\n * @param {string} value - specifies the string value\n * @param {IRichTextEditor} parent - specifies the rte\n * @returns {string} - returns the string value\n * @hidden\n */\nexport function sanitizeHelper(value, parent) {\n if (parent.enableHtmlSanitizer) {\n var item = SanitizeHtmlHelper.beforeSanitize();\n if (item.selectors.tags[2] && item.selectors.tags[2].indexOf('iframe') > -1) {\n item.selectors.tags[2] = 'iframe:not(.e-rte-embed-url)';\n }\n var beforeEvent = {\n cancel: false,\n helper: null\n };\n extend(item, item, beforeEvent);\n parent.trigger('beforeSanitizeHtml', item);\n if (item.cancel && !isNOU(item.helper)) {\n value = item.helper(value);\n }\n else if (!item.cancel) {\n value = SanitizeHtmlHelper.serializeValue(item, value);\n }\n }\n return value;\n}\n/**\n * @param {string} dataUrl - specifies the string value\n * @returns {BaseToolbar} - returns the value\n * @hidden\n */\n//Converting the base64 url to blob\nexport function convertToBlob(dataUrl) {\n var arr = dataUrl.split(',');\n var mime = arr[0].match(/:(.*?);/)[1];\n var bstr = atob(arr[1]);\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n}\n/**\n * @param {IRichTextEditor} self - specifies the rte\n * @param {string} localeItems - specifies the locale items\n * @param {IDropDownItemModel} item - specifies the dropdown item\n * @returns {string} - returns the value\n * @hidden\n */\nexport function getLocaleFontFormat(self, localeItems, item) {\n for (var i = 0; localeItems.length > i; i++) {\n if (localeItems[i].value === item.value || localeItems[i].value === item.subCommand) {\n return self.localeObj.getConstant(localeItems[i].locale);\n }\n }\n return item.text;\n}\n/**\n * @param {IRichTextEditor} self - specifies the rte\n * @returns {void}\n * @hidden\n */\nexport function updateDropDownFontFormatLocale(self) {\n model.fontFamily.forEach(function (item, i) {\n model.fontFamily[i].text = getLocaleFontFormat(self, fontNameLocale, model.fontFamily[i]);\n });\n model.formatItems.forEach(function (item, i) {\n model.formatItems[i].text = getLocaleFontFormat(self, formatsLocale, model.formatItems[i]);\n });\n model.numberFormatList.forEach(function (item, i) {\n model.numberFormatList[i].text = getLocaleFontFormat(self, numberFormatListLocale, model.numberFormatList[i]);\n });\n model.bulletFormatList.forEach(function (item, i) {\n model.bulletFormatList[i].text = getLocaleFontFormat(self, bulletFormatListLocale, model.bulletFormatList[i]);\n });\n}\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { closest, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * Dialog Renderer\n */\nvar DialogRenderer = /** @class */ (function () {\n function DialogRenderer(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n DialogRenderer.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.moduleDestroy, this.moduleDestroy, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n DialogRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.destroy, this.removeEventListener);\n this.parent.off(events.moduleDestroy, this.moduleDestroy);\n };\n /**\n * dialog render method\n *\n * @param {DialogModel} e - specifies the dialog model.\n * @returns {void}\n * @hidden\n\n */\n DialogRenderer.prototype.render = function (e) {\n var dlgObj;\n e.beforeOpen = this.beforeOpen.bind(this);\n e.open = this.open.bind(this);\n if (isNOU(e.close)) {\n e.close = this.close.bind(this);\n }\n e.beforeClose = this.beforeClose.bind(this);\n // eslint-disable-next-line\n dlgObj = new Dialog(e);\n dlgObj.isStringTemplate = true;\n return dlgObj;\n };\n DialogRenderer.prototype.beforeOpen = function (args) {\n if (args.element.classList.contains('e-dialog')) {\n var formEle = closest(args.target, 'form');\n if (!isNOU(formEle)) {\n this.dialogEle = args.element;\n this.dialogEle.addEventListener('keydown', this.handleEnterKeyDown);\n }\n }\n this.parent.trigger(events.beforeDialogOpen, args, this.beforeOpenCallback.bind(this, args));\n };\n DialogRenderer.prototype.handleEnterKeyDown = function (args) {\n if (args.code === \"Enter\") {\n args.preventDefault();\n }\n };\n DialogRenderer.prototype.beforeOpenCallback = function (args) {\n if (args.cancel) {\n this.parent.notify(events.clearDialogObj, null);\n }\n };\n DialogRenderer.prototype.open = function (args) {\n this.parent.trigger(events.dialogOpen, args);\n };\n DialogRenderer.prototype.beforeClose = function (args) {\n if (this.dialogEle) {\n this.dialogEle.removeEventListener('keydown', this.handleEnterKeyDown);\n }\n this.parent.trigger(events.beforeDialogClose, args, function (closeArgs) {\n if (!closeArgs.cancel) {\n if (closeArgs.container.classList.contains('e-popup-close')) {\n closeArgs.cancel = true;\n }\n }\n });\n };\n /**\n * dialog close method\n *\n * @param {Object} args - specifies the arguments.\n * @returns {void}\n * @hidden\n\n */\n DialogRenderer.prototype.close = function (args) {\n this.parent.trigger(events.dialogClose, args);\n };\n DialogRenderer.prototype.moduleDestroy = function () {\n this.parent = null;\n };\n return DialogRenderer;\n}());\nexport { DialogRenderer };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Complex, Browser, addClass, select, detach } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, formatUnit, L10n, closest } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, Event, removeClass, print as printWindow, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, compile, append, extend, debounce } from '@syncfusion/ej2-base';\nimport { Touch as EJ2Touch } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Render } from '../renderer/render';\nimport { ViewSource } from '../renderer/view-source';\nimport { executeGroup } from './interface';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { RenderType, ToolbarType, DialogType } from './enum';\nimport { ExecCommandCallBack } from '../actions/execute-command-callback';\nimport { KeyboardEvents } from '../actions/keyboard';\nimport { ToolbarSettings, ImageSettings, AudioSettings, VideoSettings, QuickToolbarSettings, FontFamily, FontSize, Format, NumberFormatList, BulletFormatList, FormatPainterSettings, EmojiSettings } from '../models/toolbar-settings';\nimport { FileManagerSettings } from '../models/toolbar-settings';\nimport { TableSettings, PasteCleanupSettings } from '../models/toolbar-settings';\nimport { FontColor, BackgroundColor } from '../models/toolbar-settings';\nimport { IFrameSettings } from '../models/iframe-settings';\nimport { InlineMode } from '../models/inline-mode';\nimport { defaultLocale } from '../models/default-locale';\nimport { setAttributes } from '../actions/html-attributes';\nimport { FullScreen } from '../actions/full-screen';\nimport { EnterKeyAction } from '../actions/enter-key';\nimport * as CONSTANT from '../../common/constant';\nimport { dispatchEvent, getEditValue, isIDevice, decode, isEditableValueEmpty, getDefaultValue } from '../base/util';\nimport { DialogRenderer } from '../renderer/dialog-renderer';\n/**\n * Represents the Rich Text Editor component.\n * ```html\n * \n * \n * ```\n */\nvar RichTextEditor = /** @class */ (function (_super) {\n __extends(RichTextEditor, _super);\n function RichTextEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.needsID = true;\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - specifies the declaration.\n * @hidden\n\n */\n RichTextEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.toolbarSettings.enable) {\n modules.push({ member: 'toolbar', args: [this, this.serviceLocator] });\n modules.push({\n member: 'link',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'table',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'image',\n args: [this, this.serviceLocator]\n });\n if (this.quickToolbarSettings.enable) {\n modules.push({ member: 'quickToolbar', args: [this, this.serviceLocator] });\n }\n }\n if (this.showCharCount) {\n modules.push({ member: 'count', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'Markdown') {\n modules.push({ member: 'markdownEditor', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'HTML') {\n modules.push({ member: 'htmlEditor', args: [this, this.serviceLocator] });\n modules.push({ member: 'pasteCleanup', args: [this, this.serviceLocator] });\n modules.push({\n member: 'audio',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'video',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'formatPainter',\n args: [this]\n });\n modules.push({\n member: 'emojiPicker',\n args: [this, this.serviceLocator]\n });\n }\n if (this.fileManagerSettings.enable) {\n modules.push({ member: 'fileManager', args: [this, this.serviceLocator] });\n }\n if (this.enableResize) {\n modules.push({ member: 'resize', args: [this] });\n }\n return modules;\n };\n RichTextEditor.prototype.updateEnable = function () {\n if (this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n this.element.setAttribute('aria-disabled', 'false');\n if (!isNOU(this.htmlAttributes.tabindex)) {\n this.inputElement.setAttribute('tabindex', this.htmlAttributes.tabindex);\n }\n else {\n this.inputElement.setAttribute('tabindex', '0');\n }\n }\n else {\n if (this.getToolbar()) {\n removeClass(this.getToolbar().querySelectorAll('.' + classes.CLS_ACTIVE), classes.CLS_ACTIVE);\n removeClass([this.getToolbar()], [classes.CLS_TB_FLOAT, classes.CLS_TB_ABS_FLOAT]);\n }\n addClass([this.element], classes.CLS_DISABLED);\n this.element.tabIndex = -1;\n this.element.setAttribute('aria-disabled', 'true');\n this.inputElement.setAttribute('tabindex', '-1');\n }\n };\n /**\n * setEnable method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.setEnable = function () {\n this.updateEnable();\n // eslint-disable-next-line\n (this.enabled) ? this.eventInitializer() : this.unWireEvents();\n };\n RichTextEditor.prototype.initializeValue = function () {\n this.isFocusOut = false;\n this.isRTE = false;\n this.isBlur = true;\n this.defaultResetValue = null;\n this.isResizeInitialized = false;\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @returns {void}\n * @hidden\n * @private\n */\n RichTextEditor.prototype.preRender = function () {\n this.initializeValue();\n this.onBlurHandler = this.blurHandler.bind(this);\n this.onFocusHandler = this.focusHandler.bind(this);\n this.onResizeHandler = this.resizeHandler.bind(this);\n this.clickPoints = { clientX: 0, clientY: 0 };\n this.initialValue = this.value;\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.setContainer();\n this.persistData();\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n attributes(this.element, { role: 'application', 'aria-label': 'Rich Text Editor' });\n };\n RichTextEditor.prototype.persistData = function () {\n if (this.enablePersistence && this.originalElement.tagName === 'TEXTAREA') {\n this.element.id = this.originalElement.id + '_wrapper';\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNOU(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n }\n };\n RichTextEditor.prototype.setContainer = function () {\n this.originalElement = this.element.cloneNode(true);\n if (this.value === null || this.valueTemplate !== null) {\n this.setValue();\n }\n if (this.element.hasAttribute('tabindex')) {\n this.htmlAttributes = { 'tabindex': this.element.getAttribute('tabindex') };\n this.element.removeAttribute('tabindex');\n }\n this.element.innerHTML = '';\n var invalidAttr = ['class', 'style', 'id', 'ejs-for'];\n var htmlAttr = {};\n for (var a = 0; a < this.element.attributes.length; a++) {\n if (invalidAttr.indexOf(this.element.attributes[a].name) === -1 &&\n !(/^data-val/.test(this.element.attributes[a].name))) { // data-val for asp.net core data annotation validation.\n htmlAttr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n extend(htmlAttr, this.htmlAttributes, htmlAttr);\n this.setProperties({ htmlAttributes: htmlAttr }, true);\n if (!isNOU(this.htmlAttributes.id)) {\n this.element.id = this.htmlAttributes.id;\n }\n if (this.element.tagName === 'TEXTAREA') {\n var rteOuterWrapper = this.createElement('div', {\n className: this.element.getAttribute('class')\n });\n this.element.innerHTML = '';\n this.element.parentElement.insertBefore(rteOuterWrapper, this.element);\n this.valueContainer = this.element;\n removeClass([this.valueContainer], this.element.getAttribute('class').split(' '));\n this.element = rteOuterWrapper;\n }\n else {\n this.valueContainer = this.createElement('textarea', {\n id: this.getID() + '-value',\n attrs: { 'aria-labelledby': this.getID() }\n });\n }\n this.valueContainer.name = this.getID();\n addClass([this.valueContainer], classes.CLS_RTE_HIDDEN);\n if (!isNOU(this.cssClass)) {\n var currentClassList = this.cssClass.split(' ');\n for (var i = 0; i < currentClassList.length; i++) {\n addClass([this.valueContainer], currentClassList[i]);\n }\n }\n this.element.appendChild(this.valueContainer);\n };\n /**\n * getPersistData method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n /**\n * Focuses the Rich Text Editor component\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.focusIn = function () {\n if (this.enabled) {\n this.inputElement.focus();\n this.focusHandler({});\n }\n };\n /**\n * Blurs the Rich Text Editor component\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.focusOut = function () {\n if (this.enabled) {\n this.inputElement.blur();\n this.blurHandler({});\n }\n };\n /**\n * Selects all the content in RichTextEditor\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.selectAll = function () {\n this.notify(events.selectAll, {});\n };\n /**\n * Selects a content range or an element\n *\n * @param {Range} range - Specify the range which you want to select within the content.\n * The method used to select a particular sentence or word or entire document.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.selectRange = function (range) {\n this.notify(events.selectRange, { range: range });\n };\n /**\n * Retrieves the HTML markup content from currently selected content of RichTextEditor.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getSelection = function () {\n var str = '';\n this.notify(events.getSelectedHtml, {\n callBack: function (txt) {\n str = txt;\n }\n });\n return str;\n };\n /**\n * Shows the emoji picker\n *\n * @param {number} x - specifies the number value.\n * @param {number} y - specifies the number value.\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.showEmojiPicker = function (x, y) {\n if (this.readonly) {\n return;\n }\n this.notify(events.emojiPicker, { x: x, y: y });\n };\n /**\n * Executes the commands\n *\n * @returns {void}\n * @param {CommandName} commandName - Specifies the name of the command to be executed.\n * @param {string | HTMLElement | ILinkCommandsArgs | IImageCommandsArgs} value - Specifies the value that you want to execute.\n * @param {ExecuteCommandOption} option - specifies the command option\n * @public\n */\n RichTextEditor.prototype.executeCommand = function (commandName, value, option) {\n value = this.htmlPurifier(commandName, value);\n var internalValue;\n if (this.editorMode === 'HTML') {\n var range = this.getRange();\n if (this.iframeSettings.enable) {\n this.formatter.editorManager.nodeSelection.Clear(this.element.ownerDocument);\n }\n var toFocus = (this.iframeSettings.enable &&\n range.startContainer === this.inputElement) ? true : !this.inputElement.contains(range.startContainer);\n if (toFocus) {\n this.focusIn();\n }\n }\n var tool = executeGroup[\"\" + commandName];\n if (option && option.undo) {\n if (option.undo && this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n }\n if (this.maxLength !== -1 && !isNOU(tool.command)) {\n var currentInsertContentLength = 0;\n if (tool.command === 'Links') {\n currentInsertContentLength = value.text.length === 0 ?\n value.url.length : value.text.length;\n }\n if (tool.command === 'Images' || tool.command === 'Table' || tool.command === 'Files') {\n currentInsertContentLength = 1;\n }\n if (tool.command === 'InsertHTML') {\n if (!isNOU(value)) {\n var tempElem = this.createElement('div');\n tempElem.innerHTML = value;\n currentInsertContentLength = tempElem.textContent.length;\n }\n else if (!isNOU(tool.value) && (tool.value === '
' || tool.value === '
')) {\n currentInsertContentLength = 1;\n }\n }\n if (tool.command === 'InsertText') {\n currentInsertContentLength = value.length;\n }\n var currentLength = this.getText().trim().length;\n var selectionLength = this.getSelection().length;\n var totalLength = (currentLength - selectionLength) + currentInsertContentLength;\n if (!(this.maxLength === -1 || totalLength <= this.maxLength)) {\n return;\n }\n }\n internalValue = value;\n if (tool.command === 'FormatPainter') {\n if (!isNOU(value)) {\n this.formatPainterSettings = value;\n }\n internalValue = {\n formatPainterAction: tool.value\n };\n }\n this.formatter.editorManager.execCommand(tool.command, tool.subCommand ? tool.subCommand : (internalValue ? internalValue : tool.value), null, null, (internalValue ? internalValue : tool.value), (internalValue ? internalValue : tool.value));\n if (option && option.undo) {\n this.formatter.saveData();\n this.formatter.enableUndo(this);\n }\n this.setPlaceHolder();\n this.notify(events.contentChanged, {});\n };\n RichTextEditor.prototype.htmlPurifier = function (command, value) {\n if (this.editorMode === 'HTML') {\n switch (command) {\n case 'insertHTML':\n if (this.enableHtmlSanitizer) {\n if (typeof value === 'string') {\n value = this.htmlEditorModule.sanitizeHelper(value);\n }\n else {\n value = this.htmlEditorModule.sanitizeHelper(value.outerHTML);\n }\n }\n break;\n case 'insertTable':\n if (isNOU(value.width)) {\n value.width = { minWidth: this.tableSettings.minWidth,\n maxWidth: this.tableSettings.maxWidth, width: this.tableSettings.width };\n }\n break;\n case 'insertImage': {\n var temp = this.createElement('img', {\n attrs: {\n src: value.url\n }\n });\n var imageValue = temp.outerHTML;\n if (this.enableHtmlSanitizer) {\n imageValue = this.htmlEditorModule.sanitizeHelper(temp.outerHTML);\n }\n var url = (imageValue !== '' && (this.createElement('div', {\n innerHTML: imageValue\n }).firstElementChild).getAttribute('src')) || null;\n url = !isNOU(url) ? url : '';\n value.url = url;\n if (isNOU(value.width)) {\n value.width = { minWidth: this.insertImageSettings.minWidth,\n maxWidth: this.insertImageSettings.maxWidth, width: this.insertImageSettings.width };\n }\n if (isNOU(value.height)) {\n value.height = { minHeight: this.insertImageSettings.minHeight,\n maxHeight: this.insertImageSettings.maxHeight, height: this.insertImageSettings.height };\n }\n break;\n }\n case 'insertAudio': {\n var wrapTemp = this.createElement('audio', {\n attrs: {\n controls: ''\n }\n });\n var temp = this.createElement('source', {\n attrs: {\n src: value.url,\n type: value.url && value.url.split('.').length > 0\n ? 'audio/' + value.url.split('.')[value.url.split('.').length - 1] : ''\n }\n });\n wrapTemp.appendChild(temp);\n var audioValue = wrapTemp.outerHTML;\n if (this.enableHtmlSanitizer) {\n audioValue = this.htmlEditorModule.sanitizeHelper(wrapTemp.outerHTML);\n }\n var url = (audioValue !== '' && (this.createElement('div', {\n innerHTML: audioValue\n }).firstElementChild.firstElementChild).getAttribute('src')) || null;\n url = !isNOU(url) ? url : '';\n value.url = url;\n break;\n }\n case 'insertVideo': {\n var wrapTemp = this.createElement('video', {\n attrs: {\n controls: ''\n }\n });\n var temp = this.createElement('source', {\n attrs: {\n src: value.url,\n type: value.url && value.url.split('.').length > 0\n ? 'video/' + value.url.split('.')[value.url.split('.').length - 1] : ''\n }\n });\n wrapTemp.appendChild(temp);\n var audioValue = wrapTemp.outerHTML;\n if (this.enableHtmlSanitizer) {\n audioValue = this.htmlEditorModule.sanitizeHelper(temp.outerHTML);\n }\n var url = (audioValue !== '' && (this.createElement('div', {\n innerHTML: audioValue\n }).firstElementChild).getAttribute('src')) || null;\n url = !isNOU(url) ? url : '';\n value.url = url;\n if (isNOU(value.width)) {\n value.width = { minWidth: this.insertVideoSettings.minWidth,\n maxWidth: this.insertVideoSettings.maxWidth, width: this.insertVideoSettings.width };\n }\n if (isNOU(value.height)) {\n value.height = { minHeight: this.insertVideoSettings.minHeight,\n maxHeight: this.insertVideoSettings.maxHeight, height: this.insertVideoSettings.height };\n }\n break;\n }\n case 'createLink': {\n var tempNode = this.createElement('a', {\n attrs: {\n href: value.url\n }\n });\n var linkValue = tempNode.outerHTML;\n if (this.enableHtmlSanitizer) {\n linkValue = this.htmlEditorModule.sanitizeHelper(tempNode.outerHTML);\n }\n var href = (linkValue !== '' && (this.createElement('div', {\n innerHTML: linkValue\n }).firstElementChild).getAttribute('href')) || null;\n href = !isNOU(href) ? href : '';\n value.url = href;\n break;\n }\n }\n }\n return value;\n };\n RichTextEditor.prototype.encode = function (value) {\n var divNode = this.createElement('div');\n divNode.innerText = value.trim();\n // eslint-disable-next-line\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @returns {void}\n * @private\n\n */\n RichTextEditor.prototype.render = function () {\n if (this.value && !this.valueTemplate) {\n this.setProperties({ value: this.serializeValue(this.value) }, true);\n }\n this.renderModule = new Render(this, this.serviceLocator);\n this.sourceCodeModule = new ViewSource(this, this.serviceLocator);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n this.RTERender();\n // eslint-disable-next-line\n var execCommandCallBack = new ExecCommandCallBack(this);\n this.notify(events.initialEnd, {});\n if (this.enableXhtml) {\n this.setProperties({ value: this.getXhtml() }, true);\n }\n if (this.toolbarSettings.enable && this.toolbarSettings.type === 'Expand' && !isNOU(this.getToolbar()) &&\n (this.toolbarSettings.items.indexOf('Undo') > -1 && this.toolbarSettings.items.indexOf('Redo') > -1)) {\n this.disableToolbarItem(['Undo', 'Redo']);\n }\n this.setContentHeight();\n if (this.value !== null) {\n this.valueContainer.defaultValue = this.value;\n }\n // eslint-disable-next-line\n (this.enabled && !this.readonly) ? this.eventInitializer() : this.unWireEvents();\n this.notify(events.bindCssClass, { cssClass: this.cssClass });\n this.addAudioVideoWrapper();\n this.notify(events.tableclass, {});\n this.renderComplete();\n };\n /**\n * addAudioVideoWrapper method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.addAudioVideoWrapper = function () {\n var _this = this;\n var insertElem;\n var audioElm = this.element.querySelectorAll('audio');\n for (var i = 0; i < audioElm.length; i++) {\n if (!audioElm[i].classList.contains('e-rte-audio')) {\n audioElm[i].classList.add('e-rte-audio');\n audioElm[i].classList.add(classes.CLS_AUDIOINLINE);\n }\n // eslint-disable-next-line max-len\n if (!audioElm[i].parentElement.classList.contains(classes.CLS_CLICKELEM) && !audioElm[i].parentElement.classList.contains(classes.CLS_AUDIOWRAP)) {\n var audioWrapElem = this.createElement('span', { className: classes.CLS_AUDIOWRAP });\n audioWrapElem.setAttribute('style', 'width:300px; margin:0 auto;');\n audioWrapElem.contentEditable = 'false';\n var audioInnerWrapElem = this.createElement('span', { className: classes.CLS_CLICKELEM });\n audioWrapElem.appendChild(audioInnerWrapElem);\n audioElm[i].parentNode.insertBefore(audioWrapElem, audioElm[i].nextSibling);\n audioInnerWrapElem.appendChild(audioElm[i]);\n if (audioWrapElem.nextElementSibling === null) {\n insertElem = this.createElement('br');\n audioWrapElem.parentNode.insertBefore(insertElem, audioWrapElem.nextSibling);\n }\n }\n }\n var videoElm = this.element.querySelectorAll('video');\n for (var i = 0; i < videoElm.length; i++) {\n if (!videoElm[i].classList.contains('e-rte-video')) {\n videoElm[i].classList.add('e-rte-video');\n videoElm[i].classList.add(classes.CLS_VIDEOINLINE);\n }\n // eslint-disable-next-line max-len\n if (!videoElm[i].parentElement.classList.contains(classes.CLS_CLICKELEM) && !videoElm[i].parentElement.classList.contains(classes.CLS_VIDEOWRAP)) {\n var videoWrapElem = this.createElement('span', { className: classes.CLS_VIDEOWRAP });\n videoWrapElem.contentEditable = 'false';\n videoElm[i].parentNode.insertBefore(videoWrapElem, videoElm[i].nextSibling);\n videoWrapElem.appendChild(videoElm[i]);\n if (videoWrapElem.nextElementSibling === null) {\n insertElem = this.createElement('br');\n videoWrapElem.parentNode.insertBefore(insertElem, videoWrapElem.nextSibling);\n }\n }\n if (Browser.userAgent.indexOf('Firefox') !== -1) {\n // eslint-disable-next-line\n videoElm[i].addEventListener('play', function (args) {\n _this.notify(events.mouseDown, { args: args });\n _this.notify('editAreaClick', { args: args });\n });\n // eslint-disable-next-line\n videoElm[i].addEventListener('pause', function (args) {\n _this.notify(events.mouseDown, { args: args });\n _this.notify('editAreaClick', { args: args });\n });\n }\n }\n };\n /**\n * For internal use only - Initialize the event handler\n *\n * @returns {void}\n * @private\n\n * @hidden\n */\n RichTextEditor.prototype.eventInitializer = function () {\n this.wireEvents();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n RichTextEditor.prototype.cleanList = function (e) {\n var range = this.getRange();\n var currentStartContainer = range.startContainer;\n var currentEndContainer = range.endContainer;\n var currentStartOffset = range.startOffset;\n var isSameContainer = currentStartContainer === currentEndContainer ? true : false;\n // eslint-disable-next-line\n var currentEndOffset = currentEndContainer.textContent.length;\n var endNode = range.endContainer.nodeName === '#text' ? range.endContainer.parentElement :\n range.endContainer;\n var closestLI = closest(endNode, 'LI');\n var isDetached = false;\n if (!isNOU(closestLI) && endNode.textContent.length === range.endOffset &&\n !range.collapsed && isNOU(endNode.nextElementSibling)) {\n for (var i = 0; i < closestLI.childNodes.length; i++) {\n if (closestLI.childNodes[i].nodeName === '#text' && closestLI.childNodes[i].textContent.trim().length === 0) {\n detach(closestLI.childNodes[i]);\n isDetached = true;\n i--;\n }\n }\n var currentLastElem = closestLI;\n while (currentLastElem.lastChild !== null && currentLastElem.nodeName !== '#text') {\n currentLastElem = currentLastElem.lastChild;\n }\n if (isDetached) {\n var currentLast = currentLastElem.nodeName === 'BR' && !isNOU(currentLastElem.previousSibling) ?\n currentLastElem.previousSibling : currentLastElem;\n this.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), isSameContainer ? currentLast : currentStartContainer, currentLast, currentStartOffset, (currentLast.nodeName === 'BR' ? 0 : currentLast.textContent.length));\n }\n }\n };\n /**\n * For internal use only - keydown the event handler;\n *\n * @param {KeyboardEvent} e - specifies the event.\n * @returns {void}\n * @private\n\n * @hidden\n */\n RichTextEditor.prototype.keyDown = function (e) {\n this.notify(events.keyDown, { member: 'keydown', args: e });\n this.restrict(e);\n if (this.editorMode === 'HTML') {\n this.cleanList(e);\n }\n if (this.editorMode === 'HTML' && ((e.which === 8 && e.code === 'Backspace') || (e.which === 46 && e.code === 'Delete'))) {\n var range = this.getRange();\n var startNode = range.startContainer.nodeName === '#text' ? range.startContainer.parentElement :\n range.startContainer;\n if (closest(startNode, 'pre') &&\n (e.which === 8 && range.startContainer.textContent.charCodeAt(range.startOffset - 1) === 8203) ||\n (e.which === 46 && range.startContainer.textContent.charCodeAt(range.startOffset) === 8203)) {\n // eslint-disable-next-line\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var pointer = e.which === 8 ? range.startOffset - 1 : range.startOffset;\n range.startContainer.textContent = range.startContainer.textContent.replace(regEx, '');\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), range.startContainer, pointer);\n }\n else if ((e.code === 'Backspace' && e.which === 8) &&\n range.startContainer.textContent.charCodeAt(0) === 8203 && range.collapsed) {\n var parentEle = range.startContainer.parentElement;\n var index = void 0;\n var i = void 0;\n for (i = 0; i < parentEle.childNodes.length; i++) {\n if (parentEle.childNodes[i] === range.startContainer) {\n index = i;\n }\n }\n var bool = true;\n var removeNodeArray = [];\n for (i = index; i >= 0; i--) {\n // eslint-disable-next-line max-len\n if (parentEle.childNodes[i].nodeType === 3 && parentEle.childNodes[i].textContent.charCodeAt(0) === 8203 && bool) {\n removeNodeArray.push(i);\n }\n else {\n bool = false;\n }\n }\n if (removeNodeArray.length > 0) {\n for (i = removeNodeArray.length - 1; i > 0; i--) {\n parentEle.childNodes[removeNodeArray[i]].textContent = '';\n }\n }\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), range.startContainer, range.startOffset);\n }\n }\n var notFormatPainterCopy = !isNOU(e.action) && e.action !== 'format-copy';\n if (this.formatter.getUndoRedoStack().length === 0 && notFormatPainterCopy) {\n this.formatter.saveData();\n }\n if (e.action !== 'insert-link' &&\n e.action !== 'format-copy' && e.action !== 'format-paste' &&\n (!e.target || !e.target.classList.contains('e-mention')) &&\n (e.action && e.action !== 'paste' && e.action !== 'space'\n || e.which === 9 || (e.code === 'Backspace' && e.which === 8))) {\n var FormatPainterEscapeAction = false;\n if (!isNOU(this.formatPainterModule)) {\n FormatPainterEscapeAction = this.formatPainterModule.previousAction === 'escape';\n }\n if (!FormatPainterEscapeAction) {\n this.formatter.process(this, null, e);\n }\n switch (e.action) {\n case 'toolbar-focus':\n if (this.toolbarSettings.enable) {\n // eslint-disable-next-line\n var selector = '.e-toolbar-item[title] [tabindex]';\n this.toolbarModule.baseToolbar.toolbarObj.element.querySelector(selector).focus();\n }\n break;\n case 'escape':\n this.contentModule.getEditPanel().focus();\n break;\n }\n }\n if (!isNOU(this.placeholder)) {\n if ((!isNOU(this.placeHolderWrapper)) && (this.inputElement.textContent.length !== 1)) {\n this.placeHolderWrapper.style.display = 'none';\n }\n else if (this.iframeSettings.enable && this.inputElement.classList.contains('e-rte-placeholder')) {\n removeClass([this.inputElement], 'e-rte-placeholder');\n }\n else {\n this.setPlaceHolder();\n }\n }\n this.autoResize();\n };\n RichTextEditor.prototype.keyUp = function (e) {\n if (this.editorMode === 'HTML') {\n var range = this.getRange();\n if (Browser.userAgent.indexOf('Firefox') !== -1 && range.startContainer.nodeName === '#text' &&\n range.startContainer.parentElement === this.inputElement && this.enterKey !== 'BR') {\n var range_1 = this.getRange();\n var tempElem = this.createElement(this.enterKey);\n range_1.startContainer.parentElement.insertBefore(tempElem, range_1.startContainer);\n tempElem.appendChild(range_1.startContainer);\n this.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), tempElem.childNodes[0], tempElem.childNodes[0], tempElem.childNodes[0].textContent.length, tempElem.childNodes[0].textContent.length);\n }\n }\n this.notify(events.keyUp, { member: 'keyup', args: e });\n if (e.keyCode === 39 || e.keyCode === 37) {\n this.notify(events.tableModulekeyUp, { member: 'tableModulekeyUp', args: e });\n }\n if (e.code === 'KeyX' && e.which === 88 && e.keyCode === 88 && e.ctrlKey && (this.inputElement.innerHTML === '' ||\n this.inputElement.innerHTML === '
')) {\n this.inputElement.innerHTML = getEditValue(getDefaultValue(this), this);\n }\n var allowedKeys = e.which === 32 || e.which === 13 || e.which === 8 || e.which === 46;\n var formatPainterCopy = e.key === 'C' && e.altKey && e.shiftKey;\n var formatPainterPaste = e.key === 'V' && e.altKey && e.shiftKey;\n if ((!formatPainterCopy && !formatPainterPaste) && ((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys) || (this.editorMode === 'Markdown'\n && ((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys)) && !this.inlineMode.enable) {\n this.formatter.onKeyHandler(this, e);\n }\n if (this.inputElement && this.inputElement.textContent.length !== 0\n || this.element.querySelectorAll('.e-toolbar-item.e-active').length > 0) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n if (!isNOU(this.placeholder)) {\n if (!(e.key === 'Enter' && e.keyCode === 13) && (this.inputElement.innerHTML === '


' || this.inputElement.innerHTML === '

' ||\n this.inputElement.innerHTML === '
')) {\n this.setPlaceHolder();\n }\n }\n };\n /**\n * @param {string} value - specifies the value.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.serializeValue = function (value) {\n if (this.editorMode === 'HTML' && !isNOU(value)) {\n if (this.enableHtmlEncode) {\n value = this.htmlEditorModule.sanitizeHelper(decode(value));\n value = this.encode(value);\n }\n else {\n value = this.htmlEditorModule.sanitizeHelper(value);\n value = this.enableXhtml ? this.htmlEditorModule.xhtmlValidation.selfEncloseValidation(value) : value;\n }\n }\n return value;\n };\n /**\n * This method will clean up the HTML against cross-site scripting attack and return the HTML as string.\n * It's only applicable to editorMode as `HTML`.\n *\n * @param {string} value - Specifies the value that you want to sanitize.\n * @returns {string} - specifies the the string value\n */\n RichTextEditor.prototype.sanitizeHtml = function (value) {\n return this.serializeValue(value);\n };\n /**\n * updateValue method\n *\n * @param {string} value - specifies the string value.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.updateValue = function (value) {\n if (isNOU(value)) {\n var inputVal = this.inputElement.innerHTML;\n this.setProperties({ value: isEditableValueEmpty(inputVal) ? null : inputVal });\n }\n else {\n this.setProperties({ value: value });\n }\n };\n RichTextEditor.prototype.triggerEditArea = function (e) {\n if (!isIDevice()) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n }\n else {\n var touch = (e.touches ? e.changedTouches[0] : e);\n if (this.clickPoints.clientX === touch.clientX && this.clickPoints.clientY === touch.clientY) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n }\n }\n };\n RichTextEditor.prototype.notifyMouseUp = function (e) {\n var touch = (e.touches ? e.changedTouches[0] : e);\n this.notify(events.mouseUp, { member: 'mouseUp', args: e,\n touchData: { prevClientX: this.clickPoints.clientX, prevClientY: this.clickPoints.clientY,\n clientX: touch.clientX, clientY: touch.clientY }\n });\n if (this.inputElement && ((this.editorMode === 'HTML' && this.inputElement.textContent.length !== 0) ||\n (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0)) || (e.target && (e.target.nodeName === 'VIDEO'\n || e.target.querySelectorAll('.' + classes.CLS_VIDEOWRAP).length > 0) || (e.target && e.target.nodeName !== 'BR' &&\n (e.target.classList.contains(classes.CLS_AUDIOWRAP) ||\n e.target.classList.contains(classes.CLS_CLICKELEM) ||\n e.target.classList.contains(classes.CLS_VID_CLICK_ELEM))))) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n this.triggerEditArea(e);\n };\n RichTextEditor.prototype.mouseUp = function (e) {\n if (this.quickToolbarSettings.showOnRightClick && Browser.isDevice) {\n var target = e.target;\n var closestTable = closest(target, 'table');\n if (target && target.nodeName === 'A' || target.nodeName === 'IMG' || (target.nodeName === 'TD' || target.nodeName === 'TH' ||\n target.nodeName === 'TABLE' || (closestTable && this.contentModule.getEditPanel().contains(closestTable)))) {\n return;\n }\n }\n this.notifyMouseUp(e);\n if (e.detail === 3) {\n var range = this.getRange();\n var selection = this.formatter.editorManager.domNode.getSelection();\n if (/\\s+$/.test(selection.toString())) {\n if (!isNOU(range.startContainer.parentElement) && (!isNOU(range.startContainer.parentElement.nextSibling) &&\n (range.startContainer.parentElement.nextSibling.nodeType !== 3 ||\n /\\s+$/.test(range.startContainer.parentElement.nextSibling.textContent)) || range.startOffset === range.endOffset)\n || range.startContainer.parentElement.tagName.toLocaleLowerCase() === 'li') {\n range.setStart(range.startContainer, range.startOffset);\n range.setEnd(range.startContainer, range.startContainer.textContent.length);\n }\n }\n }\n };\n /**\n * @param {Function} module - specifies the module function.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.onCopy = function () {\n this.contentModule.getDocument().execCommand('copy', false, null);\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.onCut = function () {\n this.contentModule.getDocument().execCommand('cut', false, null);\n };\n /**\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.onPaste = function (e) {\n var _this = this;\n var evenArgs = {\n originalEvent: e,\n cancel: false,\n requestType: 'Paste'\n };\n this.trigger(events.actionBegin, evenArgs, function (pasteArgs) {\n var currentLength = _this.inputElement.textContent.length;\n var selectionLength = _this.getSelection().length;\n var pastedContentLength = (isNOU(e) || isNOU(e.clipboardData))\n ? 0 : e.clipboardData.getData('text/plain').length;\n var totalLength = (currentLength - selectionLength) + pastedContentLength;\n if (_this.editorMode === 'Markdown') {\n var args_1 = { requestType: 'Paste', editorMode: _this.editorMode, event: e };\n setTimeout(function () {\n _this.formatter.onSuccess(_this, args_1);\n }, 0);\n if (!(_this.maxLength === -1 || totalLength <= _this.maxLength)) {\n e.preventDefault();\n }\n return;\n }\n if (!pasteArgs.cancel && _this.inputElement.contentEditable === 'true' &&\n (_this.maxLength === -1 || totalLength <= _this.maxLength)) {\n if (!isNOU(_this.pasteCleanupModule)) {\n _this.notify(events.pasteClean, { args: e });\n }\n else {\n var args_2 = { requestType: 'Paste', editorMode: _this.editorMode, event: e };\n var value = null;\n var htmlValue = false;\n if (e && !isNOU(e.clipboardData)) {\n value = e.clipboardData.getData('text/plain');\n htmlValue = e.clipboardData.getData('text/html').indexOf('MsoNormal') > 0;\n }\n var file = e && e.clipboardData && e.clipboardData.items.length > 0 ?\n e.clipboardData.items[0].getAsFile() : null;\n if (value !== null) {\n _this.notify(events.paste, {\n file: file,\n args: e,\n text: value,\n isWordPaste: htmlValue\n });\n }\n setTimeout(function () {\n _this.formatter.onSuccess(_this, args_2);\n }, 0);\n }\n }\n else {\n e.preventDefault();\n }\n });\n };\n /**\n * @param {string} action - specifies the string value.\n * @param {MouseEvent} event - specifies the event.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.clipboardAction = function (action, event) {\n switch (action.toLowerCase()) {\n case 'cut':\n this.onCut();\n this.formatter.onSuccess(this, {\n requestType: 'Cut',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'copy':\n this.onCopy();\n this.formatter.onSuccess(this, {\n requestType: 'Copy',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'paste':\n this.onPaste(event);\n break;\n }\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @returns {void}\n */\n RichTextEditor.prototype.destroy = function () {\n if (this.isDestroyed || !this.isRendered) {\n return;\n }\n if (!isNOU(this.timeInterval)) {\n clearInterval(this.timeInterval);\n this.timeInterval = null;\n }\n if (this.element.offsetParent === null) {\n if (!isNOU(this.toolbarModule)) {\n this.toolbarModule.destroy();\n }\n this.notify(events.moduleDestroy, {});\n return;\n }\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n this.unWireEvents();\n if (this.originalElement.tagName === 'TEXTAREA') {\n this.element.parentElement.insertBefore(this.valueContainer, this.element);\n this.valueContainer.id = this.getID();\n this.valueContainer.removeAttribute('name');\n detach(this.element);\n if (this.originalElement.innerHTML.trim() !== '') {\n this.valueContainer.value = this.originalElement.innerHTML.trim();\n this.setProperties({ value: (!isNOU(this.initialValue) ? this.initialValue : null) }, true);\n }\n else {\n this.valueContainer.value = this.valueContainer.defaultValue;\n }\n this.element = this.valueContainer;\n for (var i = 0; i < this.originalElement.classList.length; i++) {\n addClass([this.element], this.originalElement.classList[i]);\n }\n if (!isNOU(this.cssClass)) {\n var currentClassList = this.cssClass.split(' ');\n for (var i = 0; i < currentClassList.length; i++) {\n addClass([this.element], currentClassList[i]);\n }\n }\n removeClass([this.element], classes.CLS_RTE_HIDDEN);\n }\n else {\n if (this.originalElement.innerHTML.trim() !== '') {\n this.element.innerHTML = this.originalElement.innerHTML.trim();\n this.setProperties({ value: (!isNOU(this.initialValue) ? this.initialValue : null) }, true);\n }\n else {\n this.element.innerHTML = '';\n }\n }\n if (this.placeholder && this.placeHolderWrapper) {\n this.placeHolderWrapper = null;\n }\n if (!isNOU(this.cssClass)) {\n var allClassName = this.cssClass.split(' ');\n for (var i = 0; i < allClassName.length; i++) {\n if (allClassName[i].trim() !== '') {\n removeClass([this.element], allClassName[i]);\n }\n }\n }\n this.removeHtmlAttributes();\n this.removeAttributes();\n _super.prototype.destroy.call(this);\n this.isRendered = false;\n if (this.enablePersistence) {\n window.localStorage.removeItem(this.getModuleName() + this.element.id);\n }\n };\n RichTextEditor.prototype.removeHtmlAttributes = function () {\n if (this.htmlAttributes) {\n var keys = Object.keys(this.htmlAttributes);\n for (var i = 0; i < keys.length && this.element.hasAttribute(keys[i]); i++) {\n this.element.removeAttribute(keys[i]);\n }\n }\n };\n RichTextEditor.prototype.removeAttributes = function () {\n if (!this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n }\n if (this.enableRtl) {\n removeClass([this.element], classes.CLS_RTL);\n }\n if (this.readonly) {\n removeClass([this.element], classes.CLS_RTE_READONLY);\n }\n if (this.element.style.width !== '' && this.originalElement.style.width === '') {\n this.element.style.removeProperty('width');\n }\n if (this.element.style.height !== '' && this.originalElement.style.height === '') {\n this.element.style.removeProperty('height');\n }\n this.element.removeAttribute('aria-disabled');\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n };\n RichTextEditor.prototype.destroyDependentModules = function () {\n /* destroy dependent modules */\n this.renderModule.destroy();\n this.formatter.editorManager.undoRedoManager.destroy();\n this.sourceCodeModule.destroy();\n };\n /**\n * Returns the HTML or Text inside the RichTextEditor.\n *\n * @returns {Element} - specifies the element.\n */\n RichTextEditor.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Returns the text content as string.\n *\n * @returns {string} - specifies the string value.\n */\n RichTextEditor.prototype.getText = function () {\n return this.contentModule.getText();\n };\n /**\n * Returns the html value of the selected content as string.\n *\n * @returns {string} - specifies the string value.\n */\n RichTextEditor.prototype.getSelectedHtml = function () {\n var range;\n var wrapperElm = this.createElement('div');\n var selection = this.contentModule.getDocument().getSelection();\n if (selection.rangeCount > 0) {\n range = selection.getRangeAt(0);\n var selectedHtml = range.cloneContents();\n wrapperElm.appendChild(selectedHtml);\n }\n return wrapperElm.innerHTML;\n };\n /**\n * It shows the inline quick toolbar\n *\n * @returns {void}\n */\n RichTextEditor.prototype.showInlineToolbar = function () {\n if (this.inlineMode.enable) {\n var currentRange = this.getRange();\n var targetElm = currentRange.endContainer.nodeName === '#text' ?\n currentRange.endContainer.parentElement : currentRange.endContainer;\n var x = currentRange.getClientRects()[0].left;\n var y = currentRange.getClientRects()[0].top;\n this.quickToolbarModule.showInlineQTBar(x, y, targetElm);\n }\n };\n /**\n * It hides the inline quick toolbar\n *\n * @returns {void}\n */\n RichTextEditor.prototype.hideInlineToolbar = function () {\n this.quickToolbarModule.hideInlineQTBar();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\n * @private\n\n */\n RichTextEditor.prototype.getModuleName = function () {\n return 'richtexteditor';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} newProp - specifies the the property.\n * @param {RichTextEditorModel} oldProp - specifies the old property.\n * @returns {void}\n * @hidden\n\n */\n /* eslint-disable */\n RichTextEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enterKey':\n case 'value': {\n var nVal = void 0;\n if (prop === 'enterKey') {\n if (this.value === null || this.value === '

' || this.value === '


' ||\n this.value === '
') {\n nVal = null;\n }\n else {\n nVal = this.value;\n }\n }\n else {\n nVal = newProp[prop];\n }\n var val = this.editorMode === 'HTML' ? getEditValue(nVal, this) : nVal;\n if ((!isNOU(nVal) && nVal !== '') || prop === 'enterKey') {\n this.value = this.serializeValue(((this.enableHtmlEncode) ? this.encode(decode(val)) : val));\n }\n this.updatePanelValue();\n if (this.inputElement) {\n this.notify(events.tableclass, {});\n }\n this.setPlaceHolder();\n this.notify(events.xhtmlValidation, { module: 'XhtmlValidation', newProp: newProp, oldProp: oldProp });\n if (this.enableXhtml) {\n this.setProperties({ value: this.getXhtml() }, true);\n }\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n this.addAudioVideoWrapper();\n break;\n }\n case 'valueTemplate':\n this.setValue(true);\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'width':\n this.setWidth(newProp[prop]);\n if (this.toolbarSettings.enable && !this.inlineMode.enable) {\n this.toolbarModule.refreshToolbarOverflow();\n this.resizeHandler();\n }\n break;\n case 'height':\n this.setHeight(newProp[prop]);\n this.setContentHeight();\n this.autoResize();\n break;\n case 'readonly':\n this.setReadOnly(false);\n break;\n case 'cssClass':\n this.element.classList.remove(oldProp[prop]);\n this.setCssClass(newProp[prop]);\n this.notify(events.bindCssClass, { cssClass: newProp[prop], oldCssClass: oldProp[prop] });\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'placeholder':\n this.placeholder = newProp[prop];\n this.setPlaceHolder();\n break;\n case 'htmlAttributes':\n setAttributes(this.htmlAttributes, this, false, false);\n break;\n case 'iframeSettings': {\n var frameSetting = oldProp[prop];\n if (frameSetting.resources) {\n var iframe = this.contentModule.getDocument();\n var header = iframe.querySelector('head');\n var files = void 0;\n if (frameSetting.resources.scripts) {\n files = header.querySelectorAll('.' + classes.CLS_SCRIPT_SHEET);\n this.removeSheets(files);\n }\n if (frameSetting.resources.styles) {\n files = header.querySelectorAll('.' + classes.CLS_STYLE_SHEET);\n this.removeSheets(files);\n }\n }\n this.setIframeSettings();\n break;\n }\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'inlineMode':\n this.notify(events.modelChanged, { module: 'quickToolbar', newProp: newProp, oldProp: oldProp });\n this.setContentHeight();\n break;\n case 'toolbarSettings':\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n this.setContentHeight();\n break;\n case 'maxLength':\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'showCharCount':\n if (newProp[prop] && this.countModule) {\n this.countModule.renderCount();\n }\n else if (newProp[prop] === false && this.countModule) {\n this.countModule.destroy();\n }\n break;\n case 'enableHtmlEncode':\n this.updateValueData();\n this.updatePanelValue();\n this.setPlaceHolder();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'undoRedoSteps':\n case 'undoRedoTimer':\n this.formatter.editorManager.observer.notify(CONSTANT.MODEL_CHANGED, { newProp: newProp, oldProp: oldProp });\n break;\n case 'enableXhtml':\n this.notify(events.xhtmlValidation, { module: 'XhtmlValidation', newProp: newProp, oldProp: oldProp });\n break;\n case 'quickToolbarSettings':\n newProp.quickToolbarSettings.showOnRightClick ? this.wireContextEvent() : this.unWireContextEvent();\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n case 'formatPainterSettings':\n this.formatter.editorManager.observer.notify(CONSTANT.MODEL_CHANGED, { module: 'formatPainter', newProp: newProp });\n break;\n default:\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n }\n }\n };\n /* eslint-enable */\n /**\n * @hidden\n * @returns {void}\n\n */\n RichTextEditor.prototype.updateValueData = function () {\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(decode(this.inputElement.innerHTML)) }, true);\n }\n else {\n this.setProperties({\n value: /<[a-z][\\s\\S]*>/i.test(this.inputElement.innerHTML) ? this.inputElement.innerHTML :\n decode(this.inputElement.innerHTML)\n });\n }\n };\n RichTextEditor.prototype.removeSheets = function (srcList) {\n var i;\n for (i = 0; i < srcList.length; i++) {\n detach(srcList[i]);\n }\n };\n RichTextEditor.prototype.updatePanelValue = function () {\n var value = this.value;\n value = (this.enableHtmlEncode && this.value) ? decode(value) : value;\n var getTextArea = this.element.querySelector('.e-rte-srctextarea');\n if (value) {\n if (getTextArea && getTextArea.style.display === 'block') {\n getTextArea.value = this.value;\n }\n if (this.valueContainer) {\n this.valueContainer.value = (this.enableHtmlEncode) ? this.value : value;\n }\n if (this.editorMode === 'HTML' && this.inputElement && this.inputElement.innerHTML.replace('&', '&').trim() !== value.trim()) {\n this.inputElement.innerHTML = value;\n }\n else if (this.editorMode === 'Markdown' && this.inputElement\n && this.inputElement.value.trim() !== value.trim()) {\n this.inputElement.value = value;\n }\n }\n else {\n if (getTextArea && getTextArea.style.display === 'block') {\n getTextArea.value = '';\n }\n if (this.editorMode === 'HTML') {\n if (this.enterKey === 'DIV') {\n this.inputElement.innerHTML = '

';\n }\n else if (this.enterKey === 'BR') {\n this.inputElement.innerHTML = '
';\n }\n else {\n this.inputElement.innerHTML = '


';\n if (value === '' && this.formatter && this.inputElement) {\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), this.inputElement.firstElementChild, this.inputElement.firstElementChild.childElementCount);\n }\n }\n }\n else {\n this.inputElement.value = '';\n }\n if (this.valueContainer) {\n this.valueContainer.value = '';\n }\n }\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n };\n RichTextEditor.prototype.setHeight = function (height) {\n if (height !== 'auto') {\n this.element.style.height = formatUnit(height);\n }\n else {\n this.element.style.height = 'auto';\n }\n if (this.toolbarSettings.type === 'Expand' && (typeof (this.height) === 'string' &&\n this.height.indexOf('px') > -1 || typeof (this.height) === 'number')) {\n this.element.classList.add(classes.CLS_RTE_FIXED_TB_EXPAND);\n }\n else {\n this.element.classList.remove(classes.CLS_RTE_FIXED_TB_EXPAND);\n }\n };\n /**\n * setPlaceHolder method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.setPlaceHolder = function () {\n if (this.inputElement && this.placeholder && this.iframeSettings.enable !== true) {\n if (this.editorMode !== 'Markdown') {\n if (!this.placeHolderWrapper) {\n this.placeHolderWrapper = this.createElement('span', { className: 'rte-placeholder e-rte-placeholder' + ' ' + this.cssClass });\n if (this.inputElement) {\n this.inputElement.parentElement.insertBefore(this.placeHolderWrapper, this.inputElement);\n }\n attributes(this.placeHolderWrapper, {\n 'style': 'font-size: 14px; margin-left: 0px; margin-right: 0px;'\n });\n }\n this.placeHolderWrapper.innerHTML = this.placeholder;\n if (this.inputElement.textContent.length === 0 && this.inputElement.childNodes.length < 2 && !isNOU(this.inputElement.firstChild) && (this.inputElement.firstChild.nodeName === 'BR' ||\n ((this.inputElement.firstChild.nodeName === 'P' || this.inputElement.firstChild.nodeName === 'DIV') && !isNOU(this.inputElement.firstChild.firstChild) &&\n this.inputElement.firstChild.firstChild.nodeName === 'BR'))) {\n this.placeHolderWrapper.style.display = 'block';\n }\n else {\n this.placeHolderWrapper.style.display = 'none';\n }\n }\n else {\n this.inputElement.setAttribute('placeholder', this.placeholder);\n }\n }\n if (this.placeholder && this.iframeSettings.enable) {\n if (this.inputElement.textContent.length === 0 && this.inputElement.childNodes.length < 2 && !isNOU(this.inputElement.firstChild) && (this.inputElement.firstChild.nodeName === 'BR' ||\n ((this.inputElement.firstChild.nodeName === 'P' || this.inputElement.firstChild.nodeName === 'DIV') && !isNOU(this.inputElement.firstChild.firstChild) &&\n this.inputElement.firstChild.firstChild.nodeName === 'BR'))) {\n addClass([this.inputElement], 'e-rte-placeholder');\n this.inputElement.setAttribute('placeholder', this.placeholder);\n }\n else {\n removeClass([this.inputElement], 'e-rte-placeholder');\n }\n }\n };\n RichTextEditor.prototype.setWidth = function (width) {\n if (width !== 'auto') {\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n }\n else {\n this.element.style.width = 'auto';\n }\n };\n RichTextEditor.prototype.setCssClass = function (cssClass) {\n if (!isNOU(cssClass)) {\n var allClassName = cssClass.split(' ');\n for (var i = 0; i < allClassName.length; i++) {\n if (allClassName[i].trim() !== '') {\n this.element.classList.add(allClassName[i]);\n }\n }\n }\n };\n RichTextEditor.prototype.updateRTL = function () {\n this.notify(events.rtlMode, { enableRtl: this.enableRtl });\n if (this.enableRtl) {\n this.element.classList.add(classes.CLS_RTL);\n this.inputElement.classList.add(classes.CLS_RTL);\n }\n else {\n this.element.classList.remove(classes.CLS_RTL);\n this.inputElement.classList.remove(classes.CLS_RTL);\n }\n };\n RichTextEditor.prototype.updateReadOnly = function () {\n this.notify(events.readOnlyMode, { editPanel: this.inputElement, mode: this.readonly });\n };\n /**\n * setReadOnly method\n *\n * @param {boolean} initial - specifies the boolean value\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.setReadOnly = function (initial) {\n this.updateReadOnly();\n if (!initial) {\n if (this.readonly && this.enabled) {\n this.unbindEvents();\n this.unWireEvents();\n }\n else if (this.enabled) {\n this.wireEvents();\n }\n }\n };\n /**\n * By default, prints all the pages of the RichTextEditor.\n *\n * @returns {void}\n */\n RichTextEditor.prototype.print = function () {\n var _this = this;\n var printWind;\n var printArgs = {\n element: this.inputElement,\n requestType: 'print',\n cancel: false\n };\n this.trigger(events.actionBegin, printArgs, function (printingArgs) {\n printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth);\n if (Browser.info.name === 'msie') {\n printWind.resizeTo(screen.availWidth, screen.availHeight);\n }\n printWind = printWindow(_this.inputElement, printWind);\n if (!printingArgs.cancel) {\n var actionArgs = {\n requestType: 'print'\n };\n _this.trigger(events.actionComplete, actionArgs);\n }\n });\n };\n /**\n * Refresh the view of the editor.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.refreshUI = function () {\n this.renderModule.refresh();\n };\n /**\n * Shows the Rich Text Editor component in full-screen mode.\n *\n * @returns {void}\n */\n RichTextEditor.prototype.showFullScreen = function () {\n this.fullScreenModule.showFullScreen();\n };\n /**\n * Enables the give toolbar items in the Rich Text Editor component.\n *\n * @returns {void}\n * @param {string | string[]} items - Specifies the single or collection of items\n * @param {boolean} muteToolbarUpdate enable/disables the toolbar item status in RichTextEditor.\n * that you want to be enable in Rich Text Editor’s Toolbar.\n *\n * @public\n */\n RichTextEditor.prototype.enableToolbarItem = function (items, muteToolbarUpdate) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, true, muteToolbarUpdate);\n };\n /**\n * Disables the given toolbar items in the Rich Text Editor component.\n *\n * @returns {void}\n * @param {string | string[]} items - Specifies the single or collection of items\n * @param {boolean} muteToolbarUpdate enable/disables the toolbar item status in RichTextEditor.\n * that you want to be disable in Rich Text Editor’s Toolbar.\n *\n * @public\n */\n RichTextEditor.prototype.disableToolbarItem = function (items, muteToolbarUpdate) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, false, muteToolbarUpdate);\n };\n /**\n * Removes the give toolbar items from the Rich Text Editor component.\n *\n * @returns {void}\n * @param {string | string[]} items - Specifies the single or collection of items\n * that you want to be remove from Rich Text Editor’s Toolbar.\n *\n * @public\n */\n RichTextEditor.prototype.removeToolbarItem = function (items) {\n this.toolbarModule.removeTBarItems(items);\n };\n /**\n * Get the selected range from the RichTextEditor's content.\n *\n * @returns {void}\n * @public\n\n */\n RichTextEditor.prototype.getRange = function () {\n return this.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n };\n RichTextEditor.prototype.initializeServices = function () {\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('rteLocale', this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale));\n this.serviceLocator.register('dialogRenderObject', new DialogRenderer(this));\n };\n RichTextEditor.prototype.RTERender = function () {\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.fullScreenModule = new FullScreen(this);\n this.enterKeyModule = new EnterKeyAction(this);\n this.renderModule.render();\n this.inputElement = this.contentModule.getEditPanel();\n this.setHeight(this.height);\n setAttributes(this.htmlAttributes, this, false, true);\n if (this.iframeSettings) {\n this.setIframeSettings();\n }\n this.setCssClass(this.cssClass);\n this.updateEnable();\n this.setPlaceHolder();\n this.updateRTL();\n this.updateReadOnly();\n this.updatePanelValue();\n if (this.enableHtmlEncode && !isNOU(this.value)) {\n this.setProperties({ value: this.encode(decode(this.value)) });\n }\n };\n RichTextEditor.prototype.setIframeSettings = function () {\n if (this.iframeSettings.resources) {\n var styleSrc = this.iframeSettings.resources.styles;\n var scriptSrc = this.iframeSettings.resources.scripts;\n if (this.iframeSettings.resources.scripts.length > 0) {\n this.InjectSheet(true, scriptSrc);\n }\n if (this.iframeSettings.resources.styles.length > 0) {\n this.InjectSheet(false, styleSrc);\n }\n }\n if (this.iframeSettings.attributes) {\n setAttributes(this.iframeSettings.attributes, this, true, false);\n }\n };\n RichTextEditor.prototype.InjectSheet = function (scriptSheet, srcList) {\n try {\n if (srcList && srcList.length > 0) {\n var iFrame = this.contentModule.getDocument();\n var target = iFrame.querySelector('head');\n for (var i = 0; i < srcList.length; i++) {\n if (scriptSheet) {\n var scriptEle = this.createScriptElement();\n scriptEle.src = srcList[i];\n target.appendChild(scriptEle);\n }\n else {\n var styleEle = this.createStyleElement();\n styleEle.href = srcList[i];\n target.appendChild(styleEle);\n }\n }\n }\n }\n catch (e) {\n return;\n }\n };\n RichTextEditor.prototype.createScriptElement = function () {\n var scriptEle = this.createElement('script', {\n className: classes.CLS_SCRIPT_SHEET\n });\n scriptEle.type = 'text/javascript';\n return scriptEle;\n };\n RichTextEditor.prototype.createStyleElement = function () {\n var styleEle = this.createElement('link', {\n className: classes.CLS_STYLE_SHEET\n });\n styleEle.rel = 'stylesheet';\n return styleEle;\n };\n RichTextEditor.prototype.setValue = function (isPropertyChange) {\n var _this = this;\n if (this.valueTemplate) {\n var regEx = new RegExp(/<(?=.*? .*?\\/ ?>|br|hr|input|!--|wbr)[a-z]+.*?>|<([a-z]+).*?<\\/\\1>/i);\n if (typeof this.valueTemplate === 'string' && regEx.test(this.valueTemplate)) {\n this.setProperties({ value: this.valueTemplate });\n }\n else {\n var compiledTemplate = compile(this.valueTemplate)('', this, 'valueTemplate');\n // eslint-disable-next-line\n if (typeof this.valueTemplate !== 'string' && this.isReact) {\n this.displayTempElem = this.createElement('div');\n for (var i = 0; i < compiledTemplate.length; i++) {\n var item = compiledTemplate[i];\n append([item], this.displayTempElem);\n }\n this.renderTemplates(function () {\n _this.inputElement.innerHTML = _this.displayTempElem.childNodes[0].innerHTML;\n _this.setProperties({ value: _this.inputElement.innerHTML.trim() });\n });\n }\n else {\n var appendElem = this.element;\n if (isPropertyChange) {\n this.inputElement.innerHTML = '';\n appendElem = this.inputElement;\n }\n for (var i = 0; i < compiledTemplate.length; i++) {\n var item = compiledTemplate[i];\n append([item], appendElem);\n }\n this.setProperties({ value: appendElem.innerHTML.trim() });\n this.renderReactTemplates();\n }\n }\n }\n else {\n // eslint-disable-next-line\n var innerHtml = !isNOU(this.element.innerHTML) && this.element.innerHTML.replace(/<(\\/?|\\!?)(!--!--)>/g, '').trim();\n if (innerHtml !== '') {\n if (this.element.tagName === 'TEXTAREA') {\n this.setProperties({ value: decode(innerHtml) });\n }\n else {\n this.setProperties({ value: innerHtml });\n }\n }\n }\n };\n // eslint-disable-next-line\n RichTextEditor.prototype.renderTemplates = function (callBack) {\n this.renderReactTemplates(callBack);\n };\n RichTextEditor.prototype.updateResizeFlag = function () {\n this.isResizeInitialized = true;\n };\n /**\n * Image max width calculation method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getInsertImgMaxWidth = function () {\n var maxWidth = this.insertImageSettings.maxWidth;\n // eslint-disable-next-line\n var imgPadding = 12;\n var imgResizeBorder = 2;\n if (isNOU(this.contentModule) || isNOU(this.contentModule.getEditPanel())) {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.imageModule.resizing);\n return maxWidth;\n }\n var editEle = this.contentModule.getEditPanel();\n var eleStyle = window.getComputedStyle(editEle);\n var editEleMaxWidth = editEle.offsetWidth - (imgPadding + imgResizeBorder +\n parseFloat(eleStyle.paddingLeft.split('px')[0]) + parseFloat(eleStyle.paddingRight.split('px')[0]) +\n parseFloat(eleStyle.marginLeft.split('px')[0]) + parseFloat(eleStyle.marginRight.split('px')[0]));\n return isNOU(maxWidth) ? editEleMaxWidth : maxWidth;\n };\n /**\n * Video max width calculation method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getInsertVidMaxWidth = function () {\n var maxWidth = this.insertVideoSettings.maxWidth;\n // eslint-disable-next-line\n var vidPadding = 12;\n var vidResizeBorder = 2;\n var editEle = this.contentModule.getEditPanel();\n var eleStyle = window.getComputedStyle(editEle);\n var editEleMaxWidth = editEle.offsetWidth - (vidPadding + vidResizeBorder +\n parseFloat(eleStyle.paddingLeft.split('px')[0]) + parseFloat(eleStyle.paddingRight.split('px')[0]) +\n parseFloat(eleStyle.marginLeft.split('px')[0]) + parseFloat(eleStyle.marginRight.split('px')[0]));\n return isNOU(maxWidth) ? editEleMaxWidth : maxWidth;\n };\n /**\n * setContentHeight method\n *\n * @param {string} target - specifies the target value.\n * @param {boolean} isExpand - specifies the bollean value.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.setContentHeight = function (target, isExpand) {\n var heightValue;\n var topValue = 0;\n var rteHeightPercent;\n var heightPercent = typeof (this.height) === 'string' && this.height.indexOf('%') > -1;\n var cntEle = (this.sourceCodeModule.getPanel() &&\n this.sourceCodeModule.getPanel().parentElement.style.display === 'block') ? this.sourceCodeModule.getPanel().parentElement :\n this.contentModule.getPanel();\n var rteHeight = this.element.offsetHeight;\n if (rteHeight === 0 && this.height !== 'auto' && !this.getToolbar()) {\n rteHeight = parseInt(this.height, 10);\n if (heightPercent) {\n rteHeightPercent = this.height;\n }\n }\n var tbHeight = this.getToolbar() ? this.toolbarModule.getToolbarHeight() : 0;\n var rzHandle = this.element.querySelector('.' + classes.CLS_RTE_RES_HANDLE);\n var rzHeight = this.enableResize ? (!isNOU(rzHandle) ? (rzHandle.offsetHeight + 8) : 0) : 0;\n var expandPopHeight = this.getToolbar() ? this.toolbarModule.getExpandTBarPopHeight() : 0;\n if (this.toolbarSettings.type === ToolbarType.Expand && isExpand) {\n heightValue = (this.height === 'auto' && rzHeight === 0) ? 'auto' : rteHeight - (tbHeight + expandPopHeight + rzHeight) + 'px';\n topValue = (!this.toolbarSettings.enableFloating) ? expandPopHeight : 0;\n }\n else {\n if (this.height === 'auto' && !(this.element.classList.contains('e-rte-full-screen')) && !this.isResizeInitialized) {\n heightValue = 'auto';\n }\n else {\n heightValue = heightPercent && rteHeightPercent ? rteHeightPercent : rteHeight - (tbHeight + rzHeight) + 'px';\n }\n }\n if (target !== 'windowResize') {\n if (this.iframeSettings.enable) {\n if (heightValue !== 'auto') {\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n }\n }\n else {\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n }\n }\n if (this.iframeSettings.enable && target === 'sourceCode') {\n var codeElement = select('.' + classes.CLS_RTE_CONTENT, this.element);\n setStyleAttribute(codeElement, { height: heightValue, marginTop: topValue + 'px' });\n }\n if (this.toolbarSettings.enableFloating && this.getToolbar() && !this.inlineMode.enable) {\n var tbWrapHeight = (isExpand ? (tbHeight + expandPopHeight) : tbHeight) + 'px';\n setStyleAttribute(this.getToolbar().parentElement, { height: tbWrapHeight });\n }\n if (rzHeight === 0) {\n this.autoResize();\n }\n };\n /**\n * Retrieves the HTML from RichTextEditor.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getHtml = function () {\n var htmlValue = this.contentModule.getEditPanel().innerHTML;\n return (this.enableXhtml && (htmlValue === '


' || htmlValue === '

' ||\n htmlValue === '
') ? null : this.serializeValue(htmlValue));\n };\n /**\n * Retrieves the Rich Text Editor's XHTML validated HTML content when `enableXhtml` property is enabled.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getXhtml = function () {\n var currentValue = this.value;\n if (!isNOU(currentValue) && this.enableXhtml) {\n currentValue = this.htmlEditorModule.xhtmlValidation.selfEncloseValidation(currentValue);\n }\n return currentValue;\n };\n /**\n * Shows the source HTML/MD markup.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.showSourceCode = function () {\n if (this.readonly) {\n return;\n }\n this.notify(events.sourceCode, {});\n };\n /**\n * Returns the maximum number of characters in the Rich Text Editor.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getCharCount = function () {\n var htmlText = this.editorMode === 'Markdown' ? this.inputElement.value.trim() :\n this.inputElement.textContent.trim();\n var htmlLength;\n if (this.editorMode !== 'Markdown' && htmlText.indexOf('\\u200B') !== -1) {\n htmlLength = htmlText.replace(/\\u200B/g, '').length;\n }\n else {\n htmlLength = htmlText.length;\n }\n return htmlLength;\n };\n /**\n * Show the dialog in the Rich Text Editor.\n *\n * @param {DialogType} type - specifies the dialog type.\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.showDialog = function (type) {\n if (type === DialogType.InsertLink) {\n this.notify(events.showLinkDialog, {});\n }\n else if (type === DialogType.InsertImage) {\n this.notify(events.showImageDialog, {});\n }\n else if (type === DialogType.InsertAudio) {\n this.notify(events.showAudioDialog, {});\n }\n else if (type === DialogType.InsertVideo) {\n this.notify(events.showVideoDialog, {});\n }\n else if (type === DialogType.InsertTable) {\n this.notify(events.showTableDialog, {});\n }\n };\n /**\n * Close the dialog in the Rich Text Editor.\n *\n * @param {DialogType} type - specifies the dialog type.\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.closeDialog = function (type) {\n if (type === DialogType.InsertLink) {\n this.notify(events.closeLinkDialog, {});\n }\n else if (type === DialogType.InsertImage) {\n this.notify(events.closeImageDialog, {});\n }\n else if (type === DialogType.InsertAudio) {\n this.notify(events.closeAudioDialog, {});\n }\n else if (type === DialogType.InsertVideo) {\n this.notify(events.closeVideoDialog, {});\n }\n else if (type === DialogType.InsertTable) {\n this.notify(events.closeTableDialog, {});\n }\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getBaseToolbarObject = function () {\n var tbObj;\n if (this.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n tbObj = this.quickToolbarModule && this.quickToolbarModule.getInlineBaseToolbar();\n }\n else {\n tbObj = this.toolbarModule && this.toolbarModule.getBaseToolbar();\n }\n return tbObj;\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getToolbar = function () {\n return this.toolbarModule ? this.toolbarModule.getToolbarElement() : null;\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getToolbarElement = function () {\n return this.toolbarModule && this.toolbarModule.getToolbarElement();\n };\n /**\n * @returns {void}\n * getID method\n *\n * @hidden\n\n */\n RichTextEditor.prototype.getID = function () {\n return (this.originalElement.tagName === 'TEXTAREA' ? this.valueContainer.id : this.element.id);\n };\n RichTextEditor.prototype.mouseDownHandler = function (e) {\n var touch = (e.touches ? e.changedTouches[0] : e);\n addClass([this.element], [classes.CLS_FOCUS]);\n this.preventDefaultResize(e);\n this.notify(events.mouseDown, { args: e });\n this.clickPoints = { clientX: touch.clientX, clientY: touch.clientY };\n };\n RichTextEditor.prototype.preventImgResize = function (e) {\n if (e.target.nodeName.toLocaleLowerCase() === 'img') {\n e.preventDefault();\n }\n };\n /**\n * preventDefaultResize method\n *\n * @param {FocusEvent} e - specifies the event.\n * @returns {void}\n * @hidden\n\n */\n // eslint-disable-next-line\n RichTextEditor.prototype.preventDefaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().addEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', false, 'false');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', false, 'false');\n }\n };\n // eslint-disable-next-line\n RichTextEditor.prototype.defaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().removeEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', true, 'true');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', true, 'true');\n }\n };\n RichTextEditor.prototype.resizeHandler = function () {\n var isExpand = false;\n if (!document.body.contains(this.element)) {\n document.defaultView.removeEventListener('resize', this.onResizeHandler, true);\n return;\n }\n if (this.toolbarSettings.enable && !this.inlineMode.enable) {\n this.toolbarModule.refreshToolbarOverflow();\n isExpand = this.toolbarModule.baseToolbar.toolbarObj.element.classList.contains(classes.CLS_EXPAND_OPEN);\n }\n this.setContentHeight('windowResize', isExpand);\n this.notify(events.windowResize, null);\n };\n RichTextEditor.prototype.scrollHandler = function (e) {\n if (this.element) {\n this.notify(events.scroll, { args: e });\n }\n };\n RichTextEditor.prototype.contentScrollHandler = function (e) {\n this.notify(events.contentscroll, { args: e });\n };\n RichTextEditor.prototype.focusHandler = function (e) {\n if ((!this.isRTE || this.isFocusOut)) {\n this.isRTE = this.isFocusOut ? false : true;\n this.isFocusOut = false;\n addClass([this.element], [classes.CLS_FOCUS]);\n if (this.editorMode === 'HTML') {\n this.cloneValue = (this.inputElement.innerHTML === '


' || this.inputElement.innerHTML === '

' ||\n this.inputElement.innerHTML === '
') ? null : this.enableHtmlEncode ?\n this.encode(decode(this.inputElement.innerHTML)) : this.inputElement.innerHTML;\n }\n else {\n this.cloneValue = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n var active = document.activeElement;\n if (active === this.element || active === this.getToolbarElement() || active === this.contentModule.getEditPanel()\n || ((this.iframeSettings.enable && active === this.contentModule.getPanel()) &&\n e.target && !e.target.classList.contains('e-img-inner')\n && (e.target && e.target.parentElement\n && !e.target.parentElement.classList.contains('e-img-wrap')))\n || closest(active, '.e-rte-toolbar') === this.getToolbarElement()) {\n this.contentModule.getEditPanel().focus();\n if (!isNOU(this.getToolbarElement())) {\n this.getToolbarElement().setAttribute('tabindex', '-1');\n var items = this.getToolbarElement().querySelectorAll('[tabindex=\"0\"]');\n for (var i = 0; i < items.length; i++) {\n items[i].setAttribute('tabindex', '-1');\n }\n }\n }\n this.preventDefaultResize(e);\n this.trigger('focus', { event: e, isInteracted: Object.keys(e).length === 0 ? false : true });\n if (!isNOU(this.saveInterval) && this.saveInterval > 0 && !this.autoSaveOnIdle) {\n this.timeInterval = setInterval(this.updateValueOnIdle.bind(this), this.saveInterval);\n }\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n }\n if (!isNOU(this.getToolbarElement())) {\n var toolbarItem = this.getToolbarElement().querySelectorAll('input,select,button,a,[tabindex]');\n for (var i = 0; i < toolbarItem.length; i++) {\n if ((!toolbarItem[i].classList.contains('e-rte-dropdown-btn') &&\n !toolbarItem[i].classList.contains('e-insert-table-btn')) &&\n (!toolbarItem[i].hasAttribute('tabindex') ||\n toolbarItem[i].getAttribute('tabindex') !== '-1')) {\n toolbarItem[i].setAttribute('tabindex', '-1');\n }\n }\n }\n };\n RichTextEditor.prototype.getUpdatedValue = function () {\n var value;\n if (!isNOU(this.tableModule)) {\n this.tableModule.removeResizeElement();\n }\n var getTextArea = this.element.querySelector('.e-rte-srctextarea');\n if (this.editorMode === 'HTML') {\n value = (this.inputElement.innerHTML === '


' || this.inputElement.innerHTML === '

' ||\n this.inputElement.innerHTML === '
') ? null : this.enableHtmlEncode ?\n this.encode(decode(this.inputElement.innerHTML)) : this.inputElement.innerHTML;\n if (getTextArea && getTextArea.style.display === 'block') {\n value = getTextArea.value;\n }\n }\n else {\n value = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n return value;\n };\n RichTextEditor.prototype.updateValueOnIdle = function () {\n if (!isNOU(this.tableModule) && !isNOU(this.inputElement.querySelector('.e-table-box.e-rbox-select'))) {\n return;\n }\n this.setProperties({ value: this.getUpdatedValue() }, true);\n this.valueContainer.value = this.value;\n this.isValueChangeBlurhandler = false;\n this.invokeChangeEvent();\n };\n RichTextEditor.prototype.updateIntervalValue = function () {\n clearTimeout(this.idleInterval);\n this.idleInterval = setTimeout(this.updateValueOnIdle.bind(this), 0);\n };\n RichTextEditor.prototype.updateStatus = function (e) {\n if (!isNOU(e.html) || !isNOU(e.markdown)) {\n var status_1 = this.formatter.editorManager.undoRedoManager.getUndoStatus();\n var eventArgs = {\n undo: status_1.undo,\n redo: status_1.redo,\n html: e.html,\n markdown: e.markdown\n };\n this.trigger(events.updatedToolbarStatus, eventArgs);\n }\n };\n RichTextEditor.prototype.onDocumentClick = function (e) {\n var target = e.target;\n var rteElement = closest(target, '.' + classes.CLS_RTE);\n if (!this.element.contains(e.target) && document !== e.target && rteElement !== this.element &&\n !closest(target, '[aria-owns=\"' + this.getID() + '\"]')) {\n this.isBlur = true;\n this.isRTE = false;\n }\n this.notify(events.docClick, { args: e });\n if (Browser.info.name !== 'msie' && e.detail > 3) {\n e.preventDefault();\n }\n };\n RichTextEditor.prototype.blurHandler = function (e) {\n var trg = e.relatedTarget;\n if (trg) {\n var rteElement = closest(trg, '.' + classes.CLS_RTE);\n if (rteElement && rteElement === this.element) {\n this.isBlur = false;\n if (trg === this.getToolbarElement()) {\n trg.setAttribute('tabindex', '-1');\n }\n }\n else if (closest(trg, '[aria-owns=\"' + this.getID() + '\"]')) {\n this.isBlur = false;\n }\n else {\n this.isBlur = true;\n trg = null;\n }\n }\n if (this.isBlur && isNOU(trg)) {\n removeClass([this.element], [classes.CLS_FOCUS]);\n this.notify(events.focusChange, {});\n var value = this.getUpdatedValue();\n this.setProperties({ value: value });\n this.notify(events.toolbarRefresh, { args: e, documentNode: document });\n this.isValueChangeBlurhandler = true;\n this.invokeChangeEvent();\n this.isFocusOut = true;\n this.isBlur = false;\n dispatchEvent(this.valueContainer, 'focusout');\n this.defaultResize(e);\n this.trigger('blur', { event: e, isInteracted: Object.keys(e).length === 0 ? false : true });\n if (!isNOU(this.timeInterval)) {\n clearInterval(this.timeInterval);\n this.timeInterval = null;\n }\n if (!isNOU(this.placeHolderWrapper) && this.element.querySelector('[title = Preview]')) {\n this.placeHolderWrapper.style.display = 'none';\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n }\n else {\n this.isRTE = true;\n }\n };\n /**\n * invokeChangeEvent method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.contentChanged = function () {\n if (this.autoSaveOnIdle) {\n if (!isNOU(this.saveInterval)) {\n clearTimeout(this.timeInterval);\n this.timeInterval = setTimeout(this.updateIntervalValue.bind(this), this.saveInterval);\n }\n }\n };\n /**\n * invokeChangeEvent method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.invokeChangeEvent = function () {\n var currentValue;\n if (this.enableXhtml) {\n currentValue = this.getXhtml();\n }\n else {\n currentValue = this.value;\n }\n var eventArgs = {\n value: currentValue,\n isInteracted: this.isValueChangeBlurhandler\n };\n if (this.value !== this.cloneValue) {\n this.trigger('change', eventArgs);\n this.cloneValue = this.value;\n }\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.wireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n if (!this.iframeSettings.enable) {\n // Add the scroll event handler from the inputElement\n EventHandler.add(this.inputElement, 'scroll', this.contentScrollHandler, this);\n }\n };\n RichTextEditor.prototype.wireContextEvent = function () {\n if (this.quickToolbarSettings.showOnRightClick) {\n EventHandler.add(this.inputElement, 'contextmenu', this.contextHandler, this);\n if (Browser.isDevice) {\n this.touchModule = new EJ2Touch(this.inputElement, { tapHold: this.touchHandler.bind(this), tapHoldThreshold: 500 });\n }\n }\n };\n RichTextEditor.prototype.unWireContextEvent = function () {\n EventHandler.remove(this.inputElement, 'contextmenu', this.contextHandler);\n if (Browser.isDevice && this.touchModule) {\n this.touchModule.destroy();\n }\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.unWireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (!this.iframeSettings.enable) {\n // Remove the scroll event handler from the inputElement\n EventHandler.remove(this.inputElement, 'scroll', this.contentScrollHandler);\n }\n };\n RichTextEditor.prototype.touchHandler = function (e) {\n this.notifyMouseUp(e.originalEvent);\n this.triggerEditArea(e.originalEvent);\n };\n RichTextEditor.prototype.contextHandler = function (e) {\n var closestElem = closest(e.target, 'a, table, img');\n if (this.inlineMode.onSelection === false || (!isNOU(closestElem) && this.inputElement.contains(closestElem)\n && (closestElem.tagName === 'IMG' || closestElem.tagName === 'TABLE' || closestElem.tagName === 'A'))) {\n e.preventDefault();\n }\n };\n RichTextEditor.prototype.resetHandler = function () {\n var defaultValue = this.valueContainer.defaultValue.trim();\n this.setProperties({ value: defaultValue === '' ? null : defaultValue });\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.autoResize = function () {\n var _this = this;\n if (this.height === 'auto') {\n if (this.editorMode === 'Markdown') {\n setTimeout(function () {\n _this.setAutoHeight(_this.inputElement);\n }, 0);\n }\n else if (this.iframeSettings.enable) {\n var iframeElement_1 = this.element.querySelector('#' + this.getID() + '_rte-view');\n setTimeout(function () {\n _this.setAutoHeight(iframeElement_1);\n }, 100);\n this.inputElement.style.overflow = 'hidden';\n }\n }\n else {\n this.inputElement.style.overflow = null;\n }\n };\n RichTextEditor.prototype.setAutoHeight = function (element) {\n if (!isNOU(element)) {\n element.style.height = this.inputElement.scrollHeight + 'px';\n element.style.overflow = 'hidden';\n }\n };\n RichTextEditor.prototype.wireEvents = function () {\n this.element.addEventListener('focusin', this.onFocusHandler, true);\n this.element.addEventListener('focusout', this.onBlurHandler, true);\n this.on(events.contentChanged, this.contentChanged, this);\n this.on(events.resizeInitialized, this.updateResizeFlag, this);\n this.on(events.updateTbItemsStatus, this.updateStatus, this);\n if (this.readonly && this.enabled) {\n return;\n }\n this.bindEvents();\n };\n RichTextEditor.prototype.restrict = function (e) {\n if (this.maxLength >= 0) {\n var element = this.editorMode === 'Markdown' ? this.contentModule.getText() :\n (e && e.currentTarget.textContent);\n if (!element) {\n return;\n }\n var array = [8, 16, 17, 37, 38, 39, 40, 46, 65];\n var arrayKey = void 0;\n for (var i = 0; i <= array.length - 1; i++) {\n if (e.which === array[i]) {\n if (e.ctrlKey && e.which === 65) {\n return;\n }\n else if (e.which !== 65) {\n arrayKey = array[i];\n return;\n }\n }\n }\n if ((element.length >= this.maxLength && this.maxLength !== -1) && e.which !== arrayKey) {\n e.preventDefault();\n }\n }\n };\n RichTextEditor.prototype.bindEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.inputElement, {\n keyAction: this.keyDown.bind(this), keyConfigs: __assign({}, this.formatter.keyConfig, this.keyConfig), eventName: 'keydown'\n });\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetHandler, this);\n }\n EventHandler.add(this.inputElement, 'keyup', this.keyUp, this);\n EventHandler.add(this.inputElement, 'paste', this.onPaste, this);\n EventHandler.add(this.inputElement, Browser.touchEndEvent, debounce(this.mouseUp, 30), this);\n EventHandler.add(this.inputElement, Browser.touchStartEvent, this.mouseDownHandler, this);\n this.wireContextEvent();\n this.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown, this);\n this.element.ownerDocument.defaultView.addEventListener('resize', this.onResizeHandler, true);\n if (this.iframeSettings.enable) {\n EventHandler.add(this.inputElement, 'focusin', this.focusHandler, this);\n EventHandler.add(this.inputElement, 'focusout', this.blurHandler, this);\n EventHandler.add(this.inputElement.ownerDocument, 'scroll', this.contentScrollHandler, this);\n EventHandler.add(this.inputElement.ownerDocument, Browser.touchStartEvent, this.onIframeMouseDown, this);\n }\n this.wireScrollElementsEvents();\n };\n RichTextEditor.prototype.onIframeMouseDown = function (e) {\n this.isBlur = false;\n this.currentTarget = e.target;\n this.notify(events.iframeMouseDown, e);\n };\n RichTextEditor.prototype.editorKeyDown = function (e) {\n switch (e.event.action) {\n case 'copy':\n this.onCopy();\n break;\n case 'cut':\n this.onCut();\n break;\n case 'tab':\n if (this.iframeSettings.enable) {\n this.isBlur = true;\n }\n break;\n }\n if (e.callBack && (e.event.action === 'copy' || e.event.action === 'cut' || e.event.action === 'delete')) {\n e.callBack({\n requestType: e.event.action,\n editorMode: 'HTML',\n event: e.event\n });\n }\n };\n RichTextEditor.prototype.unWireEvents = function () {\n this.element.removeEventListener('focusin', this.onFocusHandler, true);\n this.element.removeEventListener('focusout', this.onBlurHandler, true);\n this.off(events.contentChanged, this.contentChanged);\n this.off(events.resizeInitialized, this.updateResizeFlag);\n this.off(events.updateTbItemsStatus, this.updateStatus);\n if (this.readonly && this.enabled) {\n return;\n }\n this.unbindEvents();\n };\n RichTextEditor.prototype.unbindEvents = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetHandler);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.keyUp);\n EventHandler.remove(this.inputElement, 'paste', this.onPaste);\n EventHandler.remove(this.inputElement, Browser.touchEndEvent, debounce(this.mouseUp, 30));\n EventHandler.remove(this.inputElement, Browser.touchStartEvent, this.mouseDownHandler);\n this.unWireContextEvent();\n if (this.formatter) {\n this.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown);\n }\n this.element.ownerDocument.defaultView.removeEventListener('resize', this.onResizeHandler, true);\n if (this.iframeSettings.enable) {\n EventHandler.remove(this.inputElement, 'focusin', this.focusHandler);\n EventHandler.remove(this.inputElement, 'focusout', this.blurHandler);\n EventHandler.remove(this.inputElement.ownerDocument, 'scroll', this.contentScrollHandler);\n EventHandler.remove(this.inputElement.ownerDocument, Browser.touchStartEvent, this.onIframeMouseDown);\n }\n this.unWireScrollElementsEvents();\n };\n __decorate([\n Complex({}, ToolbarSettings)\n ], RichTextEditor.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Complex({}, QuickToolbarSettings)\n ], RichTextEditor.prototype, \"quickToolbarSettings\", void 0);\n __decorate([\n Complex({}, PasteCleanupSettings)\n ], RichTextEditor.prototype, \"pasteCleanupSettings\", void 0);\n __decorate([\n Complex({}, FormatPainterSettings)\n ], RichTextEditor.prototype, \"formatPainterSettings\", void 0);\n __decorate([\n Complex({}, EmojiSettings)\n ], RichTextEditor.prototype, \"emojiPickerSettings\", void 0);\n __decorate([\n Complex({}, IFrameSettings)\n ], RichTextEditor.prototype, \"iframeSettings\", void 0);\n __decorate([\n Complex({}, ImageSettings)\n ], RichTextEditor.prototype, \"insertImageSettings\", void 0);\n __decorate([\n Complex({}, AudioSettings)\n ], RichTextEditor.prototype, \"insertAudioSettings\", void 0);\n __decorate([\n Complex({}, VideoSettings)\n ], RichTextEditor.prototype, \"insertVideoSettings\", void 0);\n __decorate([\n Complex({}, TableSettings)\n ], RichTextEditor.prototype, \"tableSettings\", void 0);\n __decorate([\n Property(0)\n ], RichTextEditor.prototype, \"floatingToolbarOffset\", void 0);\n __decorate([\n Complex({}, InlineMode)\n ], RichTextEditor.prototype, \"inlineMode\", void 0);\n __decorate([\n Complex({}, FileManagerSettings)\n ], RichTextEditor.prototype, \"fileManagerSettings\", void 0);\n __decorate([\n Property('100%')\n ], RichTextEditor.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"showTooltip\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableResize\", void 0);\n __decorate([\n Property({})\n ], RichTextEditor.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"autoSaveOnIdle\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"enabled\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableHtmlEncode\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableXhtml\", void 0);\n __decorate([\n Property('auto')\n ], RichTextEditor.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"value\", void 0);\n __decorate([\n Property('P')\n ], RichTextEditor.prototype, \"enterKey\", void 0);\n __decorate([\n Property('BR')\n ], RichTextEditor.prototype, \"shiftEnterKey\", void 0);\n __decorate([\n Property(30)\n ], RichTextEditor.prototype, \"undoRedoSteps\", void 0);\n __decorate([\n Property(300)\n ], RichTextEditor.prototype, \"undoRedoTimer\", void 0);\n __decorate([\n Property('HTML')\n ], RichTextEditor.prototype, \"editorMode\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"keyConfig\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"showCharCount\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableTabKey\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableAutoUrl\", void 0);\n __decorate([\n Property(-1)\n ], RichTextEditor.prototype, \"maxLength\", void 0);\n __decorate([\n Complex({}, Format)\n ], RichTextEditor.prototype, \"format\", void 0);\n __decorate([\n Complex({}, NumberFormatList)\n ], RichTextEditor.prototype, \"numberFormatList\", void 0);\n __decorate([\n Complex({}, BulletFormatList)\n ], RichTextEditor.prototype, \"bulletFormatList\", void 0);\n __decorate([\n Complex({}, FontFamily)\n ], RichTextEditor.prototype, \"fontFamily\", void 0);\n __decorate([\n Complex({}, FontSize)\n ], RichTextEditor.prototype, \"fontSize\", void 0);\n __decorate([\n Complex({}, FontColor)\n ], RichTextEditor.prototype, \"fontColor\", void 0);\n __decorate([\n Complex({}, BackgroundColor)\n ], RichTextEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(10000)\n ], RichTextEditor.prototype, \"saveInterval\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeDialogOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"dialogOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeDialogClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"dialogClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeQuickToolbarOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"quickToolbarOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"quickToolbarClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarStatusUpdate\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"updatedToolbarStatus\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageSelected\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeImageUpload\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageUploading\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageUploadSuccess\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageUploadFailed\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageRemoving\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"afterImageDelete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"fileSelected\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeFileUpload\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"fileUploading\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"fileUploadSuccess\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"fileUploadFailed\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"fileRemoving\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"afterMediaDelete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeSanitizeHtml\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforePasteCleanup\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"afterPasteCleanup\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeImageDrop\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"formatter\", void 0);\n RichTextEditor = __decorate([\n NotifyPropertyChanges\n ], RichTextEditor);\n return RichTextEditor;\n}(Component));\nexport { RichTextEditor };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, extend, deleteObject, Property, addClass, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {Object} props - Specifies the properties\n * @param {string[]} model - Specifies the model\n * @returns {Object} Component Model\n */\nexport function getModel(props, model) {\n var obj = extend({}, props);\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((model).indexOf(prop) < 0) {\n deleteObject(obj, prop);\n }\n }\n return obj;\n}\n/** @hidden\n * @param {HTMLElement} ul - Specifies the UL element\n * @param {number} keyCode - Specifies the keycode\n * @returns {void}\n */\nexport function upDownKeyHandler(ul, keyCode) {\n var defaultIdx = keyCode === 40 ? 0 : ul.childElementCount - 1;\n var liIdx = defaultIdx;\n var li;\n var selectedLi = ul.querySelector('.e-selected');\n if (selectedLi) {\n selectedLi.classList.remove('e-selected');\n }\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains('e-focused')) {\n li = ul.children[i];\n liIdx = i;\n li.classList.remove('e-focused');\n if (keyCode === 40) {\n liIdx++;\n }\n else {\n liIdx--;\n }\n if (liIdx === (keyCode === 40 ? ul.childElementCount : -1)) {\n liIdx = defaultIdx;\n }\n }\n }\n li = ul.children[liIdx];\n liIdx = isValidLI(ul, li, liIdx, keyCode);\n if (liIdx !== -1) {\n addClass([ul.children[liIdx]], 'e-focused');\n ul.children[liIdx].focus();\n }\n}\n/**\n * Get Valid LI element\n *\n * @param {HTMLElement} ul - Specifies the UL element\n * @param {Element} li - Specifies the LI element\n * @param {number} index - Specifies the index\n * @param {number} keyCode - Specifies the keycode\n * @param {number} count - Specifies the count\n * @returns {number} - Index\n */\nfunction isValidLI(ul, li, index, keyCode, count) {\n if (count === void 0) { count = 0; }\n if (li.classList.contains('e-separator') || li.classList.contains('e-disabled')) {\n if (index === (keyCode === 40 ? ul.childElementCount - 1 : 0)) {\n index = keyCode === 40 ? 0 : ul.childElementCount - 1;\n }\n else {\n if (keyCode === 40) {\n index++;\n }\n else {\n index--;\n }\n }\n }\n li = ul.children[index];\n if (li.classList.contains('e-separator') || li.classList.contains('e-disabled')) {\n count++;\n if (count === ul.childElementCount) {\n return index = -1;\n }\n index = isValidLI(ul, li, index, keyCode, count);\n }\n return index;\n}\n/** @hidden\n * @param {HTMLElement} popup - Specifies the popup element.\n * @returns {void}\n */\nexport function setBlankIconStyle(popup, blankIcon) {\n var blankIconList = [].slice.call(popup.getElementsByClassName('e-blank-icon'));\n if (blankIcon) {\n var menuItem = [].slice.call(popup.getElementsByClassName('e-item'));\n menuItem.forEach(function (li) {\n if (li.style.paddingLeft || li.style.paddingRight) {\n li.removeAttribute('style');\n }\n });\n }\n if (!blankIconList.length) {\n return;\n }\n var iconLi = popup.querySelector('.e-item:not(.e-blank-icon):not(.e-separator)');\n if (isNullOrUndefined(iconLi)) {\n return;\n }\n if (iconLi.classList.contains('e-url')) {\n iconLi = iconLi.querySelector('.e-menu-url');\n }\n var icon = iconLi.querySelector('.e-menu-icon');\n var cssProp;\n var enableRtl = popup.classList.contains('e-rtl');\n if (enableRtl) {\n cssProp = { padding: 'paddingRight', margin: 'marginLeft' };\n }\n else {\n cssProp = { padding: 'paddingLeft', margin: 'marginRight' };\n }\n /* eslint-disable */\n var size = parseInt(getComputedStyle(icon).fontSize, 10) + parseInt((enableRtl ? getComputedStyle(icon)[cssProp.margin] : getComputedStyle(icon)[cssProp.margin]), 10)\n + parseInt(getComputedStyle(iconLi).paddingLeft, 10) + \"px\";\n blankIconList.forEach(function (li) {\n if (li.classList.contains('e-url')) {\n li.querySelector('.e-menu-url').style[cssProp.padding] = size;\n }\n else {\n li.style[cssProp.padding] = size;\n }\n });\n /* eslint-enable */\n}\n/**\n * Defines the items of Split Button/DropDownButton.\n */\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"separator\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"url\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"disabled\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Event, NotifyPropertyChanges, detach, Property, EventHandler, isRippleEnabled } from '@syncfusion/ej2-base';\nimport { addClass, getUniqueID, rippleEffect, getComponent } from '@syncfusion/ej2-base';\nimport { attributes, Component, closest, select, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { classList, removeClass } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { upDownKeyHandler } from './../common/common';\nimport { getModel, Item, setBlankIconStyle } from './../common/common';\nvar classNames = {\n DISABLED: 'e-disabled',\n FOCUS: 'e-focused',\n ICON: 'e-menu-icon',\n ITEM: 'e-item',\n POPUP: 'e-dropdown-popup',\n RTL: 'e-rtl',\n SEPARATOR: 'e-separator',\n VERTICAL: 'e-vertical'\n};\n/**\n * DropDownButton component is used to toggle contextual overlays for displaying list of action items.\n * It can contain both text and images.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DropDownButton = /** @class */ (function (_super) {\n __extends(DropDownButton, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DropDownButtonModel} options - Specifies dropdown button model\n * @param {string|HTMLButtonElement} element - Specifies element\n * @hidden\n */\n function DropDownButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isPopupCreated = true;\n return _this;\n }\n DropDownButton.prototype.preRender = function () {\n /** */\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n DropDownButton.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n *\n * @returns {void}\n */\n DropDownButton.prototype.toggle = function () {\n if (this.canOpen()) {\n this.openPopUp();\n }\n else if (this.createPopupOnClick && !this.isPopupCreated) {\n this.createPopup();\n this.openPopUp();\n }\n else {\n this.closePopup();\n }\n };\n /**\n * Initialize the Component rendering\n *\n * @returns {void}\n * @private\n */\n DropDownButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n this.renderComplete();\n };\n /**\n * Adds a new item to the menu. By default, new item appends to the list as the last item,\n * but you can insert based on the text parameter.\n *\n * @param { ItemModel[] } items - Specifies an array of JSON data.\n * @param { string } text - Specifies the text to insert the newly added item in the menu.\n * @returns {void}.\n */\n DropDownButton.prototype.addItems = function (items, text) {\n var newItem;\n var idx = this.items.length;\n for (var j = 0, len = this.items.length; j < len; j++) {\n if (text === this.items[j].text) {\n idx = j;\n break;\n }\n }\n for (var i = items.length - 1; i >= 0; i--) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newItem = new Item(this, 'items', items[i], true);\n this.items.splice(idx, 0, newItem);\n }\n if (!this.canOpen()) {\n this.createItems();\n }\n };\n /**\n * Removes the items from the menu.\n *\n * @param { string[] } items - Specifies an array of string to remove the items.\n * @param { string } isUniqueId - Set `true` if specified items is a collection of unique id.\n * @returns {void}.\n */\n DropDownButton.prototype.removeItems = function (items, isUniqueId) {\n var refresh = false;\n for (var i = 0, len = items.length; i < len; i++) {\n for (var j = 0, len_1 = this.items.length; j < len_1; j++) {\n if (items[i] === (isUniqueId ? this.items[j].id : this.items[j].text)) {\n this.items.splice(j, 1);\n refresh = true;\n break;\n }\n }\n }\n if (refresh && this.getULElement()) {\n this.createItems();\n }\n };\n DropDownButton.prototype.createPopup = function () {\n var _a;\n var div = this.createElement('div', {\n className: classNames.POPUP,\n id: this.element.id + '-popup'\n });\n document.body.appendChild(div);\n this.dropDown = new Popup(div, {\n relateTo: this.element,\n collision: { X: 'fit', Y: 'flip' },\n position: { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n content: this.target ? this.getTargetElement() : '',\n enableRtl: this.enableRtl\n });\n if (this.dropDown.element.style.position === 'fixed') {\n this.dropDown.refreshPosition(this.element);\n }\n this.dropDown.hide();\n attributes(this.element, (_a = {},\n _a['aria-haspopup'] = this.items.length || this.target ? 'true' : 'false',\n _a['aria-expanded'] = 'false',\n _a['type'] = 'button',\n _a['aria-label'] = this.element.textContent ? this.element.textContent : 'dropdownbutton',\n _a));\n if (this.cssClass) {\n addClass([div], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n this.isPopupCreated = true;\n };\n DropDownButton.prototype.getTargetElement = function () {\n return typeof (this.target) === 'string' ? select(this.target) : this.target;\n };\n DropDownButton.prototype.createItems = function (appendItems) {\n var items = this.items;\n var showIcon = this.hasIcon(this.items, 'iconCss');\n var span;\n var item;\n var li;\n var eventArgs;\n var ul = this.getULElement();\n if (ul) {\n ul.innerHTML = '';\n }\n else {\n ul = this.createElement('ul', {\n attrs: { 'role': 'menu', 'tabindex': '0' }\n });\n }\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n var tempItem = item.text;\n li = this.createElement('li', {\n innerHTML: item.url ? '' : tempItem,\n className: item.separator ? classNames.ITEM + ' ' + classNames.SEPARATOR : classNames.ITEM,\n attrs: item.separator ? { 'role': 'separator', 'tabindex': '-1' } : { 'role': 'menuitem', 'tabindex': '-1', 'aria-label': tempItem },\n id: item.id ? item.id : getUniqueID('e-' + this.getModuleName() + '-item')\n });\n if (this.enableHtmlSanitizer) {\n li.textContent = item.url ? '' : tempItem;\n }\n else {\n li.innerHTML = item.url ? '' : tempItem;\n }\n if (item.url) {\n li.appendChild(this.createAnchor(item));\n li.classList.add('e-url');\n }\n if (item.iconCss) {\n span = this.createElement('span', { className: classNames.ICON + ' ' + item.iconCss });\n if (item.url) {\n li.childNodes[0].appendChild(span);\n }\n else {\n li.insertBefore(span, li.childNodes[0]);\n }\n }\n else {\n if (showIcon && !item.separator) {\n li.classList.add('e-blank-icon');\n }\n }\n if (item.disabled) {\n li.classList.add('e-disabled');\n }\n eventArgs = { item: item, element: li };\n this.trigger('beforeItemRender', eventArgs);\n ul.appendChild(li);\n }\n if (appendItems) {\n this.getPopUpElement().appendChild(ul);\n }\n if (showIcon) {\n setBlankIconStyle(this.getPopUpElement());\n }\n };\n DropDownButton.prototype.hasIcon = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][\"\" + field]) {\n return true;\n }\n }\n return false;\n };\n DropDownButton.prototype.createAnchor = function (item) {\n var tempItem = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(item.text) : item.text;\n return this.createElement('a', { className: 'e-menu-text e-menu-url', innerHTML: tempItem, attrs: { 'href': item.url } });\n };\n DropDownButton.prototype.initialize = function () {\n this.button = new Button({\n iconCss: this.iconCss, iconPosition: this.iconPosition, cssClass: this.cssClass, content: this.content,\n disabled: this.disabled, enableRtl: this.enableRtl, enablePersistence: this.enablePersistence\n });\n this.button.createElement = this.createElement;\n this.button.appendTo(this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n this.appendArrowSpan();\n this.setActiveElem([this.element]);\n if ((this.target && !this.isColorPicker()) || !this.createPopupOnClick) {\n this.createPopup();\n }\n else {\n this.isPopupCreated = false;\n }\n };\n DropDownButton.prototype.isColorPicker = function () {\n if (!this.element) {\n return false;\n }\n var prevElem = this.element.previousSibling;\n if (prevElem && prevElem.classList && prevElem.classList.contains('e-split-colorpicker')) {\n return true;\n }\n return false;\n };\n DropDownButton.prototype.appendArrowSpan = function () {\n this.element.appendChild(this.createElement('span', {\n className: 'e-btn-icon e-icons ' + 'e-icon-' + (this.cssClass.indexOf(classNames.VERTICAL) > -1\n ? 'bottom' : 'right') + ' e-caret'\n }));\n };\n DropDownButton.prototype.setActiveElem = function (elem) {\n this.activeElem = elem;\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n DropDownButton.prototype.getModuleName = function () {\n return 'dropdown-btn';\n };\n DropDownButton.prototype.canOpen = function () {\n var val = false;\n if (this.isPopupCreated) {\n val = this.getPopUpElement().classList.contains('e-popup-close');\n }\n return val;\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n DropDownButton.prototype.destroy = function () {\n var _this = this;\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'dropdown-btn') {\n var classList_1;\n if (this.element.querySelector('span.e-caret')) {\n detach(this.element.querySelector('span.e-caret'));\n }\n if (this.cssClass) {\n classList_1 = this.cssClass.split(' ');\n }\n this.button.destroy();\n if (classList_1) {\n removeClass([this.element], classList_1);\n }\n removeClass(this.activeElem, ['e-active']);\n var attrList = this.element.getAttribute('class') ? ['aria-haspopup', 'aria-expanded', 'aria-owns', 'type']\n : ['aria-haspopup', 'aria-expanded', 'aria-owns', 'type', 'class'];\n attrList.forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.popupUnWireEvents();\n this.destroyPopup();\n this.isPopupCreated = false;\n if (!this.disabled) {\n this.unWireEvents();\n }\n }\n };\n DropDownButton.prototype.destroyPopup = function () {\n if (this.isPopupCreated) {\n this.dropDown.destroy();\n if (this.getPopUpElement()) {\n var popupEle = document.getElementById(this.getPopUpElement().id);\n if (popupEle) {\n removeClass([popupEle], ['e-popup-open', 'e-popup-close']);\n detach(popupEle);\n }\n }\n EventHandler.remove(this.getPopUpElement(), 'click', this.clickHandler);\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n if (this.isPopupCreated && this.dropDown) {\n this.dropDown.element = null;\n this.dropDown = undefined;\n }\n }\n this.isPopupCreated = false;\n };\n DropDownButton.prototype.getPopUpElement = function () {\n var val = null;\n if (!this.dropDown && this.activeElem[0].classList.contains('e-split-btn')) {\n var dropDownBtn = getComponent(this.activeElem[1], 'dropdown-btn');\n if (dropDownBtn) {\n this.dropDown = dropDownBtn.dropDown;\n }\n }\n if (this.dropDown) {\n val = this.dropDown.element;\n }\n return val;\n };\n DropDownButton.prototype.getULElement = function () {\n var val = null;\n if (this.getPopUpElement()) {\n val = this.getPopUpElement().children[0];\n }\n return val;\n };\n DropDownButton.prototype.wireEvents = function () {\n this.delegateMousedownHandler = this.mousedownHandler.bind(this);\n if (!this.createPopupOnClick) {\n EventHandler.add(document, 'mousedown touchstart', this.delegateMousedownHandler, this);\n }\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n };\n DropDownButton.prototype.popupWireEvents = function () {\n if (!this.delegateMousedownHandler) {\n this.delegateMousedownHandler = this.mousedownHandler.bind(this);\n }\n var popupElement = this.getPopUpElement();\n if (this.createPopupOnClick) {\n EventHandler.add(document, 'mousedown touchstart', this.delegateMousedownHandler, this);\n }\n if (popupElement) {\n EventHandler.add(popupElement, 'click', this.clickHandler, this);\n EventHandler.add(popupElement, 'keydown', this.keyBoardHandler, this);\n if (this.closeActionEvents) {\n EventHandler.add(popupElement, this.closeActionEvents, this.focusoutHandler, this);\n }\n }\n this.rippleFn = rippleEffect(popupElement, { selector: '.' + classNames.ITEM });\n };\n DropDownButton.prototype.popupUnWireEvents = function () {\n var popupElement = this.getPopUpElement();\n if (this.createPopupOnClick) {\n EventHandler.remove(document, 'mousedown touchstart', this.delegateMousedownHandler);\n }\n if (popupElement && popupElement.parentElement) {\n EventHandler.remove(popupElement, 'click', this.clickHandler);\n EventHandler.remove(popupElement, 'keydown', this.keyBoardHandler);\n if (this.closeActionEvents) {\n EventHandler.remove(popupElement, this.closeActionEvents, this.focusoutHandler);\n }\n }\n if (isRippleEnabled && this.rippleFn) {\n this.rippleFn();\n }\n };\n /**\n * Handles the keyboard interactions.\n *\n * @param {KeyboardEventArgs} e - Specifies keyboard event args.\n * @returns {void}\n * @hidden\n */\n DropDownButton.prototype.keyBoardHandler = function (e) {\n if (e.target === this.element && (e.keyCode === 9 || (!e.altKey && e.keyCode === 40) || e.keyCode === 38)) {\n return;\n }\n switch (e.keyCode) {\n case 38:\n case 40:\n if (e.altKey && (e.keyCode === 38 || e.keyCode === 40)) {\n this.keyEventHandler(e);\n }\n else {\n this.upDownKeyHandler(e);\n }\n break;\n case 9:\n case 13:\n case 27:\n case 32:\n this.keyEventHandler(e);\n break;\n }\n };\n DropDownButton.prototype.upDownKeyHandler = function (e) {\n if (this.target && (e.keyCode === 38 || e.keyCode === 40)) {\n return;\n }\n e.preventDefault();\n upDownKeyHandler(this.getULElement(), e.keyCode);\n };\n DropDownButton.prototype.keyEventHandler = function (e) {\n if (this.target && (e.keyCode === 13 || e.keyCode === 9)) {\n return;\n }\n if (e.keyCode === 13 && this.activeElem[0].classList.contains('e-split-btn')) {\n this.activeElem[0].focus();\n return;\n }\n if (e.target && e.target.className.indexOf('e-edit-template') > -1 && e.keyCode === 32) {\n return;\n }\n if (e.keyCode !== 9) {\n e.preventDefault();\n }\n if (e.keyCode === 27 || e.keyCode === 38 || e.keyCode === 9) {\n if (!this.canOpen()) {\n this.closePopup(e, this.element);\n }\n }\n else {\n this.clickHandler(e);\n }\n };\n DropDownButton.prototype.getLI = function (elem) {\n return elem.tagName === 'LI' ? elem : closest(elem, 'li');\n };\n DropDownButton.prototype.mousedownHandler = function (e) {\n var trgt = e.target;\n if (this.dropDown && !this.canOpen() && !(closest(trgt, '[id=\"' + this.getPopUpElement().id + '\"]')\n || closest(trgt, '[id=\"' + this.element.id + '\"]'))) {\n this.closePopup(e);\n }\n };\n DropDownButton.prototype.focusoutHandler = function (e) {\n if (this.isPopupCreated && !this.canOpen()) {\n var liTarget = e.relatedTarget;\n if (liTarget && liTarget.className.indexOf('e-item') > -1) {\n var li = this.getLI(liTarget);\n if (li) {\n var liIdx = Array.prototype.indexOf.call(this.getULElement().children, li);\n var item = this.items[liIdx];\n if (item) {\n var selectEventArgs = { element: li, item: item };\n this.trigger('select', selectEventArgs);\n }\n }\n }\n this.closePopup(e);\n }\n };\n DropDownButton.prototype.clickHandler = function (e) {\n var trgt = e.target;\n if (closest(trgt, '[id=\"' + this.element.id + '\"]')) {\n if (!this.createPopupOnClick || (this.target && this.target !== '' && !this.isColorPicker())) {\n if (this.getPopUpElement().classList.contains('e-popup-close')) {\n this.openPopUp(e);\n }\n else {\n this.closePopup(e);\n }\n }\n else if (this.isPopupCreated) {\n this.closePopup(e, this.activeElem[0]);\n }\n else {\n this.createPopup();\n this.openPopUp(e);\n }\n }\n else {\n if (closest(trgt, '[id=\"' + this.getPopUpElement().id + '\"]')) {\n var eventArgs = void 0;\n var liIdx = void 0;\n var item = void 0;\n var li = this.getLI(trgt);\n if (li) {\n liIdx = Array.prototype.indexOf.call(this.getULElement().children, li);\n item = this.items[liIdx];\n if (item) {\n eventArgs = { element: li, item: item };\n this.trigger('select', eventArgs);\n }\n this.closePopup(e, this.activeElem[0]);\n }\n }\n }\n };\n DropDownButton.prototype.openPopUp = function (e) {\n var _this = this;\n if (e === void 0) { e = null; }\n var isReact = false;\n var popupElem = this.getPopUpElement();\n if (!this.target) {\n this.createItems(true);\n }\n else {\n if (this.activeElem.length > 1) {\n var splitButton = getComponent(this.activeElem[0], 'split-btn');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (splitButton.isReact && popupElem.childNodes.length < 1) {\n isReact = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n splitButton.appendReactElement(this.getTargetElement(), this.getPopUpElement());\n this.renderReactTemplates();\n }\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact && popupElem.childNodes.length < 1) {\n isReact = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.appendReactElement(this.getTargetElement(), this.getPopUpElement());\n this.renderReactTemplates();\n }\n }\n }\n var ul = this.getULElement();\n this.popupWireEvents();\n var beforeOpenArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n var ul_1 = _this.getULElement();\n _this.dropDown.show(null, _this.element);\n addClass([_this.element], 'e-active');\n _this.element.setAttribute('aria-expanded', 'true');\n _this.element.setAttribute('aria-owns', _this.getPopUpElement().id);\n if (ul_1) {\n ul_1.focus();\n }\n if (_this.enableRtl && ul_1.parentElement.style.left !== '0px') {\n var wrapperWidth = void 0;\n if (_this.element.parentElement && _this.element.parentElement.classList.contains('e-split-btn-wrapper')) {\n wrapperWidth = _this.element.parentElement.offsetWidth;\n }\n else {\n wrapperWidth = _this.element.offsetWidth;\n }\n var popupRect = ul_1.parentElement.offsetWidth - wrapperWidth;\n var popupLeft = parseFloat(ul_1.parentElement.style.left) - popupRect;\n if (popupLeft < 0) {\n popupLeft = 0;\n }\n ul_1.parentElement.style.left = popupLeft + \"px\";\n }\n var openArgs = { element: ul_1, items: _this.items };\n _this.trigger('open', openArgs);\n }\n });\n };\n DropDownButton.prototype.closePopup = function (e, focusEle) {\n var _this = this;\n if (e === void 0) { e = null; }\n var ul = this.getULElement();\n var beforeCloseArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n var popupElement = _this.getPopUpElement();\n if (popupElement) {\n EventHandler.remove(popupElement, 'keydown', _this.keyBoardHandler);\n }\n _this.popupUnWireEvents();\n var ul_2 = _this.getULElement();\n var selectedLi = void 0;\n if (ul_2) {\n selectedLi = ul_2.querySelector('.e-selected');\n }\n if (selectedLi) {\n selectedLi.classList.remove('e-selected');\n }\n _this.dropDown.hide();\n removeClass(_this.activeElem, 'e-active');\n _this.element.setAttribute('aria-expanded', 'false');\n _this.element.removeAttribute('aria-owns');\n if (focusEle) {\n focusEle.focus();\n }\n var closeArgs = { element: ul_2, items: _this.items };\n _this.trigger('close', closeArgs);\n if (!_this.target && ul_2) {\n detach(ul_2);\n }\n if (!_this.target || _this.isColorPicker()) {\n if (_this.createPopupOnClick) {\n _this.destroyPopup();\n }\n }\n }\n else {\n if (ul) {\n ul.focus();\n }\n }\n });\n };\n DropDownButton.prototype.unWireEvents = function () {\n if (!this.createPopupOnClick) {\n EventHandler.remove(document, 'mousedown touchstart', this.delegateMousedownHandler);\n }\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n if (this.isPopupCreated) {\n EventHandler.remove(this.getPopUpElement(), 'click', this.clickHandler);\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DropDownButtonModel} newProp - Specifies new properties\n * @param {DropDownButtonModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n DropDownButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var btnModel = ['content', 'cssClass', 'iconCss', 'iconPosition', 'disabled', 'enableRtl'];\n this.button.setProperties(getModel(newProp, btnModel));\n var popupElement;\n if (this.isPopupCreated) {\n popupElement = this.getPopUpElement();\n this.dropDown.setProperties(getModel(newProp, ['enableRtl']));\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!this.element.querySelector('span.e-caret')) {\n this.appendArrowSpan();\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.unWireEvents();\n if (this.isPopupCreated && !this.canOpen()) {\n this.closePopup();\n }\n }\n else {\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (newProp.cssClass.indexOf(classNames.VERTICAL) > -1 || oldProp.cssClass.indexOf(classNames.VERTICAL) > -1) {\n if (!this.element.querySelector('span.e-caret')) {\n this.appendArrowSpan();\n }\n var arrowSpan = this.element.querySelector('span.e-caret');\n newProp.cssClass.indexOf(classNames.VERTICAL) > -1 ? classList(arrowSpan, ['e-icon-bottom'], ['e-icon-right'])\n : classList(arrowSpan, ['e-icon-right'], ['e-icon-bottom']);\n }\n if (this.isPopupCreated) {\n if (oldProp.cssClass) {\n removeClass([popupElement], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([popupElement], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n }\n break;\n case 'target':\n this.dropDown.content = this.getTargetElement();\n this.dropDown.dataBind();\n break;\n case 'items':\n if (this.isPopupCreated && this.getULElement()) {\n this.createItems();\n }\n break;\n case 'createPopupOnClick':\n if (newProp.createPopupOnClick) {\n this.destroyPopup();\n }\n else {\n this.createPopup();\n }\n break;\n }\n }\n };\n /**\n * Sets the focus to DropDownButton\n * its native method\n *\n * @public\n * @returns {void}\n */\n DropDownButton.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DropDownButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], DropDownButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Property(false)\n ], DropDownButton.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Collection([], Item)\n ], DropDownButton.prototype, \"items\", void 0);\n __decorate([\n Property(false)\n ], DropDownButton.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"created\", void 0);\n DropDownButton = __decorate([\n NotifyPropertyChanges\n ], DropDownButton);\n return DropDownButton;\n}(Component));\nexport { DropDownButton };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? 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// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { Event, remove, addClass, removeClass, detach, getValue, setValue } from '@syncfusion/ej2-base';\nimport { EventHandler, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { attributes, getUniqueID, getInstance, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getModel, Item } from './../common/common';\nimport { DropDownButton } from '../drop-down-button/drop-down-button';\nvar RTL = 'e-rtl';\nvar TAGNAME = 'EJS-SPLITBUTTON';\n/**\n * SplitButton component has primary and secondary button. Primary button is used to select\n * default action and secondary button is used to toggle contextual overlays for displaying list of\n * action items. It can contain both text and images.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar SplitButton = /** @class */ (function (_super) {\n __extends(SplitButton, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {SplitButtonModel} options - Specifies the splitbutton model\n * @param {string|HTMLButtonElement} element - Specifies the element\n * @hidden\n */\n function SplitButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize Angular support.\n *\n * @private\n * @returns {void}\n */\n SplitButton.prototype.preRender = function () {\n var ele = this.element;\n if (ele.tagName === TAGNAME) {\n var ejInstance = getValue('ej2_instances', ele);\n var btn = this.createElement('button', { attrs: { 'type': 'button' } });\n var wrapper = this.createElement(TAGNAME, { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n btn.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = btn;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.wrapper = wrapper;\n this.element = ele;\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the Component rendering.\n *\n * @returns {void}\n * @private\n */\n SplitButton.prototype.render = function () {\n this.initWrapper();\n this.createPrimaryButton();\n this.renderControl();\n };\n SplitButton.prototype.renderControl = function () {\n this.createSecondaryButton();\n this.setActiveElem([this.element, this.secondaryBtnObj.element]);\n this.setAria();\n this.wireEvents();\n this.renderComplete();\n };\n /**\n * Adds a new item to the menu. By default, new item appends to the list as the last item,\n * but you can insert based on the text parameter.\n *\n * @param { ItemModel[] } items - Specifies an array of JSON data.\n * @param { string } text - Specifies the text to insert the newly added item in the menu.\n * @returns {void}.\n */\n SplitButton.prototype.addItems = function (items, text) {\n _super.prototype.addItems.call(this, items, text);\n this.secondaryBtnObj.items = this.items;\n };\n /**\n * Removes the items from the menu.\n *\n * @param { string[] } items - Specifies an array of string to remove the items.\n * @param { string } isUniqueId - Set `true` if specified items is a collection of unique id.\n * @returns {void}.\n */\n SplitButton.prototype.removeItems = function (items, isUniqueId) {\n _super.prototype.removeItems.call(this, items, isUniqueId);\n this.secondaryBtnObj.items = this.items;\n };\n SplitButton.prototype.initWrapper = function () {\n if (!this.wrapper) {\n this.wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(this.wrapper, this.element);\n }\n this.element.classList.remove('e-' + this.getModuleName());\n if (this.enableRtl) {\n this.wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([this.wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n };\n SplitButton.prototype.createPrimaryButton = function () {\n var btnModel = {\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n iconCss: this.iconCss,\n iconPosition: this.iconPosition,\n content: this.content,\n disabled: this.disabled\n };\n this.primaryBtnObj = new Button(btnModel);\n this.primaryBtnObj.createElement = this.createElement;\n this.primaryBtnObj.appendTo(this.element);\n this.element.classList.add('e-' + this.getModuleName());\n this.element.type = 'button';\n this.wrapper.appendChild(this.element);\n };\n SplitButton.prototype.createSecondaryButton = function () {\n var _this = this;\n var btnElem = this.createElement('button', {\n className: 'e-icon-btn',\n attrs: { 'tabindex': '-1' },\n id: this.element.id + '_dropdownbtn'\n });\n this.wrapper.appendChild(btnElem);\n var dropDownBtnModel = {\n cssClass: this.cssClass,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n items: this.items,\n target: this.target,\n createPopupOnClick: this.createPopupOnClick\n };\n dropDownBtnModel.beforeItemRender = function (args) {\n if (_this.createPopupOnClick) {\n _this.secondaryBtnObj.dropDown.relateTo = _this.wrapper;\n _this.dropDown = _this.secondaryBtnObj.dropDown;\n }\n _this.trigger('beforeItemRender', args);\n };\n dropDownBtnModel.open = function (args) {\n _this.trigger('open', args);\n };\n dropDownBtnModel.close = function (args) {\n _this.trigger('close', args);\n };\n dropDownBtnModel.select = function (args) {\n _this.trigger('select', args);\n };\n dropDownBtnModel.beforeOpen = function (args) {\n if (_this.createPopupOnClick && _this.items.length == 0) {\n _this.secondaryBtnObj.dropDown.relateTo = _this.wrapper;\n _this.dropDown = _this.secondaryBtnObj.dropDown;\n }\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observedArgs) {\n callBackPromise.resolve(observedArgs);\n });\n return callBackPromise;\n };\n dropDownBtnModel.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeClose', args, function (observedArgs) {\n callBackPromise.resolve(observedArgs);\n });\n return callBackPromise;\n };\n this.secondaryBtnObj = new DropDownButton(dropDownBtnModel);\n this.secondaryBtnObj.createElement = this.createElement;\n this.secondaryBtnObj.appendTo(btnElem);\n if (!this.createPopupOnClick) {\n this.secondaryBtnObj.dropDown.relateTo = this.wrapper;\n this.dropDown = this.secondaryBtnObj.dropDown;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.isPopupCreated = this.secondaryBtnObj.isPopupCreated;\n this.secondaryBtnObj.activeElem = [this.element, this.secondaryBtnObj.element];\n this.secondaryBtnObj.element.querySelector('.e-btn-icon').classList.remove('e-icon-right');\n if (this.disabled) {\n this.wrapper.classList.add('e-splitbtn-disabled');\n }\n };\n SplitButton.prototype.setAria = function () {\n attributes(this.element, {\n 'aria-expanded': 'false', 'aria-haspopup': 'true',\n 'aria-label': this.element.textContent + ' splitbutton', 'aria-owns': this.element.id + '_dropdownbtn-popup'\n });\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n SplitButton.prototype.getModuleName = function () {\n return 'split-btn';\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n *\n * @returns {void}\n */\n SplitButton.prototype.toggle = function () {\n this.secondaryBtnObj.toggle();\n };\n SplitButton.prototype.destroy = function () {\n var _this = this;\n var classList = [RTL];\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n if (this.element) {\n var element = document.getElementById(this.element.id);\n if (element && element.parentElement === this.wrapper) {\n if (this.wrapper.tagName === TAGNAME) {\n this.wrapper.innerHTML = '';\n removeClass([this.wrapper], ['e-rtl', 'e-' + this.getModuleName() + '-wrapper']);\n removeClass([this.wrapper], this.cssClass.split(' '));\n }\n else {\n removeClass([this.element], classList);\n ['aria-label', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.wrapper.parentNode.insertBefore(this.element, this.wrapper);\n remove(this.wrapper);\n }\n this.unWireEvents();\n }\n }\n this.primaryBtnObj.destroy();\n this.secondaryBtnObj.destroy();\n _super.prototype.destroy.call(this);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n };\n SplitButton.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.primaryBtnClickHandler, this);\n new KeyboardEvents(this.element, {\n keyAction: this.btnKeyBoardHandler.bind(this),\n keyConfigs: {\n altdownarrow: 'alt+downarrow',\n enter: 'enter'\n }\n });\n };\n SplitButton.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.primaryBtnClickHandler);\n getInstance(this.element, KeyboardEvents).destroy();\n };\n SplitButton.prototype.primaryBtnClickHandler = function () {\n this.trigger('click', { element: this.element });\n };\n SplitButton.prototype.btnKeyBoardHandler = function (e) {\n switch (e.action) {\n case 'altdownarrow':\n this.clickHandler(e);\n break;\n case 'enter':\n this.clickHandler(e);\n if (this.getPopUpElement() && !this.getPopUpElement().classList.contains('e-popup-close')) {\n this.element.classList.remove('e-active');\n this.secondaryBtnObj.element.classList.add('e-active');\n }\n else {\n this.secondaryBtnObj.element.classList.remove('e-active');\n }\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {SplitButtonModel} newProp - Specifies new properties\n * @param {SplitButtonModel} oldProp - Specifies old properties\n * @returns {void}\n */\n SplitButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var model = ['content', 'iconCss', 'iconPosition', 'cssClass', 'disabled', 'enableRtl'];\n this.primaryBtnObj.setProperties(getModel(newProp, model));\n model = ['beforeOpen', 'beforeItemRender', 'select', 'open',\n 'close', 'cssClass', 'disabled', 'enableRtl', 'createPopupOnClick'];\n if (Object.keys(newProp).indexOf('items') > -1) {\n this.secondaryBtnObj.items = newProp.items;\n this.secondaryBtnObj.dataBind();\n }\n this.secondaryBtnObj.setProperties(getModel(newProp, model));\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.wrapper], oldProp.cssClass.split(' '));\n }\n addClass([this.wrapper], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.wrapper], RTL);\n }\n else {\n removeClass([this.wrapper], RTL);\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n addClass([this.wrapper], 'e-splitbtn-disabled');\n }\n else {\n removeClass([this.wrapper], 'e-splitbtn-disabled');\n }\n }\n }\n };\n /**\n * Sets the focus to SplitButton\n * its native method\n *\n * @public\n * @returns {void}\n */\n SplitButton.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Property('')\n ], SplitButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], SplitButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Collection([], Item)\n ], SplitButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"created\", void 0);\n SplitButton = __decorate([\n NotifyPropertyChanges\n ], SplitButton);\n return SplitButton;\n}(DropDownButton));\nexport { SplitButton };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser, SanitizeHtmlHelper, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport { Tooltip, getZindexPartial } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the color track data in slider.\n * {% codeBlock src='slider/colorrange/index.md' %}{% endcodeBlock %}\n */\nvar ColorRangeData = /** @class */ (function (_super) {\n __extends(ColorRangeData, _super);\n function ColorRangeData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"end\", void 0);\n return ColorRangeData;\n}(ChildProperty));\nexport { ColorRangeData };\n/**\n * It illustrates the limit data in slider.\n * {% codeBlock src='slider/limits/index.md' %}{% endcodeBlock %}\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar bootstrap4TooltipOffset = 3;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHorizantalColor: 'e-slider-horizantal-color',\n sliderVerticalColor: 'e-slider-vertical-color',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n _this.isDragComplete = false;\n _this.initialTooltip = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n // eslint-disable-next-line\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.formChecker();\n };\n Slider.prototype.formChecker = function () {\n var formElement = closest(this.element, 'form');\n if (formElement) {\n this.isForm = true;\n // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n if (!isNullOrUndefined(this.formResetValue)) {\n this.setProperties({ 'value': this.formResetValue }, true);\n }\n this.formResetValue = this.value;\n if (this.type === 'Range' &&\n (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n else if (isNullOrUndefined(this.formResetValue)) {\n this.formResetValue = parseFloat(formatUnit(this.min));\n }\n this.formElement = formElement;\n }\n else {\n this.isForm = false;\n }\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n */\n Slider.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n this.renderComplete();\n if (this.element.tagName === 'EJS-SLIDER') {\n if (this.getTheme(this.sliderContainer) == 'none') {\n setTimeout(function () {\n _this.refresh();\n }, 0);\n }\n }\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width) && !isNullOrUndefined(this.sliderContainer)) {\n if (typeof width === 'number') {\n this.sliderContainer.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.sliderContainer.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.add(classNames.sliderDisabled);\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.remove(classNames.sliderDisabled);\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n *\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.setElementWidth(this.width);\n this.element.tabIndex = -1;\n this.getThemeInitialization();\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.getThemeInitialization = function () {\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material'\n || this.getTheme(this.sliderContainer) === 'material-dark';\n this.isMaterial3 = this.getTheme(this.sliderContainer) === 'Material3'\n || this.getTheme(this.sliderContainer) === 'Material3-dark';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap'\n || this.getTheme(this.sliderContainer) === 'bootstrap-dark';\n this.isBootstrap4 = this.getTheme(this.sliderContainer) === 'bootstrap4';\n this.isTailwind = this.getTheme(this.sliderContainer) === 'tailwind' || this.getTheme(this.sliderContainer) === 'tailwind-dark';\n this.isBootstrap5 = this.getTheme(this.sliderContainer) === 'bootstrap5';\n this.isFluent = this.getTheme(this.sliderContainer) === 'FluentUI';\n this.isMaterialTooltip = (this.isMaterial || this.isMaterial3) && this.type !== 'Range' && this.tooltip.isVisible;\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0', 'aria-label': 'slider'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0', 'aria-label': 'slider'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterialTooltip) {\n this.materialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.materialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n if (this.type !== 'Range') {\n this.firstHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.isMaterialTooltip) {\n this.materialHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.tooltipElement) {\n this.tooltipElement.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n if (e.propertyName !== 'transform') {\n this.handleStart();\n if (!this.enableAnimation) {\n this.getHandle().style.transition = 'none';\n }\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if ((this.isMaterial || this.isMaterial3) && this.tooltip.isVisible && this.type === 'Default') {\n this.tooltipElement.style.transition = this.transition.handle;\n }\n this.tooltipToggle(this.getHandle());\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n this.focusSliderElement();\n this.sliderBarClick(e);\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n this.firstHandle.classList.add(classNames.sliderTabHandle);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n this.secondHandle.classList.add(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipToggle(e.currentTarget);\n }\n if (this.type === 'Default') {\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeTooltip();\n }\n };\n Slider.prototype.setHandler = function () {\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n this.setBarColor();\n };\n Slider.prototype.tooltipValue = function () {\n var _this = this;\n var text;\n var args = {\n value: this.value,\n text: ''\n };\n if (this.initialTooltip) {\n this.initialTooltip = false;\n this.setTooltipContent();\n args.text = text = (typeof (this.tooltipObj.content) === 'function' ? this.tooltipObj.content() : this.tooltipObj.content);\n this.trigger('tooltipChange', args, function (observedArgs) {\n _this.addTooltipClass(observedArgs.text);\n if (text !== observedArgs.text) {\n _this.customAriaText = observedArgs.text;\n if (_this.enableHtmlSanitizer) {\n observedArgs.text = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n observedArgs.text = observedArgs.text.toString();\n }\n var contentTemp = function () {\n return observedArgs.text;\n };\n _this.tooltipObj.content = initializeCSPTemplate(contentTemp);\n _this.setAriaAttrValue(_this.firstHandle);\n if (_this.type === 'Range') {\n _this.setAriaAttrValue(_this.secondHandle);\n }\n }\n });\n if (this.isMaterialTooltip) {\n this.setPreviousVal('change', this.value);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n content = this.formatContent(this.tooltipFormatInfo, false);\n var contentTemp = function () {\n return content;\n };\n this.tooltipObj.content = initializeCSPTemplate(contentTemp);\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n if (this.isMaterialTooltip) {\n var count = content.toString().length;\n if (!this.tooltipElement) {\n var cssClass = count > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n this.tooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n var cssClass = count > 4 ?\n { oldCss: classNames.sliderMaterialDefault, newCss: classNames.sliderMaterialRange } :\n { oldCss: classNames.sliderMaterialRange, newCss: classNames.sliderMaterialDefault };\n this.tooltipElement.classList.remove(cssClass.oldCss);\n if (!this.tooltipElement.classList.contains(cssClass.newCss)) {\n this.tooltipElement.classList.add(cssClass.newCss);\n this.tooltipElement.style.transform = count > 4 ? 'scale(1)' :\n this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n return this.orientation === 'Horizontal' ? (this.tooltip.placement === 'Before' ? 'TopCenter' : 'BottomCenter') :\n (this.tooltip.placement === 'Before' ? 'LeftCenter' : 'RightCenter');\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n this.tooltipElement = args.element;\n if (this.tooltip.cssClass) {\n addClass([this.tooltipElement], this.tooltip.cssClass.split(' ').filter(function (css) { return css; }));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterialTooltip) {\n this.tooltipElement.firstElementChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n this.setTooltipTransform();\n }\n };\n Slider.prototype.tooltipCollision = function (position) {\n if (this.isBootstrap || this.isBootstrap4 || ((this.isMaterial || this.isMaterial3) && !this.isMaterialTooltip)) {\n var tooltipOffsetValue = this.isBootstrap4 ? bootstrap4TooltipOffset : bootstrapTooltipOffset;\n switch (position) {\n case 'TopCenter':\n this.tooltipObj.setProperties({ 'offsetY': -(tooltipOffsetValue) }, false);\n break;\n case 'BottomCenter':\n this.tooltipObj.setProperties({ 'offsetY': tooltipOffsetValue }, false);\n break;\n case 'LeftCenter':\n this.tooltipObj.setProperties({ 'offsetX': -(tooltipOffsetValue) }, false);\n break;\n case 'RightCenter':\n this.tooltipObj.setProperties({ 'offsetX': tooltipOffsetValue }, false);\n break;\n }\n }\n };\n Slider.prototype.materialTooltipEventCallBack = function (event) {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterialTooltip) {\n if (!destroy) {\n EventHandler.add(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack, this);\n }\n else {\n EventHandler.remove(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack);\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n var transformProperties;\n if (this.tooltipElement) {\n var position = this.orientation === 'Horizontal' ?\n ((this.tooltipElement.clientHeight + 14) - (this.tooltipElement.clientHeight / 2)) :\n ((this.tooltipElement.clientWidth + 14) - (this.tooltipElement.clientWidth / 2));\n transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n }\n return transformProperties;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n this.refreshTooltip(this.firstHandle);\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n tooltipContentElement.classList.remove(classNames.materialTooltipHide);\n tooltipContentElement.classList.add(classNames.materialTooltipShow);\n this.firstHandle.style.cursor = 'default';\n this.tooltipElement.style.transition = this.scaleTransform;\n this.tooltipElement.classList.add(classNames.materialTooltipOpen);\n this.materialHandle.style.transform = 'scale(0)';\n if (tooltipContentElement.innerText.length > 4) {\n this.tooltipElement.style.transform = 'scale(1)';\n }\n else {\n this.tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { if (_this.tooltipElement)\n _this.tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { if (_this.tooltipElement)\n _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n }\n };\n Slider.prototype.closeMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n this.tooltipElement.style.transition = this.scaleTransform;\n tooltipContentElement.classList.remove(classNames.materialTooltipShow);\n tooltipContentElement.classList.add(classNames.materialTooltipHide);\n this.firstHandle.style.cursor = '-webkit-grab';\n this.firstHandle.style.cursor = 'grab';\n if (this.materialHandle) {\n this.materialHandle.style.transform = 'scale(1)';\n }\n this.tooltipElement.classList.remove(classNames.materialTooltipOpen);\n this.setTooltipTransform();\n this.tooltipTarget = undefined;\n setTimeout(function () { if (_this.tooltipElement)\n _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n if (this.tooltipCollidedPosition === undefined ||\n this.tooltipCollidedPosition !== args.collidedPosition || !args.element.classList.contains(tooltipClass)) {\n if (this.isMaterialTooltip) {\n if (tooltipClass !== undefined) {\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n }\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length <= 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n this.tooltipCollidedPosition = args.collidedPosition;\n }\n if (this.isMaterialTooltip && this.tooltipElement && this.tooltipElement.style.transform.indexOf('translate') !== -1) {\n this.setTooltipTransform();\n }\n };\n Slider.prototype.setTooltipTransform = function () {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n if (isNullOrUndefined(this.tooltipElement))\n return;\n if (this.tooltipElement.firstElementChild.innerText.length > 4) {\n this.tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n this.tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n };\n Slider.prototype.renderTooltip = function () {\n this.tooltipObj = new Tooltip({\n showTipPointer: this.isBootstrap || this.isMaterial || this.isMaterial3 || this.isBootstrap4 || this.isTailwind || this.isBootstrap5 || this.isFluent,\n cssClass: classNames.sliderTooltip,\n height: (this.isMaterial || this.isMaterial3) ? 30 : 'auto',\n animation: { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n beforeClose: this.tooltipBeforeClose.bind(this),\n enableHtmlSanitizer: this.enableHtmlSanitizer\n });\n this.tooltipObj.appendTo(this.firstHandle);\n this.initializeTooltipProps();\n };\n Slider.prototype.initializeTooltipProps = function () {\n var tooltipShowOn = (this.tooltip.showOn === 'Auto' ? 'Hover' : this.tooltip.showOn);\n this.setProperties({ tooltip: { showOn: tooltipShowOn } }, true);\n this.tooltipObj.position = this.tooltipPlacement();\n this.tooltipCollision(this.tooltipObj.position);\n [this.firstHandle, this.rangeBar, this.secondHandle].forEach(function (handle) {\n if (!isNullOrUndefined(handle)) {\n handle.style.transition = 'none';\n }\n });\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.tooltipObj.animation.close.effect = 'None';\n this.tooltipObj.open(this.firstHandle);\n }\n };\n Slider.prototype.tooltipBeforeClose = function () {\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.firstBtn.querySelector('span').classList.add('e-icons');\n }\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.secondBtn.querySelector('span').classList.add('e-icons');\n }\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial || this.isMaterial3) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.focusHandle = function () {\n if (!this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.getHandle().classList.add(classNames.sliderTabHandle);\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed', e);\n this.closeTooltip();\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n // tslint:disable-next-line:max-func-body-length\n Slider.prototype.renderScale = function () {\n var liElementPosition = 0;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n if (orien === 'h') {\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(startValue - parseFloat(max.toString())) % largestep === 0) ? true : false;\n }\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start, tickWidth);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n if (this.min > this.max) {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.ticksAlignment(orien, tickWidth);\n };\n Slider.prototype.ticksAlignment = function (orien, tickWidth, triggerEvent) {\n if (triggerEvent === void 0) { triggerEvent = true; }\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n if (triggerEvent) {\n this.trigger('renderedTicks', eventArgs);\n }\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start, tickWidth) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start, span, tickWidth);\n }\n else {\n if (this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(start.toString());\n }\n else {\n span.innerHTML = start.toString();\n }\n }\n };\n Slider.prototype.formatTicksValue = function (li, start, spanElement, tickWidth) {\n var _this = this;\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n li.setAttribute('title', observedArgs.text.toString());\n if (spanElement) {\n if (_this.enableHtmlSanitizer) {\n spanElement.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n spanElement.innerHTML = observedArgs.text.toString();\n }\n }\n });\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n this.firstChild = this.element.querySelector('ul').children[0];\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var otherChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n // eslint-disable-next-line\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min < this.max ? this.min.toString() : this.max.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.min < this.max ? this.max.toString() : this.min.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if ((this.isMaterial || this.isMaterial3) && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\n this.focusHandle();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipToggle = function (target) {\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n }\n else {\n // eslint-disable-next-line\n !this.tooltipElement ? this.openTooltip(target) : this.refreshTooltip(target);\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal' && !isNullOrUndefined(this.rangeBar)) {\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else if (!isNullOrUndefined(this.rangeBar)) {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos1 + 'px' : '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.min > this.max ? this.element.clientHeight - this.handlePos1 + 'px' : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos2 + 'px' : this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.min > this.max ? this.handlePos1 - this.handlePos2 + 'px' : this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = (this.min < this.max ? fromMinPostion : fromMaxpostion) + 'px';\n this.limitBarFirst.style.height = (this.min < this.max ? (fromMaxpostion - fromMinPostion) : (fromMinPostion - fromMaxpostion)) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = (this.min < this.max ? toMinPostion : toMaxpostion) + 'px';\n this.limitBarSecond.style.height = (this.min < this.max ? (toMaxpostion - toMinPostion) : (toMinPostion - toMaxpostion)) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min < this.max ? this.min : this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.min < this.max ? this.max : this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n this.setBarColor();\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n // eslint-disable-next-line\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n // eslint-disable-next-line no-self-assign\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition(null);\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed', null);\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range' && !isNullOrUndefined(this.firstHandle) && !isNullOrUndefined(this.secondHandle)) {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n else if (this.isMaterialTooltip && this.tooltipElement) {\n this.tooltipElement.style.zIndex = getZindexPartial(this.element) + '';\n }\n };\n Slider.prototype.setHandlePosition = function (event) {\n var _this = this;\n var handle;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n if (this.isMaterialTooltip) {\n handle = [this.firstHandle, this.materialHandle];\n }\n else {\n handle = [this.getHandle()];\n }\n this.handleStart();\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change', event);\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition(null);\n this.activeHandle = 2;\n this.setHandlePosition(null);\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName, e) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value && (!this.isMaterialTooltip || !this.initialTooltip)) {\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.initialTooltip = false;\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName, e) {\n var eventArgs;\n if (this.tooltip.isVisible && this.tooltipObj && this.initialTooltip) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: (typeof (this.tooltipObj.content) === 'function' ? this.tooltipObj.content() : this.tooltipObj.content), isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString)),\n isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.min < this.max && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.min > this.max && this.handlePos1 < this.handlePos2) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n /**\n * It is used to reposition slider.\n *\n * @returns void\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n if (!isNullOrUndefined(this.firstHandle))\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default' && !isNullOrUndefined(this.rangeBar)) {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range' && !isNullOrUndefined(this.secondHandle)) {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip && !isNullOrUndefined(this.materialHandle)) {\n // eslint-disable-next-line\n this.enableRtl ? this.materialHandle.style.right =\n this.handlePos1 + \"px\" : this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange' && !isNullOrUndefined(this.rangeBar)) {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range' && !isNullOrUndefined(this.secondHandle) && !isNullOrUndefined(this.rangeBar)) {\n // eslint-disable-next-line\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n this.materialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos1 + 'px' : '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.min > this.max ? this.element.clientHeight - this.handlePos1 + 'px' : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos2 + 'px' : this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.min > this.max ? this.handlePos1 - this.handlePos2 + 'px' : this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n this.handleStart();\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n if (!isNullOrUndefined(_this.firstHandle))\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range' && !isNullOrUndefined(_this.secondHandle)) {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip(this.tooltipTarget);\n this.setBarColor();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && ((this.handlePos1 > this.handlePos2 && this.min < this.max) || (this.handlePos1 < this.handlePos2 && this.min > this.max))) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && ((this.handlePos2 < this.handlePos1 && this.min < this.max) || (this.handlePos2 > this.handlePos1 && this.min > this.max))) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition(null);\n }\n };\n // eslint-disable-next-line\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n // eslint-disable-next-line\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n // eslint-disable-next-line\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.min < (this.max) && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1) || (this.min > this.max) && (this.handlePos1 - handlepos) > (handlepos - this.handlePos2))) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n var behindElement;\n if ((evt.type === 'click' || evt.type === 'mousedown') && evt.target === handle) {\n var eventX = evt.clientX, eventY = evt.clientY;\n behindElement = document.elementFromPoint(eventX, eventY);\n }\n if (evt.target === handle && behindElement != handle) {\n if ((this.isMaterial || this.isMaterial3) && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.sliderBarUp(evt);\n this.tooltipToggle(this.getHandle());\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = (this.isMaterial || this.isMaterial3) && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition(evt);\n if (this.isMaterialTooltip) {\n this.initialTooltip = false;\n }\n if (evt.target != handle) {\n this.changeEvent('changed', evt);\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n var _a, _b;\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n this.rangeBarDragged = true;\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n if (this.min > this.max) {\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n }\n else {\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n }\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n if (this.min > this.max) {\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n }\n else {\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n }\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === (this.min > this.max ? this.min : this.max)) {\n this.handleValueAdjust(this.handleVal2, (this.min > this.max ? this.min : this.max), 2);\n }\n if (this.handleVal1 === (this.min > this.max ? this.max : this.min)) {\n this.handleValueAdjust(this.handleVal1, (this.min > this.max ? this.max : this.min), 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition(event);\n this.activeHandle = 2;\n this.setHandlePosition(event);\n this.tooltipToggle(this.rangeBar);\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function (event) {\n this.changeEvent('changed', event);\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.initialTooltip = false;\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n this.closeTooltip();\n if (this.isMaterial || this.isMaterial3) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if ((this.min < this.max && handlepos > this.handlePos2 || (this.min > this.max && handlepos < this.handlePos2))) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if ((this.min < this.max && handlepos < this.handlePos1) || (this.min > this.max && handlepos > this.handlePos1)) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition(evt);\n if ((this.isMaterial || this.isMaterial3) && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n if (!this.rangeBarDragged) {\n this.focusSliderElement();\n this.sliderBarClick(event);\n }\n else {\n this.isDragComplete = true;\n }\n this.changeEvent('changed', event);\n this.closeTooltip();\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n this.rangeBarDragged = false;\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj) {\n this.tooltipValue();\n if (target) {\n this.tooltipObj.refresh(target);\n this.tooltipTarget = target;\n }\n }\n };\n Slider.prototype.openTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.open(target);\n this.tooltipTarget = target;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible && this.tooltipObj && this.tooltip.showOn !== 'Always' && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.close();\n this.tooltipTarget = undefined;\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.rangeBarMousedown = function (event) {\n var _a, _b;\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.tooltipToggle(this.rangeBar);\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n };\n Slider.prototype.elementClick = function (event) {\n if (this.isDragComplete) {\n this.isDragComplete = false;\n return;\n }\n event.preventDefault();\n this.focusSliderElement();\n this.sliderBarClick(event);\n this.focusHandle();\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.reposition.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'click', this.elementClick, this);\n if (this.type === 'Range' && this.drag) {\n EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n }\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.elementClick);\n if (this.type === 'Range' && this.drag) {\n EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n }\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n EventHandler.remove(this.element, 'reset', this.formResetHandler);\n };\n Slider.prototype.formResetHandler = function () {\n this.setProperties({ 'value': this.formResetValue }, true);\n this.setValue();\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.getHandle().focus();\n this.tooltipToggle(this.getHandle());\n }\n }\n this.closeTooltip();\n this.changeEvent('changed', event);\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n var curTarget = event.currentTarget;\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && this.tooltipObj && this.isMaterialTooltip &&\n !curTarget.classList.contains(classNames.sliderHandleFocused) &&\n !curTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeMaterialTooltip();\n }\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n this.closeMaterialTooltip();\n this.closeTooltip();\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type, args) {\n if (this.isMaterialTooltip && this.materialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.materialHandle);\n this.materialHandle = undefined;\n }\n this.removeElement(this.firstHandle);\n this.firstHandle = undefined;\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n this.secondHandle = undefined;\n }\n this.removeElement(this.rangeBar);\n this.rangeBar = undefined;\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.tooltipObj)) {\n this.tooltipObj.destroy();\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n }\n if (this.limits.enabled) {\n if (type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n this.limitBarFirst = undefined;\n }\n }\n else {\n if (!isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarSecond);\n this.limitBarSecond = undefined;\n }\n }\n }\n this.activeHandle = 1;\n this.getThemeInitialization();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.setBarColor();\n if (args !== 'tooltip') {\n this.updateConfig();\n }\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.tooltipObj.refresh(this.firstHandle);\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type, 'null');\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip(this.tooltipTarget);\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it removes the attributes and classes.\n *\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n this.element.innerHTML = '';\n this.hiddenInput = null;\n this.sliderContainer = null;\n this.sliderTrack = null;\n this.rangeBar = null;\n this.firstHandle = null;\n this.secondHandle = null;\n this.tickElementCollection = null;\n this.ul = null;\n this.firstBtn = null;\n this.secondBtn = null;\n this.materialHandle = null;\n this.tooltipObj = null;\n this.tooltipTarget = null;\n this.limitBarFirst = null;\n this.limitBarSecond = null;\n this.firstChild = null;\n this.lastChild = null;\n this.tooltipElement = null;\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @private\n */\n // tslint:disable-next-line\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (newProp && oldProp) {\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (!isNullOrUndefined(oldProp.value) && oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip(prop);\n if (!this.showButtons) {\n this.wireEvents();\n }\n }\n break;\n case 'type':\n if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n && !isNullOrUndefined(oldProp.type)) {\n this.changeSliderType(oldProp.type, prop);\n this.setZindex();\n }\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.reposition();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.sliderContainer.classList.remove(classNames.sliderButtonClass);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n this.reposition();\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValues':\n this.setValue();\n this.reposition();\n break;\n case 'colorRange':\n this.reposition();\n break;\n case 'width':\n this.setElementWidth(newProp.width);\n this.setMinMaxValue();\n if (this.limits) {\n this.limitsPropertyChange();\n }\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None' && !isNullOrUndefined(this.ul) && !isNullOrUndefined(this.element)) {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !this.isMaterial3 && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!isNullOrUndefined(this.firstHandle))\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range' && !isNullOrUndefined(this.secondHandle)) {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function (args) {\n this.changeSliderType(this.type, args);\n };\n Slider.prototype.setBarColor = function () {\n var trackPosition;\n var trackClassName;\n var child = this.sliderTrack.lastElementChild;\n while (child) {\n this.sliderTrack.removeChild(child);\n child = this.sliderTrack.lastElementChild;\n }\n for (var i = 0; i < this.colorRange.length; i++) {\n if (!isNullOrUndefined(this.colorRange[i].start) && !isNullOrUndefined(this.colorRange[i].end)) {\n if (this.colorRange[i].end > this.colorRange[i].start) {\n if (this.colorRange[i].start < this.min) {\n this.colorRange[i].start = this.min;\n }\n if (this.colorRange[i].end > this.max) {\n this.colorRange[i].end = this.max;\n }\n var startingPosition = this.checkHandlePosition(this.colorRange[i].start);\n var endPosition = this.checkHandlePosition(this.colorRange[i].end);\n var trackContainer = this.createElement('div');\n trackContainer.style.backgroundColor = this.colorRange[i].color;\n trackContainer.style.border = '1px solid ' + this.colorRange[i].color;\n if (this.orientation === 'Horizontal') {\n trackClassName = classNames.sliderHorizantalColor;\n if (this.enableRtl) {\n if (isNullOrUndefined(this.customValues)) {\n trackPosition = this.checkHandlePosition(this.max) - this.checkHandlePosition(this.colorRange[i].end);\n }\n else {\n trackPosition = this.checkHandlePosition(this.customValues.length - this.colorRange[i].end - 1);\n }\n }\n else {\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n }\n trackContainer.style.width = endPosition - startingPosition + 'px';\n trackContainer.style.left = trackPosition + 'px';\n }\n else {\n trackClassName = classNames.sliderVerticalColor;\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n trackContainer.style.height = endPosition - startingPosition + 'px';\n trackContainer.style.bottom = trackPosition + 'px';\n }\n trackContainer.classList.add(trackClassName);\n this.sliderTrack.appendChild(trackContainer);\n }\n }\n }\n };\n /**\n * Gets the component name\n *\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Collection([{}], ColorRangeData)\n ], Slider.prototype, \"colorRange\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? 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/* eslint-disable prefer-spread */\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Deferred } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HIDEHEX = 'e-hide-hex-value';\nvar HIDEOPACITY = 'e-hide-opacity';\nvar HIDERGBA = 'e-hide-switchable-value';\nvar HIDEVALUE = 'e-hide-value';\nvar HIDEVALUESWITCH = 'e-hide-valueswitcher';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar OPACITY = 'e-opacity-value';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SHOWVALUE = 'e-show-value';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var ele = this.element;\n this.formElement = closest(this.element, 'form');\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n if (ele.getAttribute('ejs-for') && !ele.getAttribute('name')) {\n ele.setAttribute('name', ele.id);\n }\n };\n /**\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n if (!this.enableOpacity) {\n addClass([this.container.parentElement], HIDEOPACITY);\n }\n this.renderComplete();\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false', 'aria-label': 'colorpicker' });\n this.container = this.createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value ? this.roundValue(this.value).toLowerCase() : '#008000ff';\n if (this.noColor && this.mode === 'Palette' && this.value === '') {\n value = '';\n }\n var slicedValue = value.slice(0, 7);\n if (isNullOrUndefined(this.initialInputValue)) {\n this.initialInputValue = slicedValue;\n }\n this.element.value = slicedValue;\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': slicedValue }, true);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n this.isRgb = true;\n this.createInput();\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = this.createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n createPopupOnClick: this.createPopupOnClick,\n open: this.onOpen.bind(this),\n click: function () {\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }, value: _this.value\n });\n }\n });\n this.splitBtn.createElement = this.createElement;\n this.splitBtn.appendTo(splitButton);\n var preview = this.createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (Browser.isDevice) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();\n }\n this.bindCallBackEvent();\n };\n ColorPicker.prototype.onOpen = function () {\n this.trigger('open', { element: this.container });\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.bindCallBackEvent = function () {\n var _this = this;\n this.splitBtn.beforeOpen = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observeOpenArgs) {\n if (!observeOpenArgs.cancel) {\n var popupEle = _this.getPopupEle();\n popupEle.style.top = formatUnit(0 + pageYOffset);\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.display = 'block';\n _this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n _this.modal = _this.createElement('div');\n _this.modal.className = 'e-' + _this.getModuleName() + ' e-modal';\n _this.modal.style.display = 'none';\n document.body.insertBefore(_this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n _this.modal.style.display = 'block';\n _this.modal.style.zIndex = (Number(popupEle.style.zIndex) - 1).toString();\n }\n }\n args.cancel = observeOpenArgs.cancel;\n callBackPromise.resolve(observeOpenArgs);\n });\n return callBackPromise;\n };\n this.splitBtn.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: _this.container, event: args.event, cancel: false };\n _this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n if (Browser.isDevice && args.event.target === _this.modal) {\n observedCloseArgs.cancel = true;\n }\n if (!observedCloseArgs.cancel) {\n _this.onPopupClose();\n }\n args.cancel = observedCloseArgs.cancel;\n callBackPromise.resolve(observedCloseArgs);\n });\n }\n else {\n callBackPromise.resolve(args);\n }\n return callBackPromise;\n };\n };\n ColorPicker.prototype.onPopupClose = function () {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = this.createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = this.createElement('div', { className: PALETTES, attrs: { 'tabindex': '0', 'role': 'grid' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n var roundedColor;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = this.createElement('div', {\n className: 'e-row', attrs: { 'role': 'row' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false', 'tabindex': '0' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value === roundedColor) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = this.convertToRgbString(this.hexToRgb(roundedColor));\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = this.container.querySelector('.e-row').children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n if (refEle) {\n this.container.insertBefore(ele, refEle);\n }\n else {\n this.container.appendChild(ele);\n }\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = this.createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(this.createElement('div', { className: HSVAREA }));\n var dragHandler = this.createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n if (this.value === null || this.value === '') {\n this.value = '#008000ff';\n }\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = this.createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = this.createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = this.createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n });\n this.hueSlider.createElement = this.createElement;\n this.hueSlider.appendTo(slider);\n if (this.enableOpacity) {\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.createOpacitySlider(slider);\n }\n };\n ColorPicker.prototype.createOpacitySlider = function (slider) {\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n });\n this.opacitySlider.createElement = this.createElement;\n this.opacitySlider.appendTo(slider);\n var opacityBgTrack = this.createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n var opacityEle = select('.e-opacity-empty-track', this.opacitySlider.element);\n if (opacityEle) {\n opacityEle.style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n }\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n this.updateOpacityInput(value);\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.updateOpacityInput = function (value) {\n if (this.enableOpacity && !this.getWrapper().classList.contains(HIDEVALUE)) {\n var opacityTextBoxInst = getInstance(select('.' + OPACITY, this.container), NumericTextBox);\n opacityTextBoxInst.value = value;\n opacityTextBoxInst.dataBind();\n }\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = this.createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = this.createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = this.createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.createNumericInput = function (element, value, label, max) {\n var _this = this;\n var numericInput = new NumericTextBox({\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n });\n numericInput.createElement = this.createElement;\n numericInput.appendTo(element);\n };\n ColorPicker.prototype.createInput = function () {\n var isPicker = this.isPicker();\n var wrapper = this.getWrapper();\n if ((isPicker && !wrapper.classList.contains(HIDEVALUE)) || (!isPicker && wrapper.classList.contains(SHOWVALUE))) {\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n if (isPicker) {\n this.appendElement(inputWrap, 2);\n }\n else {\n this.appendElement(inputWrap, 1);\n }\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n if (!wrapper.classList.contains(HIDEVALUESWITCH)) {\n this.appendValueSwitchBtn(inputWrap);\n }\n if (!wrapper.classList.contains(HIDEHEX)) {\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false', 'aria-label': 'HEX' }\n });\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true\n }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n hexInput.addEventListener('input', this.inputHandler.bind(this));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n var label = void 0;\n var value = void 0;\n if (this.isRgb) {\n label = 'RGB';\n value = this.rgb;\n }\n else {\n label = 'HSV';\n value = this.hsv;\n }\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })), value[i], label[i], 255);\n }\n if (this.enableOpacity) {\n this.appendOpacityValue(container);\n }\n }\n }\n };\n ColorPicker.prototype.appendOpacityValue = function (container) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: OPACITY })), this.rgb[3] * 100, 'A', 100);\n };\n ColorPicker.prototype.appendValueSwitchBtn = function (targetEle) {\n var valueSwitchBtn = this.createElement('button', {\n className: 'e-icons e-css e-btn e-flat e-icon-btn ' + FORMATSWITCH,\n attrs: { 'title': 'Toggle format' }\n });\n targetEle.appendChild(valueSwitchBtn);\n if (this.isPicker() && !this.getWrapper().classList.contains(HIDERGBA)) {\n valueSwitchBtn.addEventListener('click', this.formatSwitchHandler.bind(this));\n }\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = this.createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = this.createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-css e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-css e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = this.createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.createElement = this.createElement;\n tooltip.appendTo(this.container);\n // eslint-disable-next-line\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n select('.e-tip-content', this.tooltipEle).appendChild(this.createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n if (enable) {\n this.getWrapper().classList.add(DISABLED);\n }\n else {\n this.getWrapper().classList.remove(DISABLED);\n }\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n if (enable) {\n attributes(ele, { 'disabled': '' });\n }\n else {\n ele.removeAttribute('disabled');\n }\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey);\n };\n ColorPicker.prototype.updateInput = function (value) {\n var wrapper = this.getWrapper();\n if (!wrapper.classList.contains(HIDEVALUE)) {\n if (!wrapper.classList.contains(HIDEHEX)) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n if (this.isRgb) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n if (this.enableOpacity) {\n this.updateOpacitySliderBg();\n }\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n *\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @returns {string} - Color value\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @method toggle\n * @returns {void}\n */\n ColorPicker.prototype.toggle = function () {\n if (this.container.parentElement.classList.contains('e-popup-close')) {\n this.splitBtn.toggle();\n }\n else {\n this.closePopup(null);\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n var ctrlBtn = select('.' + CTRLBTN, this.container);\n if (ctrlBtn) {\n EventHandler.add(ctrlBtn, 'keydown', this.ctrlBtnKeyDown, this);\n }\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.formResetHandler = function () {\n this.value = this.initialInputValue;\n attributes(this.element, { 'value': this.initialInputValue });\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n var ctrlSwitchBtn = select('.' + CTRLSWITCH, this.container);\n if (ctrlSwitchBtn) {\n EventHandler.add(ctrlSwitchBtn, 'click', this.btnClickHandler, this);\n }\n };\n ColorPicker.prototype.ctrlBtnKeyDown = function (e) {\n if (e.keyCode === 13) {\n var applyBtn = select('.' + APPLY, this.container);\n if (applyBtn) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13: {\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue, e);\n }\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedcloseArgs) {\n if (!observedcloseArgs.cancel) {\n _this.splitBtn.toggle();\n _this.onPopupClose();\n }\n });\n };\n ColorPicker.prototype.triggerChangeEvent = function (value) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) },\n value: this.enableOpacity ? value : hex\n });\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n e.preventDefault();\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat();\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n this.updateHsv();\n this.convertToOtherFormat();\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Palette' });\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function () {\n if (this.isRgb) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n this.isRgb = false;\n }\n else {\n this.updateValue(this.rgb, true, 2);\n this.isRgb = true;\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (this.enableOpacity && hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n this.updateOpacitySliderBg();\n }\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n else {\n if (this.getWrapper().classList.contains(SHOWVALUE) && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler();\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains(SHOWVALUE)) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Picker' });\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele, e) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '', e);\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n if (idx < 0) {\n idx += n + emptyCount;\n }\n else {\n idx %= n + emptyCount;\n }\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX': {\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value);\n }\n else {\n return;\n }\n break;\n }\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n if (!this.showButtons && !isKey) {\n this.trigger('change', { currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }, value: cValue });\n if (this.enableOpacity) {\n this.setProperties({ 'value': cValue }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', {\n currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n });\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n if (this.element.nextElementSibling) {\n detach(this.element.nextElementSibling);\n }\n if (wrapper) {\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n }\n this.container = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n var popup = closest(this.hueSlider.element, '.e-color-picker');\n var numericElemColl = popup.querySelectorAll('.e-numerictextbox');\n for (var i = 0; i < numericElemColl.length; i++) {\n getInstance(numericElemColl[i], NumericTextBox).destroy();\n }\n this.hueSlider.destroy();\n if (this.enableOpacity) {\n this.opacitySlider.destroy();\n this.opacitySlider = null;\n }\n this.hueSlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n var ctrlBtn = select('.' + CTRLBTN, this.container);\n if (ctrlBtn) {\n EventHandler.remove(ctrlBtn, 'keydown', this.ctrlBtnKeyDown);\n }\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateInput(newProp);\n if (this.rgb.length === 4) {\n this.updateOpacityInput(this.rgb[3] * 100);\n }\n }\n else {\n this.removeTileSelection();\n var ele = this.container.querySelector('span[aria-label=\"' + this.roundValue(newProp) + '\"]');\n if (ele) {\n this.addTileSelection(ele);\n }\n }\n };\n ColorPicker.prototype.setInputEleProps = function () {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps();\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.replace(/\\s+/g, ' ').trim().split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n ColorPicker.prototype.changeOpacityProps = function (newProp) {\n var wrapper = this.getWrapper();\n if (newProp) {\n removeClass([this.container.parentElement], HIDEOPACITY);\n this.createOpacitySlider(select('.e-colorpicker-slider', this.container).appendChild(this.createElement('div', { className: 'e-opacity-slider' })));\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n this.appendOpacityValue(select('.e-input-container', this.container));\n }\n }\n else {\n addClass([this.container.parentElement], HIDEOPACITY);\n this.opacitySlider.destroy();\n remove(this.opacitySlider.element);\n this.opacitySlider = null;\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n remove(select('.' + OPACITY, this.container).parentElement);\n }\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ColorPickerModel} newProp - Specifies new properties\n * @param {ColorPickerModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (!isNullOrUndefined(newProp.value)) {\n var value = this.roundValue(newProp.value);\n if (value.length === 9) {\n this.element.value = this.roundValue(value).slice(0, 7);\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n if (preview) {\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(newProp.value));\n }\n }\n else if (this.noColor && this.mode === 'Palette' && this.value === '') {\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n preview.style.backgroundColor = '';\n }\n else {\n this.value = oldProp.value;\n }\n }\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this_1.getWrapper().appendChild(this_1.container);\n this_1.splitBtn.destroy();\n detach(this_1.element.nextElementSibling);\n if (!this_1.container.children.length) {\n this_1.createWidget();\n }\n }\n else {\n this_1.destroyOtherComp();\n this_1.unWireEvents();\n this_1.container.innerHTML = '';\n this_1.createSplitBtn();\n }\n break;\n case 'cssClass': {\n this_1.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n var props = newProp.cssClass.split(' ').concat(oldProp.cssClass.split(' '));\n props = props.reduce(function (a, b) { if (a.indexOf(b) < 0) {\n a.push(b);\n } return a; }, []);\n var count_1 = 0;\n props.forEach(function (cls) {\n if (count_1 === 0 &&\n (cls === HIDEVALUE || cls === HIDEVALUESWITCH || cls === SHOWVALUE || cls === HIDEHEX || cls === HIDERGBA)) {\n var inputWrap = select('.' + INPUTWRAPPER, _this.container);\n if (inputWrap) {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n _this.createInput();\n count_1++;\n }\n });\n break;\n }\n case 'enableRtl':\n if (this_1.isPicker()) {\n this_1.hueSlider.enableRtl = newProp.enableRtl;\n if (this_1.enableOpacity) {\n this_1.opacitySlider.enableRtl = newProp.enableRtl;\n }\n this_1.setInputEleProps();\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n if (this_1.value !== oldProp.value) {\n this_1.changeValueProp(newProp.value);\n }\n break;\n case 'showButtons':\n this_1.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this_1.switchToPicker();\n }\n else {\n this_1.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this_1.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this_1.isPicker()) {\n this_1.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this_1.mode === 'Palette' && !this_1.modeSwitcher) {\n this_1.setNoColor();\n }\n }\n else {\n this_1.changePaletteProps();\n }\n break;\n case 'enableOpacity':\n this_1.changeOpacityProps(newProp.enableOpacity);\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n /**\n * Sets the focus to Colorpicker\n * its native method\n *\n * @public\n * @returns {void}\n */\n ColorPicker.prototype.focusIn = function () {\n this.element.parentElement.focus();\n };\n __decorate([\n Property('#008000ff')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"onModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"created\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\n","import { addClass, Browser, removeClass, EventHandler, formatUnit, isNullOrUndefined, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { getInstance, closest, selectAll, detach } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Popup, Tooltip } from '@syncfusion/ej2-popups';\nimport * as classes from '../base/classes';\nimport * as events from '../base/constant';\nimport { CLS_TOOLBAR, CLS_DROPDOWN_BTN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_INLINE_DROPDOWN, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER, CLS_CUSTOM_TILE, CLS_NOCOLOR_ITEM, CLS_BULLETFORMATLIST_TB_BTN, CLS_NUMBERFORMATLIST_TB_BTN, CLS_LIST_PRIMARY_CONTENT } from '../base/classes';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { hasClass } from '../base/util';\n/**\n * `Toolbar renderer` module is used to render toolbar in RichTextEditor.\n *\n * @hidden\n\n */\nvar ToolbarRenderer = /** @class */ (function () {\n /**\n * Constructor for toolbar renderer module\n *\n * @param {IRichTextEditor} parent - specifies the parent element.\n */\n function ToolbarRenderer(parent) {\n this.parent = parent;\n this.wireEvent();\n }\n ToolbarRenderer.prototype.wireEvent = function () {\n this.parent.on(events.destroy, this.unWireEvent, this);\n this.parent.on(events.maximizeMinimizeClick, this.destroyTooltip, this);\n };\n ToolbarRenderer.prototype.destroyTooltip = function () {\n this.tooltip.close();\n };\n ToolbarRenderer.prototype.unWireEvent = function () {\n this.parent.off(events.destroy, this.unWireEvent);\n if (this.popupOverlay) {\n EventHandler.remove(this.popupOverlay, 'click touchmove', this.onPopupOverlay);\n }\n this.removePopupContainer();\n };\n ToolbarRenderer.prototype.toolbarBeforeCreate = function (e) {\n if (this.mode === 'Extended') {\n e.enableCollision = false;\n }\n };\n ToolbarRenderer.prototype.toolbarCreated = function () {\n this.parent.notify(events.toolbarCreated, this);\n };\n ToolbarRenderer.prototype.toolbarClicked = function (args) {\n if (!this.parent.enabled) {\n return;\n }\n if (!this.parent.readonly || isNullOrUndefined(args.item)) {\n this.parent.notify(events.toolbarClick, args);\n }\n this.parent.trigger('toolbarClick', args);\n };\n ToolbarRenderer.prototype.dropDownSelected = function (args) {\n this.parent.notify(events.dropDownSelect, args);\n this.onPopupOverlay();\n };\n ToolbarRenderer.prototype.beforeDropDownItemRender = function (args) {\n if (this.parent.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.beforeDropDownItemRender, args);\n };\n ToolbarRenderer.prototype.dropDownOpen = function (args) {\n if (args.element.parentElement.getAttribute('id').indexOf('TableCell') > -1 && !isNOU(args.element.parentElement.querySelector('.e-cell-merge')) &&\n (!isNOU(args.element.parentElement.querySelector('.e-cell-horizontal-split')) || !isNOU(args.element.parentElement.querySelector('.e-cell-vertical-split')))) {\n var listEle = args.element.querySelectorAll('li');\n if (this.parent.inputElement.querySelectorAll('.e-cell-select').length === 1) {\n addClass([listEle[0]], 'e-disabled');\n removeClass([listEle[1], listEle[2]], 'e-disabled');\n }\n else if (this.parent.inputElement.querySelectorAll('.e-cell-select').length > 1) {\n removeClass([listEle[0]], 'e-disabled');\n addClass([listEle[1], listEle[2]], 'e-disabled');\n }\n }\n if (Browser.isDevice && !args.element.parentElement.classList.contains(classes.CLS_QUICK_DROPDOWN)) {\n this.popupModal(args.element.parentElement);\n }\n this.parent.notify(events.selectionSave, args);\n };\n ToolbarRenderer.prototype.dropDownClose = function (args) {\n this.removePopupContainer();\n this.parent.notify(events.selectionRestore, args);\n };\n ToolbarRenderer.prototype.removePopupContainer = function () {\n if (Browser.isDevice && !isNullOrUndefined(this.popupContainer)) {\n var popupEle = this.popupContainer.querySelector('.e-dropdown-popup.e-tbar-btn.e-control');\n if (popupEle) {\n this.popupContainer.parentNode.insertBefore(popupEle, this.popupContainer.nextSibling);\n popupEle.style.removeProperty('position');\n removeClass([popupEle], 'e-popup-modal');\n }\n detach(this.popupContainer);\n this.popupContainer = undefined;\n }\n };\n /**\n * renderToolbar method\n *\n * @param {IToolbarOptions} args - specifies the arguments.\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderToolbar = function (args) {\n this.setPanel(args.target);\n this.renderPanel();\n this.mode = args.overflowMode;\n args.rteToolbarObj.toolbarObj = new Toolbar({\n items: args.items,\n width: '100%',\n overflowMode: args.overflowMode,\n beforeCreate: this.toolbarBeforeCreate.bind(this),\n created: this.toolbarCreated.bind(this),\n clicked: this.toolbarClicked.bind(this),\n enablePersistence: args.enablePersistence,\n enableRtl: args.enableRtl,\n cssClass: args.cssClass\n });\n args.rteToolbarObj.toolbarObj.isStringTemplate = true;\n args.rteToolbarObj.toolbarObj.createElement = this.parent.createElement;\n args.rteToolbarObj.toolbarObj.appendTo(args.target);\n if (this.parent.showTooltip) {\n this.tooltip = new Tooltip({\n target: '#' + this.parent.getID() + '_toolbar_wrapper [title]',\n showTipPointer: true,\n openDelay: 400,\n cssClass: this.parent.cssClass,\n windowCollision: true,\n position: 'BottomCenter'\n });\n this.tooltip.appendTo(args.target);\n }\n };\n /**\n * renderDropDownButton method\n *\n * @param {IDropDownModel} args - specifies the the arguments.\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderDropDownButton = function (args) {\n var _this = this;\n var css;\n args.element.classList.add(CLS_DROPDOWN_BTN);\n css = args.cssClass + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN;\n if (this.parent.inlineMode.enable && Browser.isDevice) {\n css = css + ' ' + CLS_INLINE_DROPDOWN;\n }\n // eslint-disable-next-line\n var proxy = this;\n var dropDown = new DropDownButton({\n items: args.items,\n iconCss: args.iconCss,\n cssClass: css,\n content: args.content,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n select: this.dropDownSelected.bind(this),\n beforeOpen: function (args) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n args.cancel = true;\n return;\n }\n // eslint-disable-next-line\n for (var index = 0; index < args.element.childNodes.length; index++) {\n var divNode = _this.parent.createElement('div');\n divNode.innerHTML = dropDown.content.trim();\n if (divNode.textContent.trim() !== ''\n && args.element.childNodes[index].textContent.trim() === divNode.textContent.trim()) {\n if (!args.element.childNodes[index].classList.contains('e-active')) {\n addClass([args.element.childNodes[index]], 'e-active');\n }\n }\n else {\n removeClass([args.element.childNodes[index]], 'e-active');\n }\n }\n proxy.parent.notify(events.beforeDropDownOpen, args);\n },\n close: this.dropDownClose.bind(this),\n open: this.dropDownOpen.bind(this),\n beforeItemRender: this.beforeDropDownItemRender.bind(this)\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n var popupElement = document.getElementById(dropDown.element.id + '-popup');\n popupElement.setAttribute('aria-owns', this.parent.getID());\n return dropDown;\n };\n /**\n * renderListDropDown method\n *\n * @param {IDropDownModel} args - specifies the the arguments.\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderListDropDown = function (args) {\n // eslint-disable-next-line\n var proxy = this;\n var css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');\n css += (' ' + ((args.itemName === 'NumberFormatList') ? CLS_NUMBERFORMATLIST_TB_BTN : CLS_BULLETFORMATLIST_TB_BTN));\n var content = proxy.parent.createElement('span', { className: CLS_LIST_PRIMARY_CONTENT });\n var inlineEle = proxy.parent.createElement('span', { className: args.cssClass });\n content.appendChild(inlineEle);\n var dropDown = new DropDownButton({\n items: args.items,\n cssClass: css,\n content: args.content,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n select: this.dropDownSelected.bind(this),\n beforeOpen: function (args) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n args.cancel = true;\n return;\n }\n var element = (args.event) ? args.event.target : null;\n proxy.currentElement = dropDown.element;\n proxy.currentDropdown = dropDown;\n if (args.event && args.event.type === 'click' && (element.classList.contains(CLS_LIST_PRIMARY_CONTENT)\n || element.parentElement.classList.contains(CLS_LIST_PRIMARY_CONTENT))) {\n args.cancel = true;\n return;\n }\n proxy.parent.notify(events.beforeDropDownOpen, args);\n },\n close: this.dropDownClose.bind(this),\n open: this.dropDownOpen.bind(this),\n beforeItemRender: this.beforeDropDownItemRender.bind(this)\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n args.element.setAttribute('role', 'button');\n var popupElement = document.getElementById(dropDown.element.id + '-popup');\n popupElement.setAttribute('aria-owns', this.parent.getID());\n if (args.element.childElementCount === 1) {\n dropDown.element.insertBefore(content, dropDown.element.querySelector('.e-caret'));\n }\n args.element.tabIndex = -1;\n dropDown.element.removeAttribute('type');\n return dropDown;\n };\n // eslint-disable-next-line\n ToolbarRenderer.prototype.onPopupOverlay = function (args) {\n if (!isNullOrUndefined(this.popupOverlay)) {\n closest(this.popupOverlay, '.e-popup-container').style.display = 'none';\n this.popupOverlay.style.display = 'none';\n removeClass([this.popupOverlay], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.setIsModel = function (element) {\n if (!closest(element, '.e-popup-container')) {\n this.popupContainer = this.parent.createElement('div', {\n className: 'e-rte-modal-popup e-popup-container e-center'\n });\n element.parentNode.insertBefore(this.popupContainer, element);\n this.popupContainer.appendChild(element);\n this.popupContainer.style.zIndex = element.style.zIndex;\n this.popupContainer.style.display = 'flex';\n element.style.position = 'relative';\n addClass([element], 'e-popup-modal');\n this.popupOverlay = this.parent.createElement('div', { className: 'e-popup-overlay' });\n // eslint-disable-next-line\n this.popupOverlay.style.zIndex = (parseInt(element.style.zIndex, null) - 1).toString();\n this.popupOverlay.style.display = 'block';\n this.popupContainer.appendChild(this.popupOverlay);\n EventHandler.add(this.popupOverlay, 'click touchmove', this.onPopupOverlay, this);\n }\n else {\n element.parentElement.style.display = 'flex';\n this.popupOverlay = element.nextElementSibling;\n this.popupOverlay.style.display = 'block';\n addClass([this.popupOverlay], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.paletteSelection = function (dropDownArgs, currentElement) {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var colorbox = [].slice.call(selectAll('.e-tile', ele.parentElement));\n removeClass(colorbox, 'e-selected');\n var style = currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n (colorbox.filter(function (colorbox) {\n if (colorbox.style.backgroundColor === style) {\n addClass([colorbox], 'e-selected');\n }\n }));\n };\n /**\n * renderColorPickerDropDown method\n *\n * @param {IColorPickerModel} args - specifies the arguments.\n * @param {string} item - specifies the item.\n * @param {ColorPicker} colorPicker - specifies the colorpicker.\n * @param {string} defaultColor -specifies the defaultColor.\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderColorPickerDropDown = function (args, item, colorPicker, defaultColor) {\n var _this = this;\n // eslint-disable-next-line\n var proxy = this;\n var css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');\n css += (' ' + ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_DROPDOWN : CLS_FONT_COLOR_DROPDOWN));\n css += ' ' + this.parent.cssClass;\n var content = proxy.parent.createElement('span', { className: CLS_COLOR_CONTENT });\n var inlineEle = proxy.parent.createElement('span', { className: args.cssClass });\n var range;\n var initialBackgroundColor = (isNullOrUndefined(defaultColor)) ? proxy.parent.backgroundColor.default : defaultColor;\n inlineEle.style.borderBottomColor = (item === 'backgroundcolor') ?\n initialBackgroundColor : proxy.parent.fontColor.default;\n content.appendChild(inlineEle);\n var dropDown = new DropDownButton({\n target: colorPicker.element.parentElement, cssClass: css,\n enablePersistence: this.parent.enablePersistence, enableRtl: this.parent.enableRtl,\n beforeOpen: function (dropDownArgs) {\n colorPicker.inline = true;\n colorPicker.dataBind();\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n dropDownArgs.cancel = true;\n return;\n }\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n proxy.currentElement = dropDown.element;\n proxy.currentDropdown = dropDown;\n proxy.paletteSelection(dropDownArgs, proxy.currentElement);\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n dropDownArgs.cancel = true;\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n proxy.parent.notify(events.selectionRestore, {});\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n var parentNode = range.startContainer.parentNode;\n var closestElement = closest(range.startContainer.parentNode, 'table');\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n (closest(range.startContainer.parentNode, 'td,th')) ||\n (proxy.parent.iframeSettings.enable && !hasClass(parentNode.ownerDocument.querySelector('body'), 'e-lib')))\n && range.collapsed && args.subCommand === 'BackgroundColor' && closest(closestElement, '.' + classes.CLS_RTE)) {\n proxy.parent.notify(events.tableColorPickerChanged, {\n item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n else {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var inst = getInstance(ele, ColorPicker);\n inst.showButtons = (dropDownArgs.element.querySelector('.e-color-palette')) ? false : true;\n inst.dataBind();\n }\n dropDownArgs.element.onclick = function (args) {\n if (args.target.classList.contains('e-cancel')) {\n dropDown.toggle();\n }\n };\n },\n open: function (dropDownArgs) {\n _this.setColorPickerContentWidth(colorPicker);\n var focusEle;\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n if (dropDownArgs.element.querySelector('.e-color-palette')) {\n focusEle = ele.parentElement.querySelector('.e-palette');\n }\n else {\n focusEle = ele.parentElement.querySelector('e-handler');\n }\n if (focusEle) {\n focusEle.focus();\n }\n if (Browser.isDevice) {\n _this.popupModal(dropDownArgs.element.parentElement);\n }\n _this.pickerRefresh(dropDownArgs);\n },\n beforeClose: function (dropDownArgs) {\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n closest(range.startContainer.parentNode, 'td,th')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, { item: {\n command: args.command, subCommand: args.subCommand,\n value: colorpickerValue\n }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n },\n close: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n var dropElement = closest(dropDownArgs.element.parentElement, '.e-popup-container');\n if (dropElement) {\n dropElement.style.display = 'none';\n dropElement.lastElementChild.style.display = 'none';\n removeClass([dropElement.lastElementChild], 'e-popup-overlay');\n }\n if (Browser.isDevice && !isNullOrUndefined(dropElement)) {\n var popupEle = dropElement.querySelector('.e-dropdown-popup.e-tbar-btn.e-control');\n if (popupEle) {\n dropElement.parentNode.insertBefore(popupEle, dropElement.nextSibling);\n popupEle.style.removeProperty('position');\n removeClass([popupEle], 'e-popup-modal');\n }\n detach(dropElement);\n proxy.popupContainer = undefined;\n }\n }\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n args.element.setAttribute('role', 'button');\n dropDown.appendTo(args.element);\n var popupElement = document.getElementById(dropDown.element.id + '-popup');\n popupElement.setAttribute('aria-owns', this.parent.getID());\n dropDown.element.insertBefore(content, dropDown.element.querySelector('.e-caret'));\n args.element.tabIndex = -1;\n dropDown.element.removeAttribute('type');\n dropDown.element.onmousedown = function () {\n proxy.parent.notify(events.selectionSave, {});\n };\n dropDown.element.onkeydown = function () {\n proxy.parent.notify(events.selectionSave, {});\n };\n return dropDown;\n };\n ToolbarRenderer.prototype.pickerRefresh = function (dropDownArgs) {\n if (this.parent.backgroundColor.mode === 'Picker') {\n var popupElem = dropDownArgs.element.parentElement;\n popupElem.style.width = (popupElem.offsetWidth + 5).toString() + 'px';\n getInstance(popupElem, Popup).refreshPosition(popupElem);\n popupElem.style.width = (popupElem.offsetWidth - 5).toString() + 'px';\n }\n };\n ToolbarRenderer.prototype.popupModal = function (element) {\n var popupInst = getInstance(element, Popup);\n popupInst.relateTo = document.body;\n popupInst.position = { X: 0, Y: 0 };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupInst.dataBind();\n this.setIsModel(element);\n };\n ToolbarRenderer.prototype.setColorPickerContentWidth = function (colorPicker) {\n var colorPickerContent = colorPicker.element.nextSibling;\n if (colorPickerContent.style.width === '0px') {\n colorPickerContent.style.width = '';\n var borderWidth = parseInt(getComputedStyle(colorPickerContent).borderBottomWidth, 10);\n colorPickerContent.style.width = formatUnit(colorPickerContent.children[0].offsetWidth\n + borderWidth + borderWidth);\n }\n };\n /**\n * renderColorPicker method\n *\n * @param {IColorPickerModel} args - specifies the arguments\n * @param {string} item - specifies the string values\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderColorPicker = function (args, item) {\n var _this = this;\n // eslint-disable-next-line\n var proxy = this;\n var value;\n var colorPicker = new ColorPicker({\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n inline: false,\n value: '#fff',\n created: function () {\n var value = (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n colorPicker.setProperties({ value: value });\n },\n mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),\n modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),\n beforeTileRender: function (args) {\n args.element.classList.add(CLS_COLOR_PALETTE);\n args.element.classList.add(CLS_CUSTOM_TILE);\n if (!isNullOrUndefined(_this.parent.cssClass)) {\n var allClassName = _this.parent.cssClass.split(' ');\n for (var i = 0; i < allClassName.length; i++) {\n if (allClassName[i].trim() !== '') {\n args.element.classList.add(allClassName[i]);\n }\n }\n }\n if (args.value === '') {\n args.element.classList.add(CLS_NOCOLOR_ITEM);\n }\n },\n change: function (colorPickerArgs) {\n var colorpickerValue = colorPickerArgs.currentValue.rgba;\n colorPickerArgs.item = {\n command: args.command,\n subCommand: args.subCommand,\n value: colorpickerValue\n };\n proxy.parent.notify(events.selectionRestore, {});\n proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n var closestElement = closest(range.startContainer.parentNode, 'table');\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' || range.startContainer.nodeName === 'BODY' ||\n closest(range.startContainer.parentNode, 'td,th')) && range.collapsed && args.subCommand === 'BackgroundColor' && closest(closestElement, '.' + classes.CLS_RTE)) {\n proxy.parent.notify(events.tableColorPickerChanged, colorPickerArgs);\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, colorPickerArgs);\n }\n proxy.currentDropdown.toggle();\n },\n beforeModeSwitch: function (args) {\n value = colorPicker.value;\n if (value === '') {\n colorPicker.setProperties({ value: ((args.mode === 'Picker') ? '#008000ff' : '') }, true);\n }\n colorPicker.showButtons = args.mode === 'Palette' ? false : true;\n }\n });\n colorPicker.isStringTemplate = true;\n colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;\n colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :\n this.parent.fontColor.colorCode;\n colorPicker.cssClass = ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass;\n colorPicker.createElement = this.parent.createElement;\n colorPicker.appendTo(document.getElementById(args.target));\n return colorPicker;\n };\n /**\n * The function is used to render Rich Text Editor toolbar\n *\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_TOOLBAR);\n };\n /**\n * Get the toolbar element of RichTextEditor\n *\n * @returns {Element} - specifies the element.\n * @hidden\n\n */\n ToolbarRenderer.prototype.getPanel = function () {\n return this.toolbarPanel;\n };\n /**\n * Set the toolbar element of RichTextEditor\n *\n * @returns {void}\n * @param {Element} panel - specifies the element.\n * @hidden\n\n */\n ToolbarRenderer.prototype.setPanel = function (panel) {\n this.toolbarPanel = panel;\n };\n return ToolbarRenderer;\n}());\nexport { ToolbarRenderer };\n","import { RenderType } from '../base/enum';\nimport { CLS_HR_SEPARATOR } from '../base/classes';\nimport * as events from '../base/constant';\nimport { getTooltipText, isIDevice, toObjectLowerCase } from '../base/util';\nimport { tools, templateItems, windowKeys } from '../models/items';\nimport { isNullOrUndefined, extend, Browser } from '@syncfusion/ej2-base';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar BaseToolbar = /** @class */ (function () {\n function BaseToolbar(parent, serviceLocator) {\n this.tools = {};\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = tools;\n }\n }\n BaseToolbar.prototype.addEventListener = function () {\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.bindCssClass, this.setCssClass, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n BaseToolbar.prototype.removeEventListener = function () {\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.bindCssClass, this.setCssClass);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n BaseToolbar.prototype.setCssClass = function (e) {\n if (!isNullOrUndefined(this.toolbarObj)) {\n if (isNullOrUndefined(e.oldCssClass)) {\n this.toolbarObj.setProperties({ cssClass: (this.toolbarObj.cssClass + ' ' + e.cssClass).trim() });\n }\n else {\n this.toolbarObj.setProperties({ cssClass: (this.toolbarObj.cssClass.replace(e.oldCssClass, '').trim() + ' ' + e.cssClass).trim() });\n }\n }\n };\n BaseToolbar.prototype.setRtl = function (args) {\n if (!isNullOrUndefined(this.toolbarObj)) {\n this.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n BaseToolbar.prototype.getClass = function (item) {\n var classes;\n switch (item) {\n case 'fontsize':\n classes = 'e-rte-inline-size-template';\n break;\n case 'fontcolor':\n case 'backgroundcolor':\n classes = 'e-rte-inline-color-template';\n break;\n default:\n classes = 'e-rte-inline-template';\n break;\n }\n return classes;\n };\n BaseToolbar.prototype.getTemplateObject = function (itemStr, container) {\n var tagName;\n switch (itemStr) {\n case 'fontcolor':\n case 'backgroundcolor':\n case 'numberformatlist':\n case 'bulletformatlist':\n tagName = 'span';\n break;\n default:\n tagName = 'button';\n break;\n }\n return {\n command: this.tools[itemStr.toLocaleLowerCase()].command,\n subCommand: this.tools[itemStr.toLocaleLowerCase()].subCommand,\n template: this.parent.createElement(tagName, {\n id: this.parent.getID() + '_' + container\n + '_' + this.tools[itemStr.toLocaleLowerCase()].id\n }).outerHTML,\n cssClass: this.parent.inlineMode.enable ? this.getClass(itemStr) : '',\n tooltipText: getTooltipText(itemStr, this.locator)\n };\n };\n /**\n * getObject method\n *\n * @param {string} item - specifies the string value\n * @param {string} container - specifies the value of string\n * @returns {IToolbarItemModel} - returns the model element\n * @hidden\n\n */\n BaseToolbar.prototype.getObject = function (item, container) {\n var itemStr = item.toLowerCase();\n if (templateItems.indexOf(itemStr) !== -1) {\n return this.getTemplateObject(itemStr, container);\n }\n else {\n switch (itemStr) {\n case '|':\n return { type: 'Separator' };\n case '-':\n return { type: 'Separator', cssClass: CLS_HR_SEPARATOR };\n default:\n if (this.parent.showTooltip) {\n return {\n id: this.parent.getID() + '_' + container + '_' + this.tools[itemStr.toLocaleLowerCase()].id,\n prefixIcon: this.tools[itemStr.toLocaleLowerCase()].icon,\n tooltipText: getTooltipText(itemStr, this.locator),\n command: this.tools[itemStr.toLocaleLowerCase()].command,\n subCommand: this.tools[itemStr.toLocaleLowerCase()].subCommand\n };\n }\n else {\n return {\n id: this.parent.getID() + '_' + container + '_' + this.tools[itemStr.toLocaleLowerCase()].id,\n prefixIcon: this.tools[itemStr.toLocaleLowerCase()].icon,\n command: this.tools[itemStr.toLocaleLowerCase()].command,\n subCommand: this.tools[itemStr.toLocaleLowerCase()].subCommand\n };\n }\n }\n }\n };\n /**\n * @param {string} tbItems - specifies the string value\n * @param {string} container - specifies the container value\n * @returns {ItemModel} - retunrs the model element\n * @hidden\n\n */\n BaseToolbar.prototype.getItems = function (tbItems, container) {\n var _this = this;\n if (this.parent.toolbarSettings.items.length < 1) {\n return [];\n }\n var items = [];\n var _loop_1 = function (item) {\n switch (typeof item) {\n case 'string':\n items.push(this_1.getObject(item, container));\n break;\n default:\n if (!isNullOrUndefined(item.click)) {\n var proxy_1 = item;\n var callback_1 = proxy_1.click;\n proxy_1.click = function () {\n if (proxy_1.undo && _this.parent.formatter.getUndoRedoStack().length === 0) {\n _this.parent.formatter.saveData();\n }\n callback_1.call(_this);\n var currentContentElem = _this.parent.createElement('div');\n currentContentElem.appendChild(_this.parent.formatter.getUndoRedoStack()[_this.parent.formatter.getUndoRedoStack().length - 1].text);\n if (currentContentElem.innerHTML.trim() === _this.parent.inputElement.innerHTML.trim()) {\n return;\n }\n if (proxy_1.undo) {\n _this.parent.formatter.saveData();\n }\n };\n }\n items.push(item);\n }\n };\n var this_1 = this;\n for (var _i = 0, tbItems_1 = tbItems; _i < tbItems_1.length; _i++) {\n var item = tbItems_1[_i];\n _loop_1(item);\n }\n for (var num = 0; num < items.length; num++) {\n var tooltipText = items[num].tooltipText;\n var shortCutKey = void 0;\n if (windowKeys[\"\" + tooltipText]) {\n shortCutKey = Browser.isDevice && isIDevice() ? windowKeys[\"\" + tooltipText].replace('Ctrl', 'Cmd') : windowKeys[\"\" + tooltipText];\n }\n else {\n shortCutKey = tooltipText;\n }\n if (shortCutKey) {\n items[num].tooltipText = (tooltipText !== shortCutKey) ? tooltipText + ' (' + shortCutKey + ')' : tooltipText;\n }\n }\n return items;\n };\n BaseToolbar.prototype.getToolbarOptions = function (args) {\n return {\n target: args.target,\n rteToolbarObj: this,\n items: this.getItems(args.items, args.container),\n overflowMode: args.mode,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n cssClass: args.cssClass\n };\n };\n /**\n * render method\n *\n * @param {IToolbarRenderOptions} args - specifies the toolbar options\n * @returns {void}\n * @hidden\n\n */\n BaseToolbar.prototype.render = function (args) {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.toolbarRenderer.renderToolbar(this.getToolbarOptions(args));\n };\n return BaseToolbar;\n}());\nexport { BaseToolbar };\n","import { addClass, isNullOrUndefined, removeClass, select, closest } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport { getIndex } from '../base/util';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getDropDownValue, getFormattedFontSize, getTooltipText } from '../base/util';\nimport * as model from '../models/items';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar DropDownButtons = /** @class */ (function () {\n function DropDownButtons(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n DropDownButtons.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n DropDownButtons.prototype.beforeRender = function (args) {\n var item = args.item;\n if (item.cssClass) {\n addClass([args.element], item.cssClass);\n }\n if (item.command === 'Alignments' || item.subCommand === 'JustifyLeft'\n || item.subCommand === 'JustifyRight' || item.subCommand === 'JustifyCenter') {\n args.element.setAttribute('title', getTooltipText(item.subCommand.toLocaleLowerCase(), this.locator));\n }\n };\n DropDownButtons.prototype.dropdownContent = function (width, type, content) {\n return ('' +\n '' + content + '');\n };\n /**\n * renderDropDowns method\n *\n * @param {IDropDownRenderArgs} args - specifies the arguments\n * @returns {void}\n * @hidden\n\n */\n DropDownButtons.prototype.renderDropDowns = function (args) {\n var _this = this;\n this.initializeInstance();\n var type = args.containerType;\n var tbElement = args.container;\n model.templateItems.forEach(function (item) {\n var targetElement = undefined;\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'numberformatlist': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_NumberFormatList', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatOLItem = _this.parent.numberFormatList.types.slice();\n formatOLItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Lists', enumerable: true }, subCommand: { value: 'NumberFormatList', enumerable: true }\n });\n });\n _this.numberFormatListDropDown = _this.toolbarRenderer.renderListDropDown({\n cssClass: 'e-order-list' + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n itemName: 'NumberFormatList', items: formatOLItem, element: targetElement\n });\n break;\n }\n case 'bulletformatlist': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_BulletFormatList', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatULItem = _this.parent.bulletFormatList.types.slice();\n formatULItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Lists', enumerable: true }, subCommand: { value: 'BulletFormatList', enumerable: true }\n });\n });\n _this.bulletFormatListDropDown = _this.toolbarRenderer.renderListDropDown({\n cssClass: 'e-unorder-list' + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n itemName: 'BulletFormatList', items: formatULItem, element: targetElement\n });\n break;\n }\n case 'formats': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Formats', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatItem = _this.parent.format.types.slice();\n formatItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Formats', enumerable: true }, subCommand: { value: item.value, enumerable: true }\n });\n });\n var formatContent = isNullOrUndefined(_this.parent.format.default) ? formatItem[0].text :\n _this.parent.format.default;\n _this.formatDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-formats e-icons' : ''),\n content: _this.dropdownContent(_this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItem, formatContent, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FORMATS_TB_BTN,\n itemName: 'Formats', items: formatItem, element: targetElement\n });\n break;\n }\n case 'fontname': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontName', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontItem = _this.parent.fontFamily.items.slice();\n fontItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontName', enumerable: true }\n });\n });\n var fontNameContent = isNullOrUndefined(_this.parent.fontFamily.default) ? fontItem[0].text :\n _this.parent.fontFamily.default;\n _this.fontNameDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-font-name e-icons' : ''),\n content: _this.dropdownContent(_this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItem, fontNameContent, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_NAME_TB_BTN,\n itemName: 'FontName', items: fontItem, element: targetElement\n });\n if (!isNullOrUndefined(_this.parent.fontFamily.default)) {\n _this.getEditNode().style.fontFamily = _this.parent.fontFamily.default;\n }\n break;\n }\n case 'fontsize': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontSize', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontsize = _this.parent.fontSize.items.slice();\n fontsize.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontSize', enumerable: true }\n });\n });\n var fontSizeContent = isNullOrUndefined(_this.parent.fontSize.default) ? fontsize[1].text :\n _this.parent.fontSize.default;\n _this.fontSizeDropDown = _this.toolbarRenderer.renderDropDownButton({\n content: _this.dropdownContent(_this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, fontSizeContent.replace(/\\s/g, ''), 'value', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_SIZE_TB_BTN,\n itemName: 'FontSize', items: fontsize, element: targetElement\n });\n if (!isNullOrUndefined(_this.parent.fontSize.default)) {\n _this.getEditNode().style.fontSize = _this.parent.fontSize.default;\n }\n break;\n }\n case 'alignments':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Alignments', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n _this.alignDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_ALIGN_TB_BTN,\n itemName: 'Alignments', items: model.alignmentItems, element: targetElement\n });\n break;\n case 'align':\n case 'videoalign':\n _this.renderAlignmentDropDown(type, tbElement, targetElement, item);\n break;\n case 'display':\n case 'audiolayoutoption':\n case 'videolayoutoption':\n _this.renderDisplayDropDown(type, tbElement, targetElement, item);\n break;\n case 'tablerows':\n _this.rowDropDown(type, tbElement, targetElement);\n break;\n case 'tablecolumns':\n _this.columnDropDown(type, tbElement, targetElement);\n break;\n case 'tablecell':\n _this.cellDropDown(type, tbElement, targetElement);\n break;\n case 'tablecellverticalalign':\n _this.verticalAlignDropDown(type, tbElement, targetElement);\n break;\n case 'styles':\n _this.tableStylesDropDown(type, tbElement, targetElement);\n break;\n }\n }\n });\n if (this.parent.inlineMode.enable) {\n this.setCssClass({ cssClass: this.parent.cssClass });\n }\n };\n DropDownButtons.prototype.getUpdateItems = function (items, value) {\n var dropDownItems = items.slice();\n dropDownItems.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: (value === 'Format' ? 'Formats' : 'Font'), enumerable: true },\n subCommand: { value: (value === 'Format' ? item.value : value), enumerable: true }\n });\n });\n return dropDownItems;\n };\n DropDownButtons.prototype.onPropertyChanged = function (model) {\n var newProp = model.newProp;\n var type;\n var content;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'fontFamily':\n if (this.fontNameDropDown) {\n for (var _b = 0, _c = Object.keys(newProp.fontFamily); _b < _c.length; _b++) {\n var fontFamily = _c[_b];\n switch (fontFamily) {\n case 'default':\n case 'width': {\n var fontItems = this.fontNameDropDown.items;\n type = !isNullOrUndefined(closest(this.fontNameDropDown.element, '.' + classes.CLS_QUICK_TB)) ?\n 'quick' : 'toolbar';\n var fontNameContent = isNullOrUndefined(this.parent.fontFamily.default) ? fontItems[0].text :\n this.parent.fontFamily.default;\n content = this.dropdownContent(this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItems, fontNameContent, 'text', 'text')));\n this.fontNameDropDown.setProperties({ content: content });\n if (!isNullOrUndefined(this.parent.fontFamily.default)) {\n this.getEditNode().style.fontFamily = this.parent.fontFamily.default;\n }\n else {\n this.getEditNode().style.removeProperty('font-family');\n }\n break;\n }\n case 'items':\n this.fontNameDropDown.setProperties({\n items: this.getUpdateItems(newProp.fontFamily.items, 'FontName')\n });\n break;\n }\n }\n }\n break;\n case 'fontSize':\n if (this.fontSizeDropDown) {\n for (var _d = 0, _e = Object.keys(newProp.fontSize); _d < _e.length; _d++) {\n var fontSize = _e[_d];\n switch (fontSize) {\n case 'default':\n case 'width': {\n var fontsize = this.fontSizeDropDown.items;\n type = !isNullOrUndefined(closest(this.fontSizeDropDown.element, '.' + classes.CLS_QUICK_TB)) ? 'quick' : 'toolbar';\n var fontSizeContent = isNullOrUndefined(this.parent.fontSize.default) ? fontsize[1].text :\n this.parent.fontSize.default;\n content = this.dropdownContent(this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, fontSizeContent.replace(/\\s/g, ''), 'value', 'text')));\n this.fontSizeDropDown.setProperties({ content: content });\n if (!isNullOrUndefined(this.parent.fontSize.default)) {\n this.getEditNode().style.fontSize = this.parent.fontSize.default;\n }\n else {\n this.getEditNode().style.removeProperty('font-size');\n }\n break;\n }\n case 'items':\n this.fontSizeDropDown.setProperties({\n items: this.getUpdateItems(newProp.fontSize.items, 'FontSize')\n });\n break;\n }\n }\n }\n break;\n case 'format':\n if (this.formatDropDown) {\n for (var _f = 0, _g = Object.keys(newProp.format); _f < _g.length; _f++) {\n var format = _g[_f];\n switch (format) {\n case 'default':\n case 'width': {\n var formatItems = this.formatDropDown.items;\n type = !isNullOrUndefined(closest(this.formatDropDown.element, '.' + classes.CLS_QUICK_TB)) ? 'quick' : 'toolbar';\n var formatContent = isNullOrUndefined(this.parent.format.default) ? formatItems[0].text :\n this.parent.format.default;\n content = this.dropdownContent(this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItems, formatContent, 'text', 'text')));\n this.formatDropDown.setProperties({ content: content });\n break;\n }\n case 'types':\n this.formatDropDown.setProperties({\n items: this.getUpdateItems(newProp.format.types, 'Format')\n });\n break;\n }\n }\n }\n break;\n }\n }\n };\n DropDownButtons.prototype.getEditNode = function () {\n return this.parent.contentModule.getEditPanel();\n };\n DropDownButtons.prototype.rowDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableRows', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableRowsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-rows e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableRows',\n items: model.tableRowsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.columnDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableColumns', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableColumnsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-columns e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableColumns',\n items: model.tableColumnsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.cellDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableCell', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableRowsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-cell e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableCell',\n items: model.tableCellItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.verticalAlignDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableCellVerticalAlign', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableCellVerticalAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-cell-ver-align e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableCellVerticalAlign',\n items: model.TableCellVerticalAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.renderDisplayDropDown = function (type, tbElement, targetElement, item) {\n targetElement = select('#' + this.parent.getID() + '_' + type + (item === 'display' ? '_Display' : item === 'videolayoutoption' ? '_VideoLayoutOption' : '_AudioLayoutOption'), tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.displayDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: item === 'display' ? 'e-display e-icons' : item === 'videolayoutoption' ? 'e-video-display e-icons' : 'e-audio-display e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: item === 'display' ? 'Display' : item === 'videolayoutoption' ? 'VideoLayoutOption' : 'AudioLayoutOption',\n items: item === 'display' ? model.imageDisplayItems : item === 'videolayoutoption' ? model.videoLayoutOptionItems : model.audioLayoutOptionItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.renderAlignmentDropDown = function (type, tbElement, targetElement, item) {\n targetElement = select('#' + this.parent.getID() + '_' + type + (item === 'align' ? '_Align' : '_VideoAlign'), tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: item === 'align' ? 'Align' : 'VideoAlign',\n items: item === 'align' ? model.imageAlignItems : model.videoAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.tableStylesDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Styles', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-style e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Styles',\n items: this.parent.tableSettings.styles,\n element: targetElement\n });\n };\n DropDownButtons.prototype.removeDropDownClasses = function (target) {\n removeClass([target], [\n classes.CLS_DROPDOWN_BTN,\n classes.CLS_DROPDOWN_POPUP,\n classes.CLS_DROPDOWN_ICONS,\n classes.CLS_DROPDOWN_ITEMS\n ]);\n };\n /**\n * destroyDropDowns method\n *\n * @returns {void}\n * @hidden\n\n */\n DropDownButtons.prototype.destroyDropDowns = function () {\n if (this.formatDropDown) {\n this.removeDropDownClasses(this.formatDropDown.element);\n this.formatDropDown.destroy();\n }\n if (this.fontNameDropDown) {\n this.removeDropDownClasses(this.fontNameDropDown.element);\n this.fontNameDropDown.destroy();\n }\n if (this.fontSizeDropDown) {\n this.removeDropDownClasses(this.fontSizeDropDown.element);\n this.fontSizeDropDown.destroy();\n }\n if (this.alignDropDown) {\n this.removeDropDownClasses(this.alignDropDown.element);\n this.alignDropDown.destroy();\n }\n if (this.imageAlignDropDown) {\n this.removeDropDownClasses(this.imageAlignDropDown.element);\n this.imageAlignDropDown.destroy();\n }\n if (this.displayDropDown) {\n this.removeDropDownClasses(this.displayDropDown.element);\n this.displayDropDown.destroy();\n }\n if (this.tableRowsDropDown) {\n this.removeDropDownClasses(this.tableRowsDropDown.element);\n this.tableRowsDropDown.destroy();\n }\n if (this.tableColumnsDropDown) {\n this.removeDropDownClasses(this.tableColumnsDropDown.element);\n this.tableColumnsDropDown.destroy();\n }\n if (this.tableCellVerticalAlignDropDown) {\n this.removeDropDownClasses(this.tableCellVerticalAlignDropDown.element);\n this.tableCellVerticalAlignDropDown.destroy();\n }\n if (this.numberFormatListDropDown) {\n this.removeDropDownClasses(this.numberFormatListDropDown.element);\n this.numberFormatListDropDown.destroy();\n }\n if (this.bulletFormatListDropDown) {\n this.removeDropDownClasses(this.bulletFormatListDropDown.element);\n this.bulletFormatListDropDown.destroy();\n }\n };\n DropDownButtons.prototype.setRtl = function (args) {\n if (this.formatDropDown) {\n this.formatDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontNameDropDown) {\n this.fontNameDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontSizeDropDown) {\n this.fontSizeDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.alignDropDown) {\n this.alignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageAlignDropDown) {\n this.imageAlignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.displayDropDown) {\n this.displayDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.numberFormatListDropDown) {\n this.numberFormatListDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.bulletFormatListDropDown) {\n this.bulletFormatListDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n DropDownButtons.prototype.updateCss = function (dropDownObj, e) {\n if (dropDownObj && e.cssClass) {\n if (isNullOrUndefined(e.oldCssClass)) {\n dropDownObj.setProperties({ cssClass: (dropDownObj.cssClass + ' ' + e.cssClass).trim() });\n }\n else {\n dropDownObj.setProperties({ cssClass: (dropDownObj.cssClass.replace(e.oldCssClass, '').trim() + ' ' + e.cssClass).trim() });\n }\n }\n };\n DropDownButtons.prototype.setCssClass = function (e) {\n var dropDownObj = [\n this.formatDropDown, this.fontNameDropDown, this.fontSizeDropDown, this.alignDropDown, this.imageAlignDropDown,\n this.displayDropDown, this.numberFormatListDropDown, this.bulletFormatListDropDown, this.tableRowsDropDown,\n this.tableColumnsDropDown, this.tableCellVerticalAlignDropDown\n ];\n for (var i = 0; i < dropDownObj.length; i++) {\n this.updateCss(dropDownObj[i], e);\n }\n };\n DropDownButtons.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.beforeDropDownItemRender, this.beforeRender, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.bindCssClass, this.setCssClass, this);\n };\n DropDownButtons.prototype.onIframeMouseDown = function () {\n dispatchEvent(document, 'mousedown');\n };\n DropDownButtons.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.beforeDropDownItemRender, this.beforeRender);\n this.parent.off(events.destroy, this.removeEventListener);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.bindCssClass, this.setCssClass);\n };\n return DropDownButtons;\n}());\nexport { DropDownButtons };\n","import { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\n/**\n * `ToolbarAction` module is used to toolbar click action\n */\nvar ToolbarAction = /** @class */ (function () {\n function ToolbarAction(parent) {\n this.parent = parent;\n this.addEventListener();\n this.serviceLocator = new ServiceLocator;\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n }\n ToolbarAction.prototype.addEventListener = function () {\n this.parent.on(events.toolbarClick, this.toolbarClick, this);\n this.parent.on(events.dropDownSelect, this.dropDownSelect, this);\n this.parent.on(events.colorPickerChanged, this.renderSelection, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ToolbarAction.prototype.toolbarClick = function (args) {\n if (isNOU(args.item)) {\n return;\n }\n if (!isNOU(args.item.controlParent)) {\n // eslint-disable-next-line\n var activeEle = args.item.controlParent\n .activeEle;\n if (activeEle) {\n activeEle.tabIndex = -1;\n }\n }\n if (args.item.command === 'NumberFormatList' || args.item.command === 'BulletFormatList') {\n if (args.originalEvent.target.classList.contains('e-order-list') || args.originalEvent.target.classList.contains('e-unorder-list')) {\n args.item.command = 'Lists';\n args.item.subCommand = args.item.subCommand === 'NumberFormatList' ? 'OL' : 'UL';\n }\n }\n if (args.item.command === 'Lists') {\n if (args.originalEvent.target.classList.contains('e-caret') &&\n (args.originalEvent.target.parentElement.classList.contains('e-rte-bulletformatlist-dropdown') || args.originalEvent.target.parentElement.classList.contains('e-rte-numberformatlist-dropdown'))) {\n args.item.command = args.item.subCommand = null;\n }\n }\n this.parent.notify(events.htmlToolbarClick, args);\n this.parent.notify(events.markdownToolbarClick, args);\n };\n ToolbarAction.prototype.dropDownSelect = function (e) {\n this.parent.notify(events.selectionRestore, {});\n if (!(document.body.contains(document.body.querySelector('.e-rte-quick-toolbar'))\n && e.item && (e.item.command === 'Images' || e.item.command === 'Audios' || e.item.command === 'Videos' ||\n e.item.command === 'VideoLayoutOption' || e.item.command === 'Display' || e.item.command === 'Table'))) {\n var value = e.item.controlParent && this.parent.quickToolbarModule && this.parent.quickToolbarModule.tableQTBar\n && this.parent.quickToolbarModule.tableQTBar.element.contains(e.item.controlParent.element) ? 'Table' : null;\n if (e.item.command === 'Lists') {\n var listItem = { listStyle: e.item.value, listImage: e.item.listImage, type: e.item.subCommand };\n this.parent.formatter.process(this.parent, e, e.originalEvent, listItem);\n }\n else {\n this.parent.formatter.process(this.parent, e, e.originalEvent, value);\n }\n }\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.renderSelection = function (args) {\n this.parent.notify(events.selectionRestore, {});\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarClick, this.toolbarClick);\n this.parent.off(events.dropDownSelect, this.dropDownSelect);\n this.parent.off(events.colorPickerChanged, this.renderSelection);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ToolbarAction;\n}());\nexport { ToolbarAction };\n","import { addClass, Browser, EventHandler, detach, removeClass, select, selectAll, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType, ToolbarType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, getTBarItemsIndex, getCollection, toObjectLowerCase, isIDevice, getTooltipText } from '../base/util';\nimport { updateDropDownFontFormatLocale } from '../base/util';\nimport * as model from '../models/items';\nimport { ToolbarRenderer } from '../renderer/toolbar-renderer';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ToolbarAction } from './toolbar-action';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.parent = parent;\n this.isToolbar = false;\n this.locator = serviceLocator;\n this.isTransformChild = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n model.updateDropDownLocale(this.parent);\n updateDropDownFontFormatLocale(this.parent);\n this.renderFactory.addRenderer(RenderType.Toolbar, new ToolbarRenderer(this.parent));\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.baseToolbar = new BaseToolbar(this.parent, this.locator);\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, model.tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = model.tools;\n }\n }\n Toolbar.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editableElement = this.contentRenderer.getEditPanel();\n this.editPanel = this.contentRenderer.getPanel();\n };\n Toolbar.prototype.toolbarBindEvent = function () {\n if (!this.parent.inlineMode.enable) {\n this.keyBoardModule = new KeyboardEvents(this.getToolbarElement(), {\n keyAction: this.toolBarKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n }\n };\n Toolbar.prototype.toolBarKeyDown = function (e) {\n switch (e.action) {\n case 'escape':\n this.parent.contentModule.getEditPanel().focus();\n break;\n }\n };\n Toolbar.prototype.createToolbarElement = function () {\n this.tbElement = this.parent.createElement('div', { id: this.parent.getID() + '_toolbar' });\n if (!Browser.isDevice && this.parent.inlineMode.enable && isIDevice()) {\n return;\n }\n else {\n if (this.parent.toolbarSettings.enableFloating && !this.parent.inlineMode.enable) {\n this.tbWrapper = this.parent.createElement('div', {\n id: this.parent.getID() + '_toolbar_wrapper',\n innerHTML: this.tbElement.outerHTML,\n className: classes.CLS_TB_WRAP\n });\n this.tbElement = this.tbWrapper.firstElementChild;\n this.parent.element.insertBefore(this.tbWrapper, this.editPanel);\n }\n else {\n this.parent.element.insertBefore(this.tbElement, this.editPanel);\n }\n }\n };\n Toolbar.prototype.getToolbarMode = function () {\n var tbMode;\n switch (this.parent.toolbarSettings.type) {\n case ToolbarType.Expand:\n tbMode = 'Extended';\n break;\n case ToolbarType.Scrollable:\n tbMode = 'Scrollable';\n break;\n default:\n tbMode = 'MultiRow';\n }\n if (isIDevice() && this.parent.toolbarSettings.type === ToolbarType.Expand) {\n tbMode = ToolbarType.Scrollable;\n }\n return tbMode;\n };\n Toolbar.prototype.checkToolbarResponsive = function (ele) {\n if (!Browser.isDevice || isIDevice()) {\n return false;\n }\n var tBarMode;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n tBarMode = ToolbarType.MultiRow;\n }\n else {\n tBarMode = this.parent.toolbarSettings.type;\n }\n this.baseToolbar.render({\n container: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items,\n mode: tBarMode,\n target: ele,\n cssClass: this.parent.cssClass\n });\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([ele], ['e-rte-tb-mobile']);\n if (this.parent.inlineMode.enable) {\n this.addFixedTBarClass();\n }\n else {\n addClass([ele], [classes.CLS_TB_STATIC]);\n }\n }\n this.wireEvents();\n this.dropDownModule.renderDropDowns({\n container: ele,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n return true;\n };\n Toolbar.prototype.checkIsTransformChild = function () {\n this.isTransformChild = false;\n var transformElements = selectAll('[style*=\"transform\"]', document);\n for (var i = 0; i < transformElements.length; i++) {\n // eslint-disable-next-line max-len\n if (!isNullOrUndefined(transformElements[i].contains) && transformElements[i].contains(this.parent.element)) {\n this.isTransformChild = true;\n break;\n }\n }\n };\n Toolbar.prototype.toggleFloatClass = function (e) {\n var topValue;\n var isBody = false;\n var isFloat = false;\n var scrollParent;\n var floatOffset = this.parent.floatingToolbarOffset;\n if (e && this.parent.iframeSettings.enable && this.parent.inputElement.ownerDocument === e.target) {\n scrollParent = e.target.body;\n }\n else if (e && e.target !== document) {\n scrollParent = e.target;\n }\n else {\n isBody = true;\n scrollParent = document.body;\n }\n var tbHeight = this.getToolbarHeight() + this.getExpandTBarPopHeight();\n if (this.isTransformChild) {\n topValue = 0;\n var scrollParentRelativeTop = 0;\n var trgHeight = this.parent.element.offsetHeight;\n if (isBody) {\n var bodyStyle = window.getComputedStyle(scrollParent);\n scrollParentRelativeTop = parseFloat(bodyStyle.marginTop.split('px')[0]) + parseFloat(bodyStyle.paddingTop.split('px')[0]);\n }\n var targetTop = this.parent.element.getBoundingClientRect().top;\n var scrollParentYOffset = (Browser.isMSPointer && isBody) ? window.pageYOffset : scrollParent.parentElement.scrollTop;\n var scrollParentRect = scrollParent.getBoundingClientRect();\n var scrollParentTop = (!isBody) ? scrollParentRect.top : (scrollParentRect.top + scrollParentYOffset);\n var outOfRange = ((targetTop - ((!isBody) ? scrollParentTop : 0))\n + trgHeight > tbHeight + floatOffset) ? false : true;\n if (targetTop > (scrollParentTop + floatOffset) || targetTop < -trgHeight || ((targetTop < 0) ? outOfRange : false)) {\n isFloat = false;\n removeClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n }\n else if (targetTop < (scrollParentTop + floatOffset)) {\n if (targetTop < 0) {\n topValue = (-targetTop) + scrollParentTop;\n }\n else {\n topValue = scrollParentTop - targetTop;\n }\n topValue = (isBody) ? topValue - scrollParentRelativeTop : topValue;\n addClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n isFloat = true;\n }\n }\n else {\n var parent_1 = this.parent.element.getBoundingClientRect();\n if (window.innerHeight < parent_1.top) {\n return;\n }\n topValue = (e && e.target !== document) ? scrollParent.getBoundingClientRect().top : 0;\n if ((parent_1.bottom < (floatOffset + tbHeight + topValue)) || parent_1.bottom < 0 || parent_1.top > floatOffset + topValue) {\n isFloat = false;\n }\n else if (parent_1.top < floatOffset || parent_1.top < floatOffset + topValue) {\n isFloat = true;\n }\n }\n if (!isFloat) {\n removeClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { top: 0 + 'px', width: '100%' });\n }\n else {\n addClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { width: this.parent.element.offsetWidth + 'px', top: (floatOffset + topValue) + 'px' });\n }\n };\n Toolbar.prototype.renderToolbar = function () {\n this.initializeInstance();\n this.createToolbarElement();\n if (this.checkToolbarResponsive(this.tbElement)) {\n return;\n }\n if (this.parent.inlineMode.enable) {\n this.parent.notify(events.renderInlineToolbar, {});\n }\n else {\n this.baseToolbar.render({\n container: 'toolbar',\n items: this.parent.toolbarSettings.items,\n mode: this.getToolbarMode(),\n target: this.tbElement,\n cssClass: this.parent.cssClass\n });\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.checkIsTransformChild();\n this.toggleFloatClass();\n }\n addClass([this.parent.element], [classes.CLS_RTE_TB_ENABLED]);\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n }\n }\n }\n this.wireEvents();\n if (this.parent.inlineMode.enable && !isIDevice()) {\n this.addFixedTBarClass();\n }\n if (!this.parent.inlineMode.enable) {\n this.dropDownModule.renderDropDowns({\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.refreshToolbarOverflow();\n }\n var divEle = this.parent.element.querySelector('.e-rte-srctextarea');\n var iframeEle = this.parent.element.querySelector('.e-source-content');\n if ((!this.parent.iframeSettings.enable && (!isNOU(divEle) && divEle.style.display === 'block')) ||\n (this.parent.iframeSettings.enable && (!isNOU(iframeEle) && iframeEle.style.display === 'block'))) {\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'SourceCode', updateItem: 'Preview',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n }\n };\n /**\n * addFixedTBarClass method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.addFixedTBarClass = function () {\n addClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n /**\n * removeFixedTBarClass method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.removeFixedTBarClass = function () {\n removeClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n Toolbar.prototype.showFixedTBar = function () {\n addClass([this.tbElement], [classes.CLS_SHOW]);\n if (Browser.isIos) {\n addClass([this.tbElement], [classes.CLS_TB_IOS_FIX]);\n }\n };\n Toolbar.prototype.hideFixedTBar = function () {\n // eslint-disable-next-line\n (!this.isToolbar) ? removeClass([this.tbElement], [classes.CLS_SHOW, classes.CLS_TB_IOS_FIX]) : this.isToolbar = false;\n };\n /**\n * updateItem method\n *\n * @param {IUpdateItemsModel} args - specifies the arguments.\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.updateItem = function (args) {\n var item = this.tools[args.updateItem.toLocaleLowerCase()];\n if (this.parent.locale !== 'en-US') {\n item.tooltip = getTooltipText(args.updateItem.toLocaleLowerCase(), this.locator);\n }\n var trgItem = this.tools[args.targetItem.toLocaleLowerCase()];\n var index = getTBarItemsIndex(getCollection(trgItem.subCommand), args.baseToolbar.toolbarObj.items)[0];\n if (!isNOU(index)) {\n var prefixId = this.parent.inlineMode.enable ? '_quick_' : '_toolbar_';\n args.baseToolbar.toolbarObj.items[index].id = this.parent.getID() + prefixId + item.id;\n args.baseToolbar.toolbarObj.items[index].prefixIcon = item.icon;\n args.baseToolbar.toolbarObj.items[index].tooltipText = item.tooltip;\n args.baseToolbar.toolbarObj.items[index].subCommand = item.subCommand;\n args.baseToolbar.toolbarObj.dataBind();\n args.baseToolbar.toolbarObj.refreshOverflow();\n }\n else {\n this.addTBarItem(args, 0);\n }\n };\n Toolbar.prototype.updateToolbarStatus = function (args) {\n if (!this.tbElement || (this.parent.inlineMode.enable && (isIDevice() || !Browser.isDevice))) {\n return;\n }\n var options = {\n args: args,\n dropDownModule: this.dropDownModule,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.tbElement),\n tbItems: this.baseToolbar.toolbarObj.items\n };\n setToolbarStatus(options, (this.parent.inlineMode.enable ? true : false), this.parent);\n };\n Toolbar.prototype.fullScreen = function (e) {\n this.parent.fullScreenModule.showFullScreen(e);\n };\n Toolbar.prototype.hideScreen = function (e) {\n this.parent.fullScreenModule.hideFullScreen(e);\n };\n /**\n * getBaseToolbar method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.getBaseToolbar = function () {\n return this.baseToolbar;\n };\n /**\n * addTBarItem method\n *\n * @param {IUpdateItemsModel} args - specifies the arguments.\n * @param {number} index - specifies the index value.\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.addTBarItem = function (args, index) {\n args.baseToolbar.toolbarObj.addItems([args.baseToolbar.getObject(args.updateItem, 'toolbar')], index);\n };\n /**\n * enableTBarItems method\n *\n * @param {BaseToolbar} baseToolbar - specifies the toolbar.\n * @param {string} items - specifies the string value.\n * @param {boolean} isEnable - specifies the boolean value.\n * @param {boolean} muteToolbarUpdate - specifies the toolbar.\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.enableTBarItems = function (baseToolbar, items, isEnable, muteToolbarUpdate) {\n var trgItems = getTBarItemsIndex(getCollection(items), baseToolbar.toolbarObj.items);\n this.tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n for (var i = 0; i < trgItems.length; i++) {\n var item = this.tbItems[trgItems[i]];\n if (item) {\n baseToolbar.toolbarObj.enableItems(item, isEnable);\n }\n }\n if (!select('.e-rte-srctextarea', this.parent.element) && !muteToolbarUpdate) {\n updateUndoRedoStatus(baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * removeTBarItems method\n *\n * @param {string} items - specifies the string value.\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.removeTBarItems = function (items) {\n if (isNullOrUndefined(this.baseToolbar.toolbarObj)) {\n this.baseToolbar = this.parent.getBaseToolbarObject();\n }\n var trgItems = getTBarItemsIndex(getCollection(items), this.baseToolbar.toolbarObj.items);\n this.tbItems = (this.parent.inlineMode.enable) ? selectAll('.' + classes.CLS_TB_ITEM, this.baseToolbar.toolbarObj.element)\n : selectAll('.' + classes.CLS_TB_ITEM, this.parent.element);\n for (var i = 0; i < trgItems.length; i++) {\n this.baseToolbar.toolbarObj.removeItems(this.tbItems[trgItems[i]]);\n }\n };\n /**\n * getExpandTBarPopHeight method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.getExpandTBarPopHeight = function () {\n var popHeight = 0;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand && this.tbElement.classList.contains('e-extended-toolbar')) {\n var expandPopup = select('.e-toolbar-extended', this.tbElement);\n if (expandPopup && this.tbElement.classList.contains('e-expand-open')\n || expandPopup && expandPopup.classList.contains('e-popup-open')) {\n addClass([expandPopup], [classes.CLS_VISIBLE]);\n popHeight = popHeight + expandPopup.offsetHeight;\n removeClass([expandPopup], [classes.CLS_VISIBLE]);\n }\n else {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n }\n return popHeight;\n };\n /**\n * getToolbarHeight method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.getToolbarHeight = function () {\n return this.tbElement.offsetHeight;\n };\n /**\n * getToolbarElement method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.getToolbarElement = function () {\n return select('.' + classes.CLS_TOOLBAR, this.parent.element);\n };\n /**\n * refreshToolbarOverflow method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.refreshToolbarOverflow = function () {\n this.parent.element.classList.remove(classes.CLS_RTL);\n this.baseToolbar.toolbarObj.refreshOverflow();\n if (this.parent.enableRtl) {\n this.parent.element.classList.add(classes.CLS_RTL);\n }\n };\n Toolbar.prototype.isToolbarDestroyed = function () {\n return this.baseToolbar.toolbarObj && !this.baseToolbar.toolbarObj.isDestroyed;\n };\n Toolbar.prototype.destroyToolbar = function () {\n if (this.isToolbarDestroyed()) {\n this.parent.unWireScrollElementsEvents();\n this.unWireEvents();\n this.parent.notify(events.destroyColorPicker, {});\n this.dropDownModule.destroyDropDowns();\n this.baseToolbar.toolbarObj.destroy();\n this.removeEventListener();\n removeClass([this.parent.element], [classes.CLS_RTE_TB_ENABLED]);\n removeClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (!isNullOrUndefined(tbWrapper)) {\n detach(tbWrapper);\n }\n else if (!isNullOrUndefined(tbElement)) {\n detach(tbElement);\n }\n }\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.destroy = function () {\n if (this.isToolbarDestroyed()) {\n this.destroyToolbar();\n if (this.keyBoardModule) {\n this.keyBoardModule.destroy();\n }\n }\n };\n Toolbar.prototype.moduleDestroy = function () {\n this.parent = null;\n this.baseToolbar.parent = null;\n this.toolbarActionModule.parent = null;\n this.dropDownModule.parent = null;\n };\n Toolbar.prototype.scrollHandler = function (e) {\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating && this.getDOMVisibility(this.tbElement)) {\n this.toggleFloatClass(e.args);\n }\n }\n };\n Toolbar.prototype.getDOMVisibility = function (el) {\n if (!el.offsetParent && el.offsetWidth === 0 && el.offsetHeight === 0) {\n return false;\n }\n return true;\n };\n Toolbar.prototype.mouseDownHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable && !isIDevice()) {\n this.showFixedTBar();\n }\n };\n Toolbar.prototype.focusChangeHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable && !isIDevice()) {\n this.isToolbar = false;\n this.hideFixedTBar();\n }\n };\n Toolbar.prototype.dropDownBeforeOpenHandler = function () {\n this.isToolbar = true;\n };\n // eslint-disable-next-line\n Toolbar.prototype.tbFocusHandler = function (e) {\n var activeElm = document.activeElement;\n var isToolbaractive = closest(activeElm, '.e-rte-toolbar');\n if (activeElm === this.parent.getToolbarElement() || isToolbaractive === this.parent.getToolbarElement()) {\n var toolbarItem = this.parent.getToolbarElement().querySelectorAll('.e-expended-nav');\n for (var i = 0; i < toolbarItem.length; i++) {\n if (isNOU(this.parent.getToolbarElement().querySelector('.e-insert-table-btn'))) {\n toolbarItem[i].setAttribute('tabindex', '0');\n }\n else {\n toolbarItem[i].setAttribute('tabindex', '1');\n }\n }\n }\n };\n Toolbar.prototype.tbKeydownHandler = function (e) {\n if (e.target.classList.contains('e-dropdown-btn') ||\n e.target.getAttribute('id') === this.parent.getID() + '_toolbar_CreateTable') {\n e.target.setAttribute('tabindex', '0');\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (e) {\n var trg = closest(e.originalEvent.target, '.e-hor-nav');\n if (trg && this.parent.toolbarSettings.type === ToolbarType.Expand && !isNOU(trg)) {\n var extendedTbar = this.tbElement.querySelector('.e-toolbar-extended');\n if (!isNOU(extendedTbar)) {\n setStyleAttribute(extendedTbar, { maxHeight: '', display: 'block' });\n setStyleAttribute(extendedTbar, { maxHeight: extendedTbar.offsetHeight + 'px', display: '' });\n }\n if (!trg.classList.contains('e-nav-active')) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', false);\n }\n else {\n addClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', true);\n }\n }\n else if (Browser.isDevice || this.parent.inlineMode.enable) {\n this.isToolbar = true;\n }\n if (isNOU(trg) && this.parent.toolbarSettings.type === ToolbarType.Expand) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n if (this.parent.inlineMode.enable && isIDevice()) {\n return;\n }\n EventHandler.add(this.tbElement, 'focusin', this.tbFocusHandler, this);\n EventHandler.add(this.tbElement, 'keydown', this.tbKeydownHandler, this);\n };\n Toolbar.prototype.unWireEvents = function () {\n EventHandler.remove(this.tbElement, 'focusin', this.tbFocusHandler);\n EventHandler.remove(this.tbElement, 'keydown', this.tbKeydownHandler);\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.dropDownModule = new DropDownButtons(this.parent, this.locator);\n this.toolbarActionModule = new ToolbarAction(this.parent);\n this.parent.on(events.initialEnd, this.renderToolbar, this);\n this.parent.on(events.scroll, this.scrollHandler, this);\n this.parent.on(events.bindOnEnd, this.toolbarBindEvent, this);\n this.parent.on(events.toolbarUpdated, this.updateToolbarStatus, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.refreshBegin, this.onRefresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.enableFullScreen, this.fullScreen, this);\n this.parent.on(events.disableFullScreen, this.hideScreen, this);\n this.parent.on(events.updateToolbarItem, this.updateItem, this);\n this.parent.on(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler, this);\n this.parent.on(events.expandPopupClick, this.parent.setContentHeight, this.parent);\n this.parent.on(events.focusChange, this.focusChangeHandler, this);\n this.parent.on(events.mouseDown, this.mouseDownHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseDownHandler, this);\n this.parent.on(events.bindCssClass, this.setCssClass, this);\n this.parent.on(events.moduleDestroy, this.moduleDestroy, this);\n if (!this.parent.inlineMode.enable && !isIDevice()) {\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderToolbar);\n this.parent.off(events.scroll, this.scrollHandler);\n this.parent.off(events.bindOnEnd, this.toolbarBindEvent);\n this.parent.off(events.toolbarUpdated, this.updateToolbarStatus);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.refreshBegin, this.onRefresh);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.enableFullScreen, this.parent.fullScreenModule.showFullScreen);\n this.parent.off(events.disableFullScreen, this.parent.fullScreenModule.hideFullScreen);\n this.parent.off(events.updateToolbarItem, this.updateItem);\n this.parent.off(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler);\n this.parent.off(events.expandPopupClick, this.parent.setContentHeight);\n this.parent.off(events.focusChange, this.focusChangeHandler);\n this.parent.off(events.mouseDown, this.mouseDownHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseDownHandler);\n this.parent.off(events.bindCssClass, this.setCssClass);\n this.parent.off(events.moduleDestroy, this.moduleDestroy);\n if (!this.parent.inlineMode.enable && !isIDevice()) {\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n }\n };\n // eslint-disable-next-line @typescript-eslint/tslint/config\n Toolbar.prototype.setCssClass = function (e) {\n if (this.toolbarObj && e.cssClass) {\n if (isNullOrUndefined(e.oldCssClass)) {\n this.toolbarObj.setProperties({ cssClass: (this.toolbarObj.cssClass + ' ' + e.cssClass).trim() });\n }\n else {\n this.toolbarObj.setProperties({ cssClass: (this.toolbarObj.cssClass.replace(e.oldCssClass, '').trim() + ' ' + e.cssClass).trim() });\n }\n }\n };\n Toolbar.prototype.onRefresh = function () {\n if (!this.parent.inlineMode.enable) {\n this.refreshToolbarOverflow();\n }\n this.parent.setContentHeight('', true);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} e - specifies the string value\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.inlineMode)) {\n for (var _i = 0, _a = Object.keys(e.newProp.inlineMode); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enable':\n this.refreshToolbar();\n break;\n }\n }\n }\n if (e.module !== this.getModuleName()) {\n return;\n }\n this.refreshToolbar();\n };\n Toolbar.prototype.refreshToolbar = function () {\n if (isNullOrUndefined(this.baseToolbar.toolbarObj)) {\n this.baseToolbar = this.parent.getBaseToolbarObject();\n }\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (tbElement || tbWrapper) {\n this.destroyToolbar();\n }\n if (this.parent.toolbarSettings.enable) {\n this.addEventListener();\n this.renderToolbar();\n this.parent.wireScrollElementsEvents();\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n this.parent.notify(events.dynamicModule, {});\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","/**\n * Defines common util methods used by Rich Text Editor.\n */\nimport { isNullOrUndefined, Browser, createElement, detach } from '@syncfusion/ej2-base';\nvar inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\n/**\n * @returns {void}\n * @hidden\n */\nexport function isIDevice() {\n var result = false;\n if (Browser.isDevice && Browser.isIos) {\n result = true;\n }\n return result;\n}\n/**\n * @param {Element} editableElement - specifies the editable element.\n * @param {string} selector - specifies the string values.\n * @returns {void}\n * @hidden\n */\nexport function setEditFrameFocus(editableElement, selector) {\n if (editableElement.nodeName === 'BODY' && !isNullOrUndefined(selector)) {\n var iframe = top.window.document.querySelector(selector);\n if (!isNullOrUndefined(iframe)) {\n iframe.contentWindow.focus();\n }\n }\n}\n/**\n * @param {string} value - specifies the string value\n * @param {string} enterAction - specifies the enter key action API\n * @returns {void}\n * @hidden\n */\nexport function updateTextNode(value, enterAction) {\n var tempNode = document.createElement('div');\n tempNode.innerHTML = value;\n tempNode.setAttribute('class', 'tempDiv');\n var resultElm = document.createElement('div');\n var childNodes = tempNode.childNodes;\n if (childNodes.length > 0) {\n var isPreviousInlineElem = void 0;\n var previousParent = void 0;\n var paraElm = void 0;\n while (tempNode.firstChild) {\n if ((tempNode.firstChild.nodeName === '#text' &&\n (tempNode.firstChild.textContent.indexOf('\\n') < 0 || tempNode.firstChild.textContent.trim() !== '')) ||\n inlineNode.indexOf(tempNode.firstChild.nodeName.toLocaleLowerCase()) >= 0) {\n if (!isPreviousInlineElem) {\n if (enterAction === 'BR') {\n resultElm.appendChild(tempNode.firstChild);\n previousParent = resultElm;\n }\n else {\n paraElm = createElement('p');\n resultElm.appendChild(paraElm);\n paraElm.appendChild(tempNode.firstChild);\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n }\n else {\n previousParent.appendChild(tempNode.firstChild);\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n }\n else if (tempNode.firstChild.nodeName === '#text' && (tempNode.firstChild.textContent === '\\n' ||\n (tempNode.firstChild.textContent.indexOf('\\n') >= 0 && tempNode.firstChild.textContent.trim() === ''))) {\n detach(tempNode.firstChild);\n }\n else {\n resultElm.appendChild(tempNode.firstChild);\n isPreviousInlineElem = false;\n }\n }\n var tableElm = resultElm.querySelectorAll('table');\n for (var i = 0; i < tableElm.length; i++) {\n if (tableElm[i].getAttribute('border') === '0') {\n tableElm[i].removeAttribute('border');\n }\n var tdElm = tableElm[i].querySelectorAll('td');\n for (var j = 0; j < tdElm.length; j++) {\n if (tdElm[j].style.borderLeft === 'none') {\n tdElm[j].style.removeProperty('border-left');\n }\n if (tdElm[j].style.borderRight === 'none') {\n tdElm[j].style.removeProperty('border-right');\n }\n if (tdElm[j].style.borderBottom === 'none') {\n tdElm[j].style.removeProperty('border-bottom');\n }\n if (tdElm[j].style.borderTop === 'none') {\n tdElm[j].style.removeProperty('border-top');\n }\n if (tdElm[j].style.border === 'none') {\n tdElm[j].style.removeProperty('border');\n }\n }\n if (!tableElm[i].classList.contains('e-rte-table')) {\n tableElm[i].classList.add('e-rte-table');\n }\n }\n var imageElm = resultElm.querySelectorAll('img');\n for (var i = 0; i < imageElm.length; i++) {\n if (!imageElm[i].classList.contains('e-rte-image')) {\n imageElm[i].classList.add('e-rte-image');\n }\n if (!(imageElm[i].classList.contains('e-imginline') ||\n imageElm[i].classList.contains('e-imgbreak'))) {\n imageElm[i].classList.add('e-imginline');\n }\n }\n }\n return resultElm.innerHTML;\n}\n/**\n * @param {Node} startChildNodes - specifies the node\n * @returns {void}\n * @hidden\n */\nexport function getLastTextNode(startChildNodes) {\n var finalNode = startChildNodes;\n do {\n if (finalNode.childNodes.length > 0) {\n finalNode = finalNode.childNodes[0];\n }\n } while (finalNode.childNodes.length > 0);\n return finalNode;\n}\n/**\n * @returns {void}\n * @hidden\n */\nexport function getDefaultHtmlTbStatus() {\n return {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n unorderedlist: false,\n numberFormatList: false,\n bulletFormatList: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null,\n createlink: false,\n insertcode: false\n };\n}\n/**\n * @returns {void}\n * @hidden\n */\nexport function getDefaultMDTbStatus() {\n return {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n uppercase: false,\n lowercase: false,\n inlinecode: false,\n unorderedlist: false,\n formats: null\n };\n}\n","import { EventHandler, detach, isNullOrUndefined, select, extend, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { closest, addClass, removeClass, Browser } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_RTE_ELEMENTS } from '../base/classes';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent, parseHtml } from '../base/util';\nimport { isIDevice } from '../../common/util';\n/**\n * `Link` module is used to handle undo actions.\n */\nvar Link = /** @class */ (function () {\n function Link(parent, serviceLocator) {\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.addEventListener();\n this.serviceLocator = serviceLocator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n }\n Link.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.insertLink, this.linkDialog, this);\n this.parent.on(events.showLinkDialog, this.showDialog, this);\n this.parent.on(events.closeLinkDialog, this.closeDialog, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertCompleted, this.showLinkQuickToolbar, this);\n this.parent.on(events.clearDialogObj, this.clearDialogObj, this);\n this.parent.on(events.linkToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.unLink, this.removeLink, this);\n this.parent.on(events.editLink, this.editLink, this);\n this.parent.on(events.openLink, this.openLink, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.bindCssClass, this.setCssClass, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.moduleDestroy, this.moduleDestroy, this);\n };\n Link.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'OpenLink':\n this.parent.notify(events.openLink, args);\n break;\n case 'EditLink':\n this.parent.notify(events.editLink, args);\n break;\n case 'RemoveLink':\n this.parent.notify(events.unLink, args);\n break;\n }\n };\n Link.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.insertLink, this.linkDialog);\n this.parent.off(events.showLinkDialog, this.showDialog);\n this.parent.off(events.closeLinkDialog, this.closeDialog);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.insertCompleted, this.showLinkQuickToolbar);\n this.parent.off(events.clearDialogObj, this.clearDialogObj);\n this.parent.off(events.linkToolbarAction, this.onToolbarAction);\n this.parent.off(events.unLink, this.removeLink);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.editLink, this.editLink);\n this.parent.off(events.openLink, this.openLink);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.bindCssClass, this.setCssClass);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.moduleDestroy, this.moduleDestroy);\n };\n Link.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Link.prototype.updateCss = function (currentObj, e) {\n if (currentObj && e.cssClass) {\n if (isNullOrUndefined(e.oldCssClass)) {\n currentObj.setProperties({ cssClass: (currentObj.cssClass + ' ' + e.cssClass).trim() });\n }\n else {\n currentObj.setProperties({ cssClass: (currentObj.cssClass.replace(e.oldCssClass, '').trim() + ' ' + e.cssClass).trim() });\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/tslint/config\n Link.prototype.setCssClass = function (e) {\n this.updateCss(this.checkBoxObj, e);\n this.updateCss(this.dialogObj, e);\n };\n Link.prototype.showLinkQuickToolbar = function (e) {\n if (!isNullOrUndefined(e.args) && e.args.action !== 'enter' &&\n e.args.action !== 'space') {\n var pageX = void 0;\n var pageY = void 0;\n if (e.type !== 'Links' || isNullOrUndefined(this.parent.quickToolbarModule) ||\n isNullOrUndefined(this.parent.quickToolbarModule.linkQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var parentTop = this.parent.element.getBoundingClientRect().top;\n var parentLeft = this.parent.element.getBoundingClientRect().left;\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var target_1;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target_1 = ((element.nodeName === '#text') ? (element.parentNode) : element);\n }\n });\n if (e.isNotify) {\n var tbElement = this.parent.toolbarModule.getToolbarElement();\n var linkTop = target_1.getBoundingClientRect().top;\n var linkLeft = target_1.getBoundingClientRect().left;\n var linkPos = linkTop - parentTop;\n var tbHeight = (tbElement) ? (tbElement.offsetHeight + this.parent.toolbarModule.getExpandTBarPopHeight()) : 0;\n pageX = (this.parent.iframeSettings.enable) ? parentLeft + linkLeft : target_1.getBoundingClientRect().left;\n pageY = window.pageYOffset + ((this.parent.iframeSettings.enable) ?\n (parentTop + tbHeight + linkTop) : (parentTop + linkPos));\n }\n else {\n var args = void 0;\n args = e.args.touches ? e.args.changedTouches[0] : args = e.args;\n pageX = (this.parent.iframeSettings.enable) ? window.pageXOffset + parentLeft + args.clientX : args.pageX;\n pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + parentTop + args.clientY : args.pageY;\n }\n if (this.quickToolObj.linkQTBar) {\n this.quickToolObj.linkQTBar.showPopup(pageX, pageY, range.endContainer);\n }\n }\n };\n Link.prototype.hideLinkQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.linkQTBar && document.body.contains(this.quickToolObj.linkQTBar.element)) {\n this.quickToolObj.linkQTBar.hidePopup();\n }\n };\n Link.prototype.editAreaClickHandler = function (e) {\n if (this.parent.readonly) {\n this.hideLinkQuickToolbar();\n return;\n }\n var args = e.args;\n var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;\n if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.linkQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n target = this.getAnchorNode(target);\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.linkQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'A' && (target.childNodes.length > 0 && target.childNodes[0].nodeName !== 'IMG') &&\n e.args.target.nodeName !== 'IMG' &&\n !isNOU(closest(this.parent.getRange().startContainer.parentElement, 'A')) && !isNOU(closest(this.parent.getRange().endContainer.parentElement, 'A'))) {\n if (isPopupOpen) {\n return;\n }\n this.showLinkQuickToolbar({\n args: args,\n isNotify: false,\n type: 'Links',\n elements: [args.target]\n });\n }\n else {\n this.hideLinkQuickToolbar();\n }\n }\n };\n Link.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'insert-link':\n this.openDialog(true, event);\n originalEvent.preventDefault();\n break;\n }\n };\n Link.prototype.openDialog = function (isInternal, event) {\n if (!isInternal) {\n this.parent.contentModule.getEditPanel().focus();\n }\n if (this.parent.editorMode === 'HTML') {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n var selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var eventArgs = {\n args: event ? event.args : {\n item: { command: 'Links', subCommand: 'CreateLink' },\n originalEvent: undefined,\n name: !isInternal ? 'showDialog' : null\n },\n selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n };\n this.linkDialog(eventArgs);\n }\n else {\n var textArea = this.parent.contentModule.getEditPanel();\n this.parent.formatter.editorManager.markdownSelection.save(textArea.selectionStart, textArea.selectionEnd);\n this.linkDialog({\n args: {\n item: { command: 'Links', subCommand: 'Link' },\n originalEvent: event && event.args\n },\n member: 'link',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertLink'\n });\n }\n };\n Link.prototype.showDialog = function () {\n this.openDialog(false);\n this.setCssClass({ cssClass: this.parent.cssClass });\n };\n Link.prototype.closeDialog = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Link.prototype.clearDialogObj = function () {\n if (this.dialogObj) {\n this.dialogObj.destroy();\n detach(this.dialogObj.element);\n this.dialogObj = null;\n }\n };\n Link.prototype.linkDialog = function (e, inputDetails) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n if (this.parent.editorMode === 'HTML' && (e.selectParent.length > 0 &&\n !isNullOrUndefined(e.selectParent[0].classList) &&\n e.selectParent[0].classList.contains('e-rte-anchor')) && isNullOrUndefined(inputDetails)) {\n this.editLink(e);\n return;\n }\n var linkWebAddress = this.i10n.getConstant('linkWebUrl');\n var linkDisplayText = this.i10n.getConstant('linkText');\n var linkTooltip = this.i10n.getConstant('linkTooltipLabel');\n var urlPlace = this.i10n.getConstant('linkurl');\n var textPlace = this.i10n.getConstant('textPlaceholder');\n var title = this.i10n.getConstant('linkTitle');\n var linkDialogEle = this.parent.createElement('div', {\n className: 'e-rte-link-dialog' + ' ' + this.parent.cssClass, id: this.rteID + '_rtelink'\n });\n this.parent.element.appendChild(linkDialogEle);\n var linkContent = this.parent.createElement('div', {\n className: 'e-rte-linkcontent' + ' ' + this.parent.cssClass, id: this.rteID + '_linkContent'\n });\n var htmlTextbox = (this.parent.editorMode === 'HTML') ? '
' +\n '
' +\n '
' + '
' +\n '
' : '';\n var content = '
' + '
' +\n '
' +\n '
' + '
' +\n '' +\n '
' + htmlTextbox;\n var contentElem = parseHtml(content);\n linkContent.appendChild(contentElem);\n var linkTarget = linkContent.querySelector('.e-rte-linkTarget');\n var linkUrl = linkContent.querySelector('.e-rte-linkurl');\n var linkText = linkContent.querySelector('.e-rte-linkText');\n var linkTitle = linkContent.querySelector('.e-rte-linkTitle');\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({ label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl,\n cssClass: this.parent.cssClass });\n this.checkBoxObj.isStringTemplate = true;\n this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n var selectText = (this.parent.editorMode === 'HTML') ?\n e.selection.getRange(this.parent.contentModule.getDocument()).toString() : e.text;\n var linkInsert = this.i10n.getConstant('dialogInsert');\n var linkCancel = this.i10n.getConstant('dialogCancel');\n var selection = e.selection;\n var selectObj = { selfLink: this, selection: e.selection, selectParent: e.selectParent, args: e.args };\n var dialogModel = {\n header: this.i10n.getConstant('linkHeader'),\n content: linkContent,\n cssClass: CLS_RTE_ELEMENTS + ' ' + this.parent.cssClass,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '310px',\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertlink.bind(selectObj),\n buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink' + ' ' + this.parent.cssClass, isPrimary: true }\n },\n { click: this.cancelDialog.bind(selectObj), buttonModel: { cssClass: 'e-flat' + ' ' + this.parent.cssClass, content: linkCancel } }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n var args = _this.dialogObj;\n _this.dialogRenderObj.close(args);\n _this.dialogObj = null;\n }\n };\n // eslint-disable-next-line\n this.dialogObj = this.dialogRenderObj.render(dialogModel);\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(linkDialogEle);\n linkDialogEle.style.maxHeight = 'inherit';\n if (isNullOrUndefined(this.dialogObj)) {\n return;\n }\n if (!isNullOrUndefined(inputDetails)) {\n linkUrl.value = inputDetails.url;\n linkText.value = inputDetails.text;\n linkTitle.value = inputDetails.title;\n // eslint-disable-next-line\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n this.dialogObj.element.querySelector('.e-insertLink').textContent = inputDetails.btnText;\n }\n this.checkUrl(false);\n if ((this.parent.editorMode === 'HTML' && isNullOrUndefined(inputDetails) && ((!isNullOrUndefined(selectText)\n && selectText !== '') && (e.selection.range.startOffset === 0) || e.selection.range.startOffset !==\n e.selection.range.endOffset)) || e.module === 'Markdown') {\n linkText.value = selectText;\n }\n EventHandler.add(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick, this);\n if (this.quickToolObj) {\n this.hideLinkQuickToolbar();\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n // eslint-disable-next-line\n Link.prototype.insertlink = function (e) {\n var linkEle = this.selfLink.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl').value;\n var linkText = linkEle.querySelector('.e-rte-linkText').value;\n var linkTitle;\n if (this.selfLink.parent.editorMode === 'HTML') {\n linkTitle = linkEle.querySelector('.e-rte-linkTitle').value;\n }\n var target = (this.selfLink.checkBoxObj.checked) ? '_blank' : null;\n if (linkUrl === '') {\n this.selfLink.checkUrl(true);\n return;\n }\n if (!this.selfLink.isUrl(linkUrl)) {\n linkText = (linkText === '') ? linkUrl : linkText;\n if (!this.selfLink.parent.enableAutoUrl) {\n linkUrl = linkUrl.indexOf('http') > -1 ? linkUrl : 'http://' + linkUrl;\n }\n else {\n // eslint-disable-next-line\n linkUrl = linkUrl;\n }\n }\n else {\n this.selfLink.checkUrl(false);\n }\n var proxy = this.selfLink;\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '[id='\n // eslint-disable-next-line\n + \"'\" + proxy.parent.contentModule.getPanel().id + \"'\" + ']'))) {\n proxy.parent.contentModule.getEditPanel().focus();\n if (Browser.isIE && proxy.parent.iframeSettings.enable) {\n this.selection.restore();\n }\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.parent.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var value = {\n url: linkUrl, text: linkText, title: linkTitle, target: target,\n selection: this.selection, selectParent: this.selectParent\n };\n if (document.body.contains(proxy.dialogObj.element)) {\n this.selfLink.dialogObj.hide({ returnValue: false });\n }\n if (isIDevice() && proxy.parent.iframeSettings.enable) {\n select('iframe', proxy.parent.element).contentWindow.focus();\n }\n if (proxy.parent.editorMode === 'HTML') {\n this.selection.restore();\n }\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n var argsValue;\n if (!isNullOrUndefined(this.args) &&\n this.args.code === 'KeyK') {\n var originalEvent = this.args;\n extend(this.args, { item: { command: 'Links', subCommand: 'CreateLink' }, originalEvent: originalEvent }, true);\n var argsVal = {\n item: { command: 'Links', subCommand: 'CreateLink' }, originalEvent: originalEvent\n };\n argsValue = argsVal;\n }\n else {\n argsValue = this.args;\n }\n this.selfLink.parent.formatter.process(this.selfLink.parent, argsValue, (!isNullOrUndefined(this.args) &&\n this.args.originalEvent), value);\n this.selfLink.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.isUrl = function (url) {\n // eslint-disable-next-line\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Link.prototype.checkUrl = function (e) {\n var linkEle = this.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl');\n if (e) {\n addClass([linkUrl], 'e-error');\n linkUrl.setSelectionRange(0, linkUrl.value.length);\n linkUrl.focus();\n }\n else {\n removeClass([linkUrl], 'e-error');\n }\n };\n Link.prototype.removeLink = function (e) {\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n var selectParentEle = this.getAnchorNode(e.selectParent[0]);\n this.parent.formatter.process(this.parent, e.args, e.args, {\n selectNode: e.selectNode, selectParent: e.selectParent, selection: e.selection,\n text: selectParentEle.innerText,\n subCommand: e.args.item.subCommand\n });\n if (isIDevice() && this.parent.iframeSettings.enable) {\n select('iframe', this.parent.element).contentWindow.focus();\n }\n else {\n this.parent.contentModule.getEditPanel().focus();\n }\n this.hideLinkQuickToolbar();\n };\n Link.prototype.openLink = function (e) {\n var selectParentEle = this.getAnchorNode(e.selectParent[0]);\n if (selectParentEle.classList.contains('e-rte-anchor') || selectParentEle.tagName === 'A') {\n this.parent.formatter.process(this.parent, e.args, e.args, {\n url: selectParentEle.href, text: selectParentEle.innerText,\n target: selectParentEle.target === '' ? '_self' : '_blank', selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n }\n };\n Link.prototype.getAnchorNode = function (element) {\n var selectParent = closest(element, 'a');\n return (selectParent ? selectParent : element);\n };\n Link.prototype.editLink = function (e) {\n var selectedNode = this.getAnchorNode(e.selectNode[0]);\n var selectParentEle = this.getAnchorNode(e.selectParent[0]);\n selectParentEle = selectedNode.nodeName === 'A' ? selectedNode : selectParentEle;\n if (selectParentEle.classList.contains('e-rte-anchor') || selectParentEle.tagName === 'A') {\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.getAttribute('href'), text: selectParentEle.innerText,\n title: selectParentEle.title, target: selectParentEle.target,\n header: this.i10n.getConstant('editLink'), btnText: linkUpdate\n };\n this.linkDialog(e, inputDetails);\n }\n };\n // eslint-disable-next-line\n Link.prototype.cancelDialog = function (e) {\n this.selfLink.parent.isBlur = false;\n this.selfLink.dialogObj.hide({ returnValue: true });\n if (isIDevice()) {\n this.selection.restore();\n }\n else {\n this.selfLink.parent.contentModule.getEditPanel().focus();\n }\n };\n Link.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.dialogObj) && ((\n // eslint-disable-next-line\n !closest(target, '[id=' + \"'\" + this.dialogObj.element.id + \"'\" + ']') && this.parent.toolbarSettings.enable &&\n this.parent.getToolbarElement() && !this.parent.getToolbarElement().contains(e.target)) ||\n (((this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target)) ||\n this.parent.inlineMode.enable && !closest(target, '#' + this.dialogObj.element.id)) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_CreateLink') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_CreateLink')))) {\n this.dialogObj.hide({ returnValue: true });\n EventHandler.remove(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick);\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n Link.prototype.destroy = function () {\n this.removeEventListener();\n };\n Link.prototype.moduleDestroy = function () {\n this.parent = null;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\n */\n Link.prototype.getModuleName = function () {\n return 'link';\n };\n return Link;\n}());\nexport { Link };\n","import { extend, isNullOrUndefined as isNOU, Browser } from '@syncfusion/ej2-base';\nimport * as CONSTANT from '../base/constant';\nimport { updateUndoRedoStatus, isIDevice } from '../base/util';\nimport { KEY_DOWN, KEY_UP } from './../../common/constant';\n/**\n * Formatter\n *\n * @hidden\n\n */\nvar Formatter = /** @class */ (function () {\n function Formatter() {\n }\n /**\n * To execute the command\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @param {ActionBeginEventArgs} args - specifies the event arguments.\n * @param {MouseEvent|KeyboardEvent} event - specifies the keyboard event.\n * @param {IItemCollectionArgs} value - specifies the collection arguments\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.process = function (self, args, event, value) {\n var _this = this;\n var selection = self.contentModule.getDocument().getSelection();\n var range = (selection.rangeCount > 0) ? selection.getRangeAt(selection.rangeCount - 1) : null;\n var saveSelection;\n var isKeyboardVideoInsert = (!isNOU(value) && !isNOU(value.cssClass) &&\n value.cssClass !== 'e-video-inline');\n if (self.editorMode === 'HTML') {\n if (!isNOU(args) && !isKeyboardVideoInsert) {\n if (isNOU(args.name) || (!isNOU(args.name) && args.name !== 'showDialog')) {\n saveSelection = this.editorManager.nodeSelection.save(range, self.contentModule.getDocument());\n }\n }\n }\n if (!isNOU(args)\n && args.item.command\n && args.item.command !== 'Table'\n && args.item.command !== 'Actions'\n && args.item.command !== 'Links'\n && args.item.command !== 'Images'\n && args.item.command !== 'Files'\n && args.item.command !== 'Audios'\n && args.item.command !== 'Videos'\n && args.item.command !== 'EmojiPicker'\n && range\n && !(self.contentModule.getEditPanel().contains(this.getAncestorNode(range.commonAncestorContainer))\n || self.contentModule.getEditPanel() === range.commonAncestorContainer\n || self.contentModule.getPanel() === range.commonAncestorContainer)) {\n return;\n }\n if (!isNOU(args) && self.maxLength !== -1 && !isNOU(args.item.command)) {\n var currentInsertContentLength = 0;\n if (args.item.command === 'Links') {\n currentInsertContentLength = value.text.length === 0 ? value.url.length : value.text.length;\n }\n if (args.item.command === 'Images' || args.item.command === 'Videos' || args.item.command === 'Table' || args.item.command === 'Files') {\n currentInsertContentLength = 1;\n }\n var currentLength = self.getText().trim().length;\n var selectionLength = self.getSelection().length;\n var totalLength = (currentLength - selectionLength) + currentInsertContentLength;\n if (!(self.maxLength === -1 || totalLength <= self.maxLength)) {\n return;\n }\n }\n if (isNOU(args)) {\n var action_1 = event.action;\n if (action_1 !== 'tab' && action_1 !== 'enter' && action_1 !== 'space' && action_1 !== 'escape') {\n args = {};\n if (self.editorMode === 'Markdown' && action_1 === 'insert-table') {\n value = {\n 'headingText': self.localeObj.getConstant('TableHeadingText'),\n 'colText': self.localeObj.getConstant('TableColText')\n };\n }\n var items = {\n originalEvent: event, cancel: false,\n requestType: action_1 || (event.key + 'Key'),\n itemCollection: value\n };\n extend(args, args, items, true);\n self.trigger(CONSTANT.actionBegin, args, function (actionBeginArgs) {\n if (actionBeginArgs.cancel) {\n if (action_1 === 'paste' || action_1 === 'cut' || action_1 === 'copy') {\n event.preventDefault();\n }\n }\n });\n }\n var isTableModule = isNOU(self.tableModule) ? true : self.tableModule ?\n self.tableModule.ensureInsideTableList : false;\n if ((event.which === 9 && isTableModule) || event.which !== 9) {\n if (event.which === 13 && self.editorMode === 'HTML') {\n value = {\n 'enterAction': self.enterKey\n };\n }\n this.editorManager.observer.notify((event.type === 'keydown' ? KEY_DOWN : KEY_UP), {\n event: event,\n callBack: this.onSuccess.bind(this, self),\n value: value,\n enterAction: self.enterKey\n });\n }\n }\n else if (!isNOU(args) && args.item.command && args.item.subCommand && ((args.item.command !== args.item.subCommand\n && args.item.command !== 'Font')\n || ((args.item.subCommand === 'FontName' || args.item.subCommand === 'FontSize') && args.name === 'dropDownSelect')\n || ((args.item.subCommand === 'BackgroundColor' || args.item.subCommand === 'FontColor')\n && args.name === 'colorPickerChanged') || args.item.subCommand === 'FormatPainter' || args.item.subCommand === 'EmojiPicker')) {\n extend(args, args, { requestType: args.item.subCommand, cancel: false, itemCollection: value, selectType: args.name }, true);\n self.trigger(CONSTANT.actionBegin, args, function (actionBeginArgs) {\n if (!actionBeginArgs.cancel) {\n var formatPainterCopy = !isNOU(actionBeginArgs.requestType) && actionBeginArgs.requestType === 'FormatPainter' && actionBeginArgs.name === 'format-copy';\n var formatPainterPaste = !isNOU(actionBeginArgs.requestType) && actionBeginArgs.requestType === 'FormatPainter' && actionBeginArgs.name === 'format-paste';\n if ((_this.getUndoRedoStack().length === 0 && actionBeginArgs.item.command !== 'Links' && actionBeginArgs.item.command !== 'Images' && !formatPainterCopy)\n || formatPainterPaste) {\n _this.saveData();\n }\n self.isBlur = false;\n self.contentModule.getEditPanel().focus();\n if (self.editorMode === 'HTML' && !isKeyboardVideoInsert) {\n if (isNOU(args.selectType) || (!isNOU(args.selectType) && args.selectType !== 'showDialog')) {\n saveSelection.restore();\n }\n }\n var command = actionBeginArgs.item.subCommand.toLocaleLowerCase();\n if (command === 'paste' || command === 'cut' || command === 'copy') {\n self.clipboardAction(command, event);\n }\n else {\n _this.editorManager.observer.notify(CONSTANT.checkUndo, { subCommand: actionBeginArgs.item.subCommand });\n _this.editorManager.execCommand(actionBeginArgs.item.command, actionBeginArgs.item.subCommand, event, _this.onSuccess.bind(_this, self), actionBeginArgs.item.value, actionBeginArgs.item.subCommand === 'Pre' && actionBeginArgs.selectType === 'dropDownSelect' ?\n { name: actionBeginArgs.selectType } : value, ('#' + self.getID() + ' iframe'), self.enterKey);\n }\n }\n });\n }\n if ((isNOU(event) || event && event.action !== 'copy')) {\n this.enableUndo(self);\n }\n };\n Formatter.prototype.getAncestorNode = function (node) {\n node = node.nodeType === 3 ? node.parentNode : node;\n return node;\n };\n /**\n * onKeyHandler method\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.onKeyHandler = function (self, e) {\n var _this = this;\n this.editorManager.observer.notify(KEY_UP, {\n event: e, callBack: function () {\n self.notify(CONSTANT.contentChanged, {});\n _this.enableUndo(self);\n }\n });\n };\n /**\n * onSuccess method\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @param {IMarkdownFormatterCallBack} events - specifies the event call back\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.onSuccess = function (self, events) {\n self.notify(CONSTANT.contentChanged, {});\n if (events && (isNOU(events.event) || events.event.action !== 'copy')) {\n this.enableUndo(self);\n self.notify(CONSTANT.execCommandCallBack, events);\n }\n self.trigger(CONSTANT.actionComplete, events, function (callbackArgs) {\n self.setPlaceHolder();\n if ((callbackArgs.requestType === 'Images' || callbackArgs.requestType === 'Links' || callbackArgs.requestType === 'Audios' || callbackArgs.requestType === 'Videos') && self.editorMode === 'HTML') {\n var args = callbackArgs;\n if (callbackArgs.requestType === 'Links' && callbackArgs.event &&\n callbackArgs.event.type === 'keydown' &&\n callbackArgs.event.keyCode === 32) {\n return;\n }\n self.notify(CONSTANT.insertCompleted, {\n args: args.event, type: callbackArgs.requestType, isNotify: true,\n elements: args.elements\n });\n }\n if (callbackArgs.requestType === 'VideosPlayPause') {\n self.notify('editAreaClick', { args: event });\n }\n self.autoResize();\n });\n };\n /**\n * Save the data for undo and redo action.\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.saveData = function (e) {\n this.editorManager.undoRedoManager.saveData(e);\n };\n /**\n * getUndoStatus method\n *\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.getUndoStatus = function () {\n return this.editorManager.undoRedoManager.getUndoStatus();\n };\n /* eslint-disable */\n /**\n * getUndoRedoStack method\n *\n * @param {IHtmlUndoRedoData} - specifies the redo data.\n * @returns {void}\n * @hidden\n\n */\n /* eslint-enable */\n Formatter.prototype.getUndoRedoStack = function () {\n return this.editorManager.undoRedoManager.undoRedoStack;\n };\n /**\n * enableUndo method\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.enableUndo = function (self) {\n var status = this.getUndoStatus();\n if (self.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n updateUndoRedoStatus(self.quickToolbarModule.inlineQTBar.quickTBarObj, status);\n }\n else {\n if (self.toolbarModule) {\n updateUndoRedoStatus(self.toolbarModule.baseToolbar, status);\n }\n }\n };\n return Formatter;\n}());\nexport { Formatter };\n","/**\n * Constant values for EditorManager\n */\n/**\n * Image plugin events\n *\n * @hidden\n */\nexport var IMAGE = 'INSERT-IMAGE';\nexport var AUDIO = 'INSERT-AUDIO';\nexport var VIDEO = 'INSERT-VIDEO';\nexport var TABLE = 'INSERT-TABLE';\nexport var LINK = 'INSERT-LINK';\nexport var INSERT_ROW = 'INSERT-ROW';\nexport var INSERT_COLUMN = 'INSERT-COLUMN';\nexport var DELETEROW = 'DELETE-ROW';\nexport var DELETECOLUMN = 'DELETE-COLUMN';\nexport var REMOVETABLE = 'REMOVE-TABLE';\nexport var TABLEHEADER = 'TABLE-HEADER';\nexport var TABLE_VERTICAL_ALIGN = 'TABLE_VERTICAL_ALIGN';\nexport var TABLE_MERGE = 'TABLE_MERGE';\nexport var TABLE_VERTICAL_SPLIT = 'TABLE_VERTICAL_SPLIT';\nexport var TABLE_HORIZONTAL_SPLIT = 'TABLE_HORIZONTAL_SPLIT';\nexport var TABLE_MOVE = 'TABLE_MOVE';\n/**\n * Alignments plugin events\n *\n * @hidden\n */\nexport var ALIGNMENT_TYPE = 'alignment-type';\n/**\n * Indents plugin events\n *\n * @hidden\n */\nexport var INDENT_TYPE = 'indent-type';\n/**\n * Constant tag names\n *\n * @hidden\n */\nexport var DEFAULT_TAG = 'p';\n/**\n * @hidden\n */\nexport var BLOCK_TAGS = ['address', 'article', 'aside', 'audio', 'blockquote',\n 'canvas', 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'main', 'nav',\n 'noscript', 'ol', 'output', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul', 'video', 'body'];\n/**\n * @hidden\n */\nexport var IGNORE_BLOCK_TAGS = ['td', 'th'];\n/**\n * @hidden\n */\nexport var TABLE_BLOCK_TAGS = ['table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr'];\n/**\n * Selection plugin events\n *\n * @hidden\n */\nexport var SELECTION_TYPE = 'selection-type';\n/**\n * Insert HTML plugin events\n *\n * @hidden\n */\nexport var INSERTHTML_TYPE = 'inserthtml-type';\n/**\n * Insert Text plugin events\n *\n * @hidden\n */\nexport var INSERT_TEXT_TYPE = 'insert-text-type';\n/**\n * Clear Format HTML plugin events\n *\n * @hidden\n */\nexport var CLEAR_TYPE = 'clear-type';\n/**\n * Self closing tags\n *\n * @hidden\n */\nexport var SELF_CLOSING_TAGS = ['area', 'base', 'br', 'embed', 'hr', 'img', 'input', 'param', 'source', 'track', 'wbr', 'iframe', 'td', 'table'];\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `Selection` module is used to handle RTE Selections.\n */\nvar NodeSelection = /** @class */ (function () {\n function NodeSelection() {\n this.startNodeName = [];\n this.endNodeName = [];\n }\n NodeSelection.prototype.saveInstance = function (range, body) {\n this.range = range.cloneRange();\n this.rootNode = this.documentFromRange(range);\n this.body = body;\n this.startContainer = this.getNodeArray(range.startContainer, true);\n this.endContainer = this.getNodeArray(range.endContainer, false);\n this.startOffset = range.startOffset;\n this.endOffset = range.endOffset;\n this.html = this.body.innerHTML;\n return this;\n };\n NodeSelection.prototype.documentFromRange = function (range) {\n return (9 === range.startContainer.nodeType) ? range.startContainer : range.startContainer.ownerDocument;\n };\n NodeSelection.prototype.getRange = function (docElement) {\n var select = this.get(docElement);\n var range = select && select.rangeCount > 0 ? select.getRangeAt(select.rangeCount - 1) : docElement.createRange();\n return (range.startContainer !== docElement || range.endContainer !== docElement\n || range.startOffset || range.endOffset || (range.setStart(docElement.body, 0),\n range.collapse(!0)),\n range);\n };\n /**\n * get method\n *\n * @param {Document} docElement - specifies the get function\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.get = function (docElement) {\n return docElement.defaultView.getSelection();\n };\n /**\n * save method\n *\n * @param {Range} range - range value.\n * @param {Document} docElement - specifies the document.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.save = function (range, docElement) {\n range = (range) ? range.cloneRange() : this.getRange(docElement);\n return this.saveInstance(range, docElement.body);\n };\n /**\n * getIndex method\n *\n * @param {Node} node - specifies the node value.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getIndex = function (node) {\n var index;\n var num = 0;\n node = !node.previousSibling && node.tagName === 'BR' ? node : node.previousSibling;\n if (node) {\n for (var type = node.nodeType; node; null) {\n index = node.nodeType;\n num++;\n //eslint-disable-next-line\n type = index;\n node = node.previousSibling;\n }\n }\n return num;\n };\n NodeSelection.prototype.isChildNode = function (nodeCollection, parentNode) {\n for (var index = 0; index < parentNode.childNodes.length; index++) {\n if (nodeCollection.indexOf(parentNode.childNodes[index]) > -1) {\n return true;\n }\n }\n return false;\n };\n NodeSelection.prototype.getNode = function (startNode, endNode, nodeCollection) {\n if (endNode === startNode &&\n (startNode.nodeType === 3 || !startNode.firstChild || nodeCollection.indexOf(startNode.firstChild) !== -1\n || this.isChildNode(nodeCollection, startNode))) {\n return null;\n }\n if (nodeCollection.indexOf(startNode.firstChild) === -1 && startNode.firstChild && !this.isChildNode(nodeCollection, startNode)) {\n return startNode.firstChild;\n }\n if (startNode.nextSibling) {\n return startNode.nextSibling;\n }\n if (!startNode.parentNode) {\n return null;\n }\n else {\n return startNode.parentNode;\n }\n };\n /**\n * getNodeCollection method\n *\n * @param {Range} range -specifies the range.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getNodeCollection = function (range) {\n var startNode = range.startContainer.childNodes[range.startOffset]\n || range.startContainer;\n var endNode = range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer;\n if ((startNode === endNode || (startNode.nodeName === 'BR' && startNode === range.endContainer.childNodes[range.endOffset])) &&\n startNode.childNodes.length === 0) {\n return [startNode];\n }\n if (range.startOffset === range.endOffset && range.startOffset !== 0 && range.startContainer.nodeName === 'PRE') {\n return [startNode.nodeName === 'BR' || startNode.nodeName === '#text' ? startNode : startNode.childNodes[0]];\n }\n var nodeCollection = [];\n do {\n if (nodeCollection.indexOf(startNode) === -1) {\n nodeCollection.push(startNode);\n }\n startNode = this.getNode(startNode, endNode, nodeCollection);\n } while (startNode);\n return nodeCollection;\n };\n /**\n * getParentNodeCollection method\n *\n * @param {Range} range - specifies the range value.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getParentNodeCollection = function (range) {\n return this.getParentNodes(this.getNodeCollection(range), range);\n };\n /**\n * getParentNodes method\n *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @param {Range} range - specifies the range values.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getParentNodes = function (nodeCollection, range) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection.indexOf(nodeCollection[index].parentNode) !== -1)\n || (nodeCollection[index].nodeType === 3 &&\n range.startContainer !== range.endContainer &&\n range.startContainer.parentNode !== range.endContainer.parentNode)) {\n nodeCollection.splice(index, 1);\n index--;\n }\n else if (nodeCollection[index].nodeType === 3) {\n nodeCollection[index] = nodeCollection[index].parentNode;\n }\n }\n return nodeCollection;\n };\n /**\n * getSelectionNodeCollection method\n *\n * @param {Range} range - specifies the range value.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getSelectionNodeCollection = function (range) {\n return this.getSelectionNodes(this.getNodeCollection(range));\n };\n /**\n * getSelectionNodeCollection along with BR node method\n *\n * @param {Range} range - specifies the range value.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getSelectionNodeCollectionBr = function (range) {\n return this.getSelectionNodesBr(this.getNodeCollection(range));\n };\n /**\n * getParentNodes method\n *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n // eslint-disable-next-line\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || (nodeCollection[index].textContent.trim() === '' ||\n (nodeCollection[index].textContent.length === 1 && nodeCollection[index].textContent.match(regEx)))) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * Get selection text nodes with br method.\n *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getSelectionNodesBr = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n // eslint-disable-next-line\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeName !== 'BR' &&\n (nodeCollection[index].nodeType !== 3 || (nodeCollection[index].textContent.trim() === '' ||\n (nodeCollection[index].textContent.length === 1 && nodeCollection[index].textContent.match(regEx))))) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * getInsertNodeCollection method\n *\n * @param {Range} range - specifies the range value.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getInsertNodeCollection = function (range) {\n return this.getInsertNodes(this.getNodeCollection(range));\n };\n /**\n * getInsertNodes method\n *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getInsertNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection[index].childNodes.length !== 0 &&\n nodeCollection[index].nodeType !== 3) ||\n (nodeCollection[index].nodeType === 3 &&\n nodeCollection[index].textContent === '')) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * getNodeArray method\n *\n * @param {Node} node - specifies the node content.\n * @param {boolean} isStart - specifies the boolean value.\n * @param {Document} root - specifies the root document.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getNodeArray = function (node, isStart, root) {\n var array = [];\n // eslint-disable-next-line\n ((isStart) ? (this.startNodeName = []) : (this.endNodeName = []));\n for (; node !== (root ? root : this.rootNode); null) {\n if (isNullOrUndefined(node)) {\n break;\n }\n // eslint-disable-next-line\n (isStart) ? this.startNodeName.push(node.nodeName.toLowerCase()) : this.endNodeName.push(node.nodeName.toLowerCase());\n array.push(this.getIndex(node));\n node = node.parentNode;\n }\n return array;\n };\n NodeSelection.prototype.setRangePoint = function (range, isvalid, num, size) {\n var node = this.rootNode;\n var index = num.length;\n var constant = size;\n for (; index--; null) {\n node = node && node.childNodes[num[index]];\n }\n if (node && constant >= 0 && node.nodeName !== 'html') {\n if (node.nodeType === 3 && node.nodeValue.replace(/\\u00a0/g, ' ') === ' ') {\n constant = node.textContent.length;\n }\n range[isvalid ? 'setStart' : 'setEnd'](node, constant);\n }\n return range;\n };\n /**\n * restore method\n *\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.restore = function () {\n var range = this.range.cloneRange();\n range = this.setRangePoint(range, true, this.startContainer, this.startOffset);\n range = this.setRangePoint(range, false, this.endContainer, this.endOffset);\n this.selectRange(this.rootNode, range);\n return range;\n };\n NodeSelection.prototype.selectRange = function (docElement, range) {\n this.setRange(docElement, range);\n this.save(range, docElement);\n };\n /**\n * setRange method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Range} range - specifies the range.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.setRange = function (docElement, range) {\n var selection = this.get(docElement);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n /**\n * setSelectionText method\n *\n * @param {Document} docElement - specifies the documrent\n * @param {Node} startNode - specifies the starting node.\n * @param {Node} endNode - specifies the the end node.\n * @param {number} startIndex - specifies the starting index.\n * @param {number} endIndex - specifies the end index.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.setSelectionText = function (docElement, startNode, endNode, startIndex, endIndex) {\n var range = docElement.createRange();\n range.setStart(startNode, startIndex);\n range.setEnd(endNode, endIndex);\n this.setRange(docElement, range);\n };\n /**\n * setSelectionContents method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Node} element - specifies the node.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.setSelectionContents = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNode(element);\n this.setRange(docElement, range);\n };\n /**\n * setSelectionNode method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Node} element - specifies the node.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.setSelectionNode = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNodeContents(element);\n this.setRange(docElement, range);\n };\n /**\n * getSelectedNodes method\n *\n * @param {Document} docElement - specifies the document.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getSelectedNodes = function (docElement) {\n return this.getNodeCollection(this.getRange(docElement));\n };\n /**\n * Clear method\n *\n * @param {Document} docElement - specifies the document.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.Clear = function (docElement) {\n this.get(docElement).removeAllRanges();\n };\n /**\n * insertParentNode method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Node} newNode - specicfies the new node.\n * @param {Range} range - specifies the range.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.insertParentNode = function (docElement, newNode, range) {\n range.surroundContents(newNode);\n this.selectRange(docElement, range);\n };\n /**\n * setCursorPoint method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Element} element - specifies the element.\n * @param {number} point - specifies the point.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.setCursorPoint = function (docElement, element, point) {\n var range = docElement.createRange();\n var selection = docElement.defaultView.getSelection();\n range.setStart(element, point);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n return NodeSelection;\n}());\nexport { NodeSelection };\n","/**\n * Default Markdown formats config for adapter\n */\nexport var markdownFormatTags = {\n 'h6': '###### ',\n 'h5': '##### ',\n 'h4': '#### ',\n 'h3': '### ',\n 'h2': '## ',\n 'h1': '# ',\n 'blockquote': '> ',\n 'pre': '```\\n',\n 'p': ''\n};\n/**\n * Default selection formats config for adapter\n */\nexport var markdownSelectionTags = {\n 'Bold': '**',\n 'Italic': '*',\n 'StrikeThrough': '~~',\n 'InlineCode': '`',\n 'SubScript': '',\n 'SuperScript': '',\n 'UpperCase': 'A-Z',\n 'LowerCase': 'a-z'\n};\n/**\n * Default Markdown lists config for adapter\n */\nexport var markdownListsTags = {\n 'OL': '1. ',\n 'UL': '- '\n};\n/**\n * Default html key config for adapter\n */\nexport var htmlKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'insert-audio': 'ctrl+shift+a',\n 'insert-video': 'ctrl+shift+v',\n 'insert-table': 'ctrl+shift+e',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'underline': 'ctrl+u',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'indents': 'ctrl+]',\n 'outdents': 'ctrl+[',\n 'html-source': 'ctrl+shift+h',\n 'full-screen': 'ctrl+shift+f',\n 'decrease-fontsize': 'ctrl+shift+<',\n 'increase-fontsize': 'ctrl+shift+>',\n 'justify-center': 'ctrl+e',\n 'justify-full': 'ctrl+j',\n 'justify-left': 'ctrl+l',\n 'justify-right': 'ctrl+r',\n 'clear-format': 'ctrl+shift+r',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o',\n 'space': '32',\n 'enter': '13',\n 'tab': 'tab',\n 'delete': '46',\n 'format-copy': 'alt+shift+c',\n 'format-paste': 'alt+shift+v'\n};\n/**\n * Default markdown key config for adapter\n */\nexport var markdownKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'insert-table': 'ctrl+shift+e',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'full-screen': 'ctrl+shift+f',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o'\n};\n/**\n * PasteCleanup Grouping of similar functionality tags\n */\nexport var pasteCleanupGroupingTags = {\n 'b': ['strong'],\n 'strong': ['b'],\n 'i': ['emp', 'cite'],\n 'emp': ['i', 'cite'],\n 'cite': ['i', 'emp']\n};\n/**\n * PasteCleanup Grouping of similar functionality tags\n */\nexport var listConversionFilters = {\n 'first': 'MsoListParagraphCxSpFirst',\n 'middle': 'MsoListParagraphCxSpMiddle',\n 'last': 'MsoListParagraphCxSpLast'\n};\n/**\n * Dom-Node Grouping of self closing tags\n *\n * @hidden\n */\nexport var selfClosingTags = [\n 'BR',\n 'IMG'\n];\n","import * as CONSTANT from './../base/constant';\nimport { append, detach, createElement, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nimport { selfClosingTags } from '../../common/config';\nimport { getLastTextNode } from '../../common/util';\nexport var markerClassName = {\n startSelection: 'e-editor-select-start',\n endSelection: 'e-editor-select-end'\n};\n/**\n * DOMNode internal plugin\n *\n * @hidden\n\n */\nvar DOMNode = /** @class */ (function () {\n /**\n * Constructor for creating the DOMNode plugin\n *\n * @param {Element} parent - specifies the parent element\n * @param {Document} currentDocument - specifies the current document.\n * @hidden\n\n */\n function DOMNode(parent, currentDocument) {\n this.parent = parent;\n this.nodeSelection = new NodeSelection();\n this.currentDocument = currentDocument;\n }\n /**\n * contents method\n *\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.contents = function (element) {\n return (element && 'IFRAME' !== element.tagName ? Array.prototype.slice.call(element.childNodes || []) : []);\n };\n /**\n * isBlockNode method\n *\n * @param {Element} element - specifies the node element.\n * @returns {boolean} - sepcifies the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n /**\n * isLink method\n *\n * @param {Element} element - specifies the element\n * @returns {boolean} - specifies the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isLink = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && 'a' === element.tagName.toLowerCase()));\n };\n /**\n * blockParentNode method\n *\n * @param {Element} element - specifies the element\n * @returns {Element} - returns the element value\n * @hidden\n\n */\n DOMNode.prototype.blockParentNode = function (element) {\n for (; element && element.parentNode !== this.parent && ((!element.parentNode ||\n !this.hasClass(element.parentNode, 'e-node-inner'))); null) {\n element = element.parentNode;\n if (this.isBlockNode(element)) {\n return element;\n }\n }\n return element;\n };\n /**\n * rawAttributes method\n *\n * @param {Element} element - specifies the element\n * @returns {string} - returns the string value\n * @hidden\n\n */\n DOMNode.prototype.rawAttributes = function (element) {\n var rawAttr = {};\n var attributes = element.attributes;\n if (attributes.length > 0) {\n for (var d = 0; d < attributes.length; d++) {\n var e = attributes[d];\n rawAttr[e.nodeName] = e.value;\n }\n }\n return rawAttr;\n };\n /**\n * attributes method\n *\n * @param {Element} element - sepcifies the element.\n * @returns {string} - returns the string value.\n * @hidden\n\n */\n DOMNode.prototype.attributes = function (element) {\n if (!element) {\n return '';\n }\n var attr = '';\n var rawAttr = this.rawAttributes(element);\n var orderRawAttr = Object.keys(rawAttr).sort();\n for (var e = 0; e < orderRawAttr.length; e++) {\n var attrKey = orderRawAttr[e];\n var attrValue = rawAttr[\"\" + attrKey];\n /* eslint-disable */\n if (attrValue.indexOf(\"'\") < 0 && attrValue.indexOf('\"') >= 0) {\n attr += ' ' + attrKey + \"='\" + attrValue + \"'\";\n }\n else if (attrValue.indexOf('\"') >= 0 && attrValue.indexOf(\"'\") >= 0) {\n /* eslint-enable */\n attrValue = attrValue.replace(/\"/g, '"');\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n else {\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n }\n return attr;\n };\n /**\n * clearAttributes method\n *\n * @param {Element} element - specifies the element\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.clearAttributes = function (element) {\n for (var attr = element.attributes, c = attr.length - 1; c >= 0; c--) {\n var key = attr[c];\n element.removeAttribute(key.nodeName);\n }\n };\n /**\n * openTagString method\n *\n * @param {Element} element - specifies the element.\n * @returns {string} - returns the string\n * @hidden\n\n */\n DOMNode.prototype.openTagString = function (element) {\n return '<' + element.tagName.toLowerCase() + this.attributes(element) + '>';\n };\n /**\n * closeTagString method\n *\n * @param {Element} element - specifies the element\n * @returns {string} - returns the string value\n * @hidden\n\n */\n DOMNode.prototype.closeTagString = function (element) {\n return '';\n };\n /**\n * createTagString method\n *\n * @param {string} tagName - specifies the tag name\n * @param {Element} relativeElement - specifies the relative element\n * @param {string} innerHTML - specifies the string value\n * @returns {string} - returns the string value.\n * @hidden\n\n */\n DOMNode.prototype.createTagString = function (tagName, relativeElement, innerHTML) {\n return '<' + tagName.toLowerCase() + this.attributes(relativeElement) + '>' + innerHTML + '';\n };\n /**\n * isList method\n *\n * @param {Element} element - specifes the element.\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isList = function (element) {\n return !!element && ['UL', 'OL'].indexOf(element.tagName) >= 0;\n };\n /**\n * isElement method\n *\n * @param {Element} element - specifes the element.\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isElement = function (element) {\n return element === this.parent;\n };\n /**\n * isEditable method\n *\n * @param {Element} element - specifes the element.\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isEditable = function (element) {\n return ((!element.getAttribute || element.getAttribute('contenteditable') === 'true')\n && ['STYLE', 'SCRIPT'].indexOf(element.tagName) < 0);\n };\n /**\n * hasClass method\n *\n * @param {Element} element - specifes the element.\n * @param {string} className - specifies the class name value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n DOMNode.prototype.hasClass = function (element, className) {\n return element && element.classList && element.classList.contains(className);\n };\n /**\n * replaceWith method\n *\n * @param {Element} element - specifes the element.\n * @param {string} value - specifies the string value\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.replaceWith = function (element, value) {\n var parentNode = element.parentNode;\n parentNode.insertBefore(this.parseHTMLFragment(value), element);\n detach(element);\n };\n /**\n * parseHTMLFragment method\n *\n * @param {string} value - specifies the string value\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.parseHTMLFragment = function (value) {\n /* eslint-disable */\n var temp = createElement('template');\n temp.innerHTML = value;\n if (temp.content instanceof DocumentFragment) {\n return temp.content;\n }\n else {\n return document.createRange().createContextualFragment(value);\n }\n /* eslint-enable */\n };\n /**\n * wrap method\n *\n * @param {Element} element - specifies the element\n * @param {Element} wrapper - specifies the element.\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.wrap = function (element, wrapper) {\n element.parentNode.insertBefore(wrapper, element);\n wrapper = element.previousSibling;\n wrapper.appendChild(element);\n return wrapper;\n };\n /**\n * insertAfter method\n *\n * @param {Element} newNode - specifies the new node element\n * @param {Element} referenceNode - specifies the referenece node\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n /**\n * wrapInner method\n *\n * @param {Element} parent - specifies the parent element.\n * @param {Element} wrapper - specifies the wrapper element.\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.wrapInner = function (parent, wrapper) {\n parent.appendChild(wrapper);\n wrapper = parent.querySelector('.e-rte-wrap-inner');\n wrapper.classList.remove('e-rte-wrap-inner');\n if (wrapper.classList.length === 0) {\n wrapper.removeAttribute('class');\n }\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n return wrapper;\n };\n /**\n * unWrap method\n *\n * @param {Element} element - specifies the element.\n * @returns {Element} - returns the element.\n * @hidden\n\n */\n DOMNode.prototype.unWrap = function (element) {\n var parent = element.parentNode;\n var unWrapNode = [];\n while (element.firstChild) {\n unWrapNode.push(element.firstChild);\n parent.insertBefore(element.firstChild, element);\n }\n unWrapNode = unWrapNode.length > 0 ? unWrapNode : [element.parentNode];\n parent.removeChild(element);\n return unWrapNode;\n };\n /**\n * getSelectedNode method\n *\n * @param {Element} element - specifies the element\n * @param {number} index - specifies the index value.\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.getSelectedNode = function (element, index) {\n if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 &&\n element.childNodes[index - 1] && element.childNodes[index - 1].nodeType === Node.ELEMENT_NODE &&\n (element.childNodes[index - 1].classList.contains(markerClassName.startSelection) ||\n element.childNodes[index - 1].classList.contains(markerClassName.endSelection))) {\n element = element.childNodes[index - 1];\n }\n else if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 && element.childNodes[index]) {\n element = element.childNodes[index];\n }\n if (element.nodeType === Node.TEXT_NODE) {\n element = element.parentNode;\n }\n return element;\n };\n /**\n * nodeFinds method\n *\n * @param {Element} element - specifies the element.\n * @param {Element[]} elements - specifies the array of elements\n * @returns {Element[]} - returnts the array elements\n * @hidden\n\n */\n DOMNode.prototype.nodeFinds = function (element, elements) {\n var existNodes = [];\n for (var i = 0; i < elements.length; i++) {\n if (element.contains(elements[i]) && element !== elements[i]) {\n existNodes.push(elements[i]);\n }\n }\n return existNodes;\n };\n /**\n * isEditorArea method\n *\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isEditorArea = function () {\n var range = this.getRangePoint(0);\n var element;\n for (element = range.commonAncestorContainer; element && !this.isElement(element); null) {\n element = element.parentNode;\n }\n return !!this.isElement(element);\n };\n /**\n * getRangePoint method\n *\n * @param {number} point - specifies the number value.\n * @returns {Range} - returns the range.\n * @hidden\n\n */\n DOMNode.prototype.getRangePoint = function (point) {\n var selection = this.getSelection();\n var ranges = [];\n if (selection && selection.getRangeAt && selection.rangeCount) {\n ranges = [];\n for (var f = 0; f < selection.rangeCount; f++) {\n ranges.push(selection.getRangeAt(f));\n }\n }\n else {\n ranges = [this.currentDocument.createRange()];\n }\n return 'undefined' !== typeof point ? ranges[point] : ranges;\n };\n DOMNode.prototype.getSelection = function () {\n return this.nodeSelection.get(this.currentDocument);\n };\n /**\n * getPreviousNode method\n *\n * @param {Element} element - specifies the element\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.getPreviousNode = function (element) {\n element = element.previousElementSibling;\n for (; element && element.textContent === '\\n'; null) {\n element = element.previousElementSibling;\n }\n return element;\n };\n /**\n * encode method\n *\n * @param {string} value - specifies the string value\n * @returns {string} - specifies the string value\n * @hidden\n\n */\n DOMNode.prototype.encode = function (value) {\n var divNode = document.createElement('div');\n divNode.innerText = value;\n // eslint-disable-next-line\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n /**\n * saveMarker method\n *\n * @param {NodeSelection} save - specifies the node selection,\n * @param {string} action - specifies the action value.\n * @returns {NodeSelection} - returns the value\n * @hidden\n\n */\n DOMNode.prototype.saveMarker = function (save, action) {\n var start = this.parent.querySelector('.' + markerClassName.startSelection);\n var end = this.parent.querySelector('.' + markerClassName.endSelection);\n var startTextNode;\n var endTextNode;\n if (start.textContent === '' && isNOU(end) && action !== 'tab') {\n if (isNOU(action) && save.range.startContainer.nodeType === 1 &&\n save.range.startContainer.querySelectorAll('audio,video,image').length === 0) {\n start.innerHTML = '
';\n }\n else if (start.childNodes.length === 1 && start.childNodes[0].nodeName === 'BR') {\n start.innerHTML = '
';\n }\n else {\n start.innerHTML = '';\n }\n }\n if (this.hasClass(start, markerClassName.startSelection) && start.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, start, this.encode(start.textContent));\n this.replaceWith(start, replace);\n start = this.parent.querySelector('.' + markerClassName.startSelection);\n start.classList.remove(markerClassName.startSelection);\n startTextNode = start.childNodes[0];\n }\n else {\n startTextNode = this.unWrap(start)[0];\n }\n if (this.hasClass(end, markerClassName.endSelection) && end.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, end, this.encode(end.textContent));\n this.replaceWith(end, replace);\n end = this.parent.querySelector('.' + markerClassName.endSelection);\n end.classList.remove(markerClassName.endSelection);\n endTextNode = end.childNodes[0];\n }\n else {\n endTextNode = end ? this.unWrap(end)[0] : startTextNode;\n }\n save.startContainer = save.getNodeArray(startTextNode, true);\n save.endContainer = save.getNodeArray(endTextNode, false);\n return save;\n };\n DOMNode.prototype.marker = function (className, textContent) {\n return '' + textContent + '';\n };\n /**\n * setMarker method\n *\n * @param {NodeSelection} save - specifies the node selection.\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.setMarker = function (save) {\n var range = save.range;\n var startChildNodes = range.startContainer.childNodes;\n var isTableStart = startChildNodes.length > 1 && startChildNodes[0].nodeName === 'TABLE';\n var start = ((isTableStart ? getLastTextNode(startChildNodes[range.startOffset + 1]) :\n startChildNodes[(range.startOffset > 0) ? (range.startOffset - 1) : range.startOffset]) || range.startContainer);\n var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer);\n if ((start.nodeType === Node.ELEMENT_NODE && end.nodeType === Node.ELEMENT_NODE) && (start.contains(end) || end.contains(start))) {\n var existNode = start.contains(end) ? start : end;\n var isElement = existNode.nodeType !== Node.TEXT_NODE;\n if (isElement) {\n var nodes = [];\n var textNodes = [];\n for (var node = existNode; existNode.contains(node); null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (textNodes.indexOf(node) < 0 && (node.nodeType === Node.TEXT_NODE ||\n (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0\n && (node.tagName === 'BR' || node.tagName === 'IMG')))) {\n textNodes.push(node);\n }\n }\n if (textNodes.length) {\n start = start.contains(end) ? textNodes[0] : start;\n end = textNodes[textNodes.length - 1];\n }\n }\n }\n if (start !== end) {\n if (start.nodeType !== Node.TEXT_NODE && ((start.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(start.parentNode.tagName.toLocaleLowerCase()) >= 0) ||\n start.tagName === 'IMG')) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + markerClassName.startSelection);\n markerStart.appendChild(start);\n }\n else {\n if (start.nodeType !== 3 && start.nodeName !== '#text' && start.nodeName !== 'BR') {\n var marker = this.marker(markerClassName.startSelection, '');\n append([this.parseHTMLFragment(marker)], start);\n }\n else {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n }\n }\n if (end.nodeType !== Node.TEXT_NODE && end.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(end.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n this.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\n var markerEnd = range.endContainer.querySelector('.' + markerClassName.endSelection);\n markerEnd.appendChild(end);\n }\n else {\n this.ensureSelfClosingTag(end, markerClassName.endSelection, range);\n }\n }\n else {\n this.ensureSelfClosingTag(start, markerClassName.startSelection, range);\n }\n };\n /**\n * ensureSelfClosingTag method\n *\n * @param {Element} start - specifies the element.\n * @param {string} className - specifes the class name string value\n * @param {Range} range - specifies the range value\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.ensureSelfClosingTag = function (start, className, range) {\n var isTable = false;\n if (start.nodeType === 3) {\n this.replaceWith(start, this.marker(className, this.encode(start.textContent)));\n }\n else if (start.tagName === 'BR') {\n this.replaceWith(start, this.marker(className, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + className);\n markerStart.appendChild(start);\n }\n else {\n if (start.tagName === 'IMG') {\n var parNode = document.createElement('p');\n start.parentElement.insertBefore(parNode, start);\n parNode.appendChild(start);\n start = parNode.children[0];\n }\n if (start.tagName === 'TABLE') {\n isTable = true;\n if (start.textContent === '') {\n var tdNode = start.querySelectorAll('td');\n start = tdNode[tdNode.length - 1];\n start = !isNOU(start.childNodes[0]) ? start.childNodes[0] : start;\n }\n else {\n var lastNode = start.lastChild;\n while (lastNode.nodeType !== 3 && lastNode.nodeName !== '#text' &&\n lastNode.nodeName !== 'BR') {\n lastNode = lastNode.lastChild;\n }\n start = lastNode;\n }\n }\n for (var i = 0; i < selfClosingTags.length; i++) {\n start = (start.tagName === selfClosingTags[i] && !isTable) ? start.parentNode : start;\n }\n if (start.nodeType === 3 && start.nodeName === '#text') {\n this.replaceWith(start, this.marker(className, this.encode(start.textContent)));\n }\n else if (start.nodeName === 'BR') {\n this.replaceWith(start, this.marker(markerClassName.endSelection, this.encode(start.textContent)));\n var markerEnd = range.endContainer.querySelector('.' + markerClassName.endSelection);\n markerEnd.appendChild(start);\n }\n else {\n var marker = this.marker(className, '');\n append([this.parseHTMLFragment(marker)], start);\n }\n }\n };\n /**\n * createTempNode method\n *\n * @param {Element} element - specifies the element.\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.createTempNode = function (element) {\n var textContent = element.textContent;\n if (element.tagName === 'BR') {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + '>';\n var node = element.parentNode;\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.tagName.toLocaleLowerCase()) >= 0) {\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n }\n }\n else if (((element.nodeType !== Node.TEXT_NODE &&\n (element.classList.contains(markerClassName.startSelection) ||\n element.classList.contains(markerClassName.endSelection))) ||\n textContent.replace(/\\n/g, '').replace(/(^ *)|( *$)/g, '').length > 0 ||\n textContent.length && textContent.indexOf('\\n') < 0)) {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + '>';\n var target = element;\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n var ignoreBr = target.nodeType === Node.ELEMENT_NODE && target.firstChild && target.firstChild.nodeName === 'BR'\n && (target.classList.contains(markerClassName.startSelection) ||\n target.classList.contains(markerClassName.endSelection));\n if (!ignoreBr && element.nextElementSibling && element.nextElementSibling.tagName === 'BR') {\n element.appendChild(element.nextElementSibling);\n }\n }\n return element;\n };\n /**\n * getImageTagInSelection method\n *\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.getImageTagInSelection = function () {\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n return selection.focusNode.querySelectorAll('img');\n }\n return null;\n };\n /**\n * blockNodes method\n *\n * @returns {Node[]} - returns the node array values\n * @hidden\n\n */\n DOMNode.prototype.blockNodes = function () {\n var collectionNodes = [];\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n var ranges = this.getRangePoint();\n for (var j = 0; j < ranges.length; j++) {\n var parentNode = void 0;\n var range = ranges[j];\n var startNode = this.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.getSelectedNode(range.endContainer, range.endOffset);\n if (this.isBlockNode(startNode) && collectionNodes.indexOf(startNode) < 0) {\n collectionNodes.push(startNode);\n }\n parentNode = this.blockParentNode(startNode);\n if (parentNode && collectionNodes.indexOf(parentNode) < 0) {\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(parentNode.tagName.toLocaleLowerCase()) >= 0 && (startNode.tagName === 'BR' ||\n startNode.nodeType === Node.TEXT_NODE ||\n startNode.classList.contains(markerClassName.startSelection) ||\n startNode.classList.contains(markerClassName.endSelection))) {\n var tempNode = startNode.previousSibling &&\n startNode.previousSibling.nodeType === Node.TEXT_NODE ?\n startNode.previousSibling : startNode;\n if (!startNode.nextSibling && !startNode.previousSibling && startNode.tagName === 'BR') {\n collectionNodes.push(tempNode);\n }\n else {\n collectionNodes.push(this.createTempNode(tempNode));\n }\n }\n else {\n collectionNodes.push(parentNode);\n }\n }\n var nodes = [];\n for (var node = startNode; node !== endNode && node !== this.parent; null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node && node.nodeType !== 8 && (node.tagName === 'BR' || (node.nodeType === Node.TEXT_NODE &&\n node.textContent.trim() !== '') || (node.nodeType !== Node.TEXT_NODE &&\n (node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection)))) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node);\n }\n else if (node.nextSibling && node.nextSibling.nodeType !== 8 &&\n (node.nextSibling.tagName === 'BR' ||\n node.nextSibling.nodeType === Node.TEXT_NODE ||\n node.nextSibling.classList.contains(markerClassName.startSelection) ||\n node.nextSibling.classList.contains(markerClassName.endSelection)) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.nextSibling.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node.nextSibling);\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (collectionNodes.indexOf(node) < 0 && node.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0 &&\n (node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection))) {\n collectionNodes.push(this.createTempNode(node));\n }\n if (this.isBlockNode(node) && this.ignoreTableTag(node) && nodes.indexOf(node) < 0 &&\n collectionNodes.indexOf(node) < 0 && (node !== endNode || range.endOffset > 0)) {\n collectionNodes.push(node);\n }\n if (node.nodeName === 'IMG' && node.parentElement.contentEditable === 'true') {\n collectionNodes.push(node);\n }\n }\n parentNode = this.blockParentNode(endNode);\n if (parentNode && this.ignoreTableTag(parentNode) && collectionNodes.indexOf(parentNode) < 0 &&\n (!isNOU(parentNode.previousElementSibling) && parentNode.previousElementSibling.tagName !== 'IMG')) {\n collectionNodes.push(parentNode);\n }\n }\n }\n for (var i = collectionNodes.length - 1; i > 0; i--) {\n var nodes = this.nodeFinds(collectionNodes[i], collectionNodes);\n if (nodes.length) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (collectionNodes[i].tagName === 'LI' && listNodes.length > 0) {\n continue;\n }\n else {\n collectionNodes.splice(i, 1);\n }\n }\n }\n return collectionNodes;\n };\n DOMNode.prototype.ignoreTableTag = function (element) {\n return !(CONSTANT.TABLE_BLOCK_TAGS.indexOf(element.tagName.toLocaleLowerCase()) >= 0);\n };\n return DOMNode;\n}());\nexport { DOMNode };\n","import * as CONSTANT from './../base/constant';\nimport { createElement, detach, prepend, append, attributes, Browser } from '@syncfusion/ej2-base';\nimport { markerClassName } from './dom-node';\nimport * as EVENTS from './../../common/constant';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { isNullOrUndefined, isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\n/**\n * Lists internal component\n *\n * @hidden\n\n */\nvar Lists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function Lists(parent) {\n this.parent = parent;\n this.domNode = this.parent.domNode;\n this.addEventListener();\n }\n Lists.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.LIST_TYPE, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, this.onKeyUp, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n this.parent.observer.on(EVENTS.SPACE_ACTION, this.spaceKeyAction, this);\n };\n Lists.prototype.testList = function (elem) {\n var olListRegex = [/^[\\d]+[.]+$/,\n /^(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})[.]$/gi,\n /^[a-zA-Z][.]+$/];\n var elementStart = !isNullOrUndefined(elem) ? elem.innerText.trim().split('.')[0] + '.' : null;\n if (!isNullOrUndefined(elementStart)) {\n for (var i = 0; i < olListRegex.length; i++) {\n if (olListRegex[i].test(elementStart)) {\n return true;\n }\n }\n }\n return false;\n };\n Lists.prototype.testCurrentList = function (range) {\n var olListStartRegex = [/^[1]+[.]+$/, /^[i]+[.]+$/, /^[a]+[.]+$/];\n if (!isNullOrUndefined(range.startContainer.textContent.slice(0, range.startOffset))) {\n var currentContent = range.startContainer.textContent.replace(/\\u200B/g, '').slice(0, range.startOffset).trim();\n for (var i = 0; i < olListStartRegex.length; i++) {\n if (olListStartRegex[i].test(currentContent) && currentContent.length === 2) {\n return true;\n }\n }\n }\n return false;\n };\n Lists.prototype.spaceList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n // eslint-disable-next-line\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n var preElement = startNode.previousElementSibling;\n var nextElement = startNode.nextElementSibling;\n var preElemULStart = !isNullOrUndefined(preElement) ?\n preElement.innerText.trim().substring(0, 1) : null;\n var nextElemULStart = !isNullOrUndefined(nextElement) ?\n nextElement.innerText.trim().substring(0, 1) : null;\n var startElementOLTest = this.testCurrentList(range);\n var preElementOLTest = this.testList(preElement);\n var nextElementOLTest = this.testList(nextElement);\n if (!preElementOLTest && !nextElementOLTest && preElemULStart !== '*' && nextElemULStart !== '*') {\n if (startElementOLTest) {\n range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);\n this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });\n e.event.preventDefault();\n }\n else if (range.startContainer.textContent.replace(/\\u200B/g, '').slice(0, range.startOffset).trim() === '*' ||\n range.startContainer.textContent.replace(/\\u200B/g, '').slice(0, range.startOffset).trim() === '-') {\n range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);\n this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });\n e.event.preventDefault();\n }\n }\n };\n Lists.prototype.enterList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startNode = range.startContainer.nodeName === 'LI' ? range.startContainer :\n range.startContainer.parentElement.closest('LI');\n var endNode = range.endContainer.nodeName === 'LI' ? range.endContainer :\n range.endContainer.parentElement.closest('LI');\n // Checks for Image, Audio , Video Element inside List Element\n var hasMediaElem = false;\n if (!isNOU(startNode)) {\n var videoElemList = startNode.querySelectorAll('.e-video-clickelem');\n var embedVideoElem = videoElemList.length > 0 && videoElemList[0].childNodes[0].nodeName === 'IFRAME';\n hasMediaElem = startNode.querySelectorAll('IMG').length > 0 || startNode.querySelectorAll('AUDIO').length > 0 || startNode.querySelectorAll('VIDEO').length > 0 || embedVideoElem;\n }\n if (!isNOU(startNode) && !isNOU(endNode) && startNode === endNode && startNode.tagName === 'LI' &&\n startNode.textContent.trim() === '' && !hasMediaElem) {\n if (startNode.innerHTML.indexOf(' ') >= 0) {\n return;\n }\n if (startNode.textContent.charCodeAt(0) === 65279) {\n startNode.textContent = '';\n }\n var startNodeParent = startNode.parentElement;\n if (isNOU(startNodeParent.parentElement.closest('UL')) && isNOU(startNodeParent.parentElement.closest('OL'))) {\n if (!isNOU(startNode.nextElementSibling)) {\n var nearBlockNode = this.parent.domNode.blockParentNode(startNode);\n this.parent.nodeCutter.GetSpliceNode(range, nearBlockNode);\n }\n var insertTag = void 0;\n if (e.enterAction === 'DIV') {\n insertTag = createElement('div');\n insertTag.innerHTML = '
';\n }\n else if (e.enterAction === 'P') {\n insertTag = createElement('p');\n insertTag.innerHTML = '
';\n }\n else {\n insertTag = createElement('br');\n }\n this.parent.domNode.insertAfter(insertTag, startNodeParent);\n e.event.preventDefault();\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, insertTag, 0);\n if (startNodeParent.textContent === '' && (startNodeParent.querySelectorAll('audio,video').length === 0)) {\n detach(startNodeParent);\n }\n else {\n detach(startNode);\n }\n }\n }\n };\n Lists.prototype.backspaceList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n startNode = startNode.nodeName === 'BR' ? startNode.parentElement : startNode;\n endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;\n if (startNode === endNode && !isNullOrUndefined(closest(startNode, 'li')) &&\n ((startNode.textContent.trim() === '' && startNode.textContent.charCodeAt(0) === 65279) ||\n (startNode.textContent.length === 1 && startNode.textContent.charCodeAt(0) === 8203))) {\n startNode.textContent = '';\n }\n if (startNode === endNode && startNode.tagName === 'LI' && startNode.textContent.length === 0 &&\n isNOU(startNode.previousElementSibling)) {\n startNode.removeAttribute('style');\n }\n if (startNode === endNode && startNode.textContent === '') {\n if (startNode.parentElement.tagName === 'LI' && endNode.parentElement.tagName === 'LI') {\n detach(startNode);\n }\n else if (startNode.closest('ul') || startNode.closest('ol')) {\n var parentList = !isNOU(startNode.closest('ul')) ? startNode.closest('ul') : startNode.closest('ol');\n if (parentList.firstElementChild === startNode && !isNOU(parentList.children[1]) &&\n (parentList.children[1].tagName === 'OL' || parentList.children[1].tagName === 'UL')) {\n if (parentList.tagName === parentList.children[1].tagName) {\n while (parentList.children[1].lastChild) {\n this.parent.domNode.insertAfter(parentList.children[1].lastChild, parentList.children[1]);\n }\n detach(parentList.children[1]);\n }\n else {\n parentList.parentElement.insertBefore(parentList.children[1], parentList);\n }\n }\n }\n }\n else if (!isNOU(startNode.firstChild) && startNode.firstChild.nodeName === 'BR' &&\n (!isNullOrUndefined(startNode.childNodes[1]) && (startNode.childNodes[1].nodeName === 'UL' ||\n startNode.childNodes[1].nodeName === 'OL'))) {\n var parentList = !isNOU(startNode.closest('ul')) ? startNode.closest('ul') : startNode.closest('ol');\n if (parentList.tagName === startNode.childNodes[1].nodeName) {\n while (startNode.childNodes[1].lastChild) {\n this.parent.domNode.insertAfter(startNode.children[1].lastChild, startNode);\n }\n detach(startNode.childNodes[1]);\n }\n else {\n parentList.parentElement.insertBefore(startNode.children[1], parentList);\n }\n }\n this.removeList(range, e);\n this.firstListBackSpace(range, e);\n };\n Lists.prototype.removeList = function (range, e) {\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n startNode = startNode.nodeName === 'BR' ? startNode.parentElement : startNode;\n endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;\n startNode = startNode.nodeName !== 'LI' && !isNOU(startNode.closest('LI')) ? startNode.closest('LI') : startNode;\n endNode = endNode.nodeName !== 'LI' && !isNOU(endNode.closest('LI')) ? endNode.closest('LI') : endNode;\n if (((range.commonAncestorContainer.nodeName === 'OL' || range.commonAncestorContainer.nodeName === 'UL' || range.commonAncestorContainer.nodeName === 'LI') &&\n isNOU(endNode.nextElementSibling) && endNode.textContent.length === range.endOffset &&\n isNOU(startNode.previousElementSibling) && range.startOffset === 0) ||\n (Browser.userAgent.indexOf('Firefox') !== -1 && range.startContainer === range.endContainer && range.startContainer === this.parent.editableElement &&\n range.startOffset === 0 && range.endOffset === 1)) {\n if (Browser.userAgent.indexOf('Firefox') !== -1) {\n detach(range.commonAncestorContainer.childNodes[0]);\n }\n else if (range.commonAncestorContainer.nodeName === 'LI') {\n detach(range.commonAncestorContainer.parentElement);\n }\n else {\n detach(range.commonAncestorContainer);\n }\n e.event.preventDefault();\n }\n };\n Lists.prototype.onKeyUp = function () {\n if (!isNOU(this.commonLIParent) && !isNOU(this.commonLIParent.querySelector('.removeList'))) {\n var currentLIElem = this.commonLIParent.querySelector('.removeList');\n while (!isNOU(currentLIElem.firstChild)) {\n this.parent.domNode.insertAfter(currentLIElem.firstChild, currentLIElem);\n }\n detach(currentLIElem);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Lists.prototype.firstListBackSpace = function (range, _e) {\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n if (!isNOU(startNode.closest('OL'))) {\n this.commonLIParent = startNode.closest('OL');\n }\n else if (!isNOU(startNode.closest('UL'))) {\n this.commonLIParent = startNode.closest('UL');\n }\n if (startNode.nodeName === 'LI' && range.startOffset === 0 && range.endOffset === 0 &&\n isNOU(startNode.previousSibling) && !isNOU(this.commonLIParent) && isNOU(this.commonLIParent.previousSibling) &&\n (isNOU(this.commonLIParent.parentElement.closest('OL')) && isNOU(this.commonLIParent.parentElement.closest('UL')) &&\n isNOU(this.commonLIParent.parentElement.closest('LI')))) {\n var currentElem = createElement('P');\n currentElem.innerHTML = '​';\n startNode.classList.add('removeList');\n this.commonLIParent.parentElement.insertBefore(currentElem, this.commonLIParent);\n }\n };\n Lists.prototype.keyDownHandler = function (e) {\n if (e.event.which === 13) {\n this.enterList(e);\n }\n if (e.event.which === 32) {\n this.spaceList(e);\n }\n if (e.event.which === 8) {\n this.backspaceList(e);\n }\n if (e.event.which === 46 && e.event.action === 'delete') {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var commonAncestor = range.commonAncestorContainer;\n var startEle = range.startContainer;\n var endEle = range.endContainer;\n var startNode = startEle.nodeType === 3 ? startEle.parentElement : startEle;\n var endNode = endEle.nodeType === 3 ? endEle.parentElement : endEle;\n if ((commonAncestor.nodeName === 'UL' || commonAncestor.nodeName === 'OL') && startNode !== endNode\n && (!isNullOrUndefined(closest(startNode, 'ul')) || !isNullOrUndefined(closest(startNode, 'ol')))\n && (!isNullOrUndefined(closest(endNode, 'ul')) || !isNullOrUndefined(closest(endNode, 'ol')))\n && (commonAncestor.lastElementChild === closest(endNode, 'li')) && !range.collapsed) {\n detach(commonAncestor);\n }\n this.removeList(range, e);\n }\n if (e.event.which === 9) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n if (!(e.event.action && e.event.action === 'indent')) {\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n }\n var blockNodes = void 0;\n var startOffset = range.startOffset;\n var endOffset = range.endOffset;\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n if ((startNode === endNode && (startNode.nodeName === 'BR' || startNode.nodeName === '#text') &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(startNode.parentNode.tagName.toLocaleLowerCase()) >= 0)) {\n return;\n }\n else {\n if (!(e.event.action && e.event.action === 'indent')) {\n this.domNode.setMarker(this.saveSelection);\n }\n blockNodes = this.domNode.blockNodes();\n }\n var nodes = [];\n var isNested = true;\n for (var i = 0; i < blockNodes.length; i++) {\n if (blockNodes[i].parentNode.tagName === 'LI') {\n nodes.push(blockNodes[i].parentNode);\n }\n else if (blockNodes[i].tagName === 'LI' && blockNodes[i].childNodes[0].tagName !== 'P' &&\n (blockNodes[i].childNodes[0].tagName !== 'OL' &&\n blockNodes[i].childNodes[0].tagName !== 'UL')) {\n nodes.push(blockNodes[i]);\n }\n }\n if (nodes.length > 1 || nodes.length && ((startOffset === 0 && endOffset === 0) || e.ignoreDefault)) {\n e.event.preventDefault();\n e.event.stopPropagation();\n this.currentAction = this.getAction(nodes[0]);\n if (e.event.shiftKey) {\n this.revertList(nodes, e);\n this.revertClean();\n }\n else {\n isNested = this.nestedList(nodes);\n }\n if (isNested) {\n this.cleanNode();\n this.parent.editableElement.focus();\n }\n if (!(e.event.action && e.event.action === 'indent')) {\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes(),\n event: e.event\n });\n }\n }\n }\n else {\n if (!(e.event.action && e.event.action === 'indent')) {\n if (e.event && e.event.shiftKey && e.event.key === 'Tab') {\n e.event.action = 'tab';\n }\n this.saveSelection = this.domNode.saveMarker(this.saveSelection, e.event.action);\n this.saveSelection.restore();\n }\n }\n }\n else {\n switch (e.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n }\n };\n Lists.prototype.spaceKeyAction = function (e) {\n if (e.event.which === 32) {\n this.spaceList(e);\n }\n };\n Lists.prototype.getAction = function (element) {\n var parentNode = element.parentNode;\n return (parentNode.nodeName === 'OL' ? 'OL' : 'UL');\n };\n Lists.prototype.revertClean = function () {\n var collectionNodes = this.parent.editableElement.querySelectorAll('ul, ol');\n for (var i = 0; i < collectionNodes.length; i++) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (listNodes.length > 0) {\n for (var j = 0; j < listNodes.length; j++) {\n var prevSibling = listNodes[j].previousSibling;\n if (prevSibling && prevSibling.tagName === 'LI') {\n prevSibling.appendChild(listNodes[j]);\n }\n }\n }\n }\n };\n Lists.prototype.noPreviousElement = function (elements) {\n var firstNode;\n var firstNodeOL;\n var siblingListOL = elements.querySelectorAll('ol, ul');\n var siblingListLI = elements\n .querySelectorAll('li');\n var siblingListLIFirst = this.domNode.contents(siblingListLI[0])[0];\n if (siblingListLI.length > 0 && (siblingListLIFirst.nodeName === 'OL' || siblingListLIFirst.nodeName === 'UL')) {\n firstNode = siblingListLI[0];\n }\n else {\n firstNodeOL = siblingListOL[0];\n }\n if (firstNode) {\n for (var h = this.domNode.contents(elements)[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n prepend([h], firstNode);\n setStyleAttribute(elements, { 'list-style-type': 'none' });\n setStyleAttribute(firstNode, { 'list-style-type': '' });\n h = nextSibling;\n }\n }\n else if (firstNodeOL) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNodeOL);\n for (var h = this.domNode.contents(elements)[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n prepend([firstNodeOL], elements.parentNode);\n detach(elements);\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n prepend([nestedElementLI], firstNodeOL.parentNode);\n append([firstNodeOL], nestedElementLI);\n }\n else {\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n prepend([nestedElementLI], elements.parentNode);\n var nestedElement = createElement(elements.parentNode.tagName);\n prepend([nestedElement], nestedElementLI);\n append([elements], nestedElement);\n }\n };\n Lists.prototype.nestedList = function (elements) {\n var isNested = false;\n for (var i = 0; i < elements.length; i++) {\n var prevSibling = this.domNode.getPreviousNode(elements[i]);\n if (prevSibling) {\n isNested = true;\n var firstNode = void 0;\n var firstNodeLI = void 0;\n var siblingListOL = elements[i].querySelectorAll('ol, ul');\n var siblingListLI = elements[i]\n .querySelectorAll('li');\n var siblingListLIFirst = this.domNode.contents(siblingListLI[0])[0];\n if (siblingListLI.length > 0 && (siblingListLIFirst.nodeName === 'OL' || siblingListLIFirst.nodeName === 'UL')) {\n firstNodeLI = siblingListLI[0];\n }\n else {\n firstNode = siblingListOL[0];\n }\n if (firstNode) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNode);\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n append([firstNode], prevSibling);\n detach(elements[i]);\n }\n else if (firstNodeLI) {\n if (prevSibling.tagName === 'LI') {\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n prepend([h], firstNodeLI);\n setStyleAttribute(elements[i], { 'list-style-type': 'none' });\n setStyleAttribute(firstNodeLI, { 'list-style-type': '' });\n h = nextSibling;\n }\n append([firstNodeLI.parentNode], prevSibling);\n detach(elements[i]);\n }\n }\n else {\n if (prevSibling.tagName === 'LI') {\n var nestedElement = createElement(elements[i].parentNode.tagName);\n append([nestedElement], prevSibling);\n append([elements[i]], nestedElement);\n }\n else if (prevSibling.tagName === 'OL' || prevSibling.tagName === 'UL') {\n append([elements[i]], prevSibling);\n }\n }\n }\n else {\n var element = elements[i];\n isNested = true;\n this.noPreviousElement(element);\n }\n }\n return isNested;\n };\n Lists.prototype.applyListsHandler = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n if (Browser.userAgent.indexOf('Firefox') !== -1 && range.startContainer === range.endContainer && range.startContainer === this.parent.editableElement) {\n var startChildNodes = range.startContainer.childNodes;\n var startNode = ((startChildNodes[(range.startOffset > 0) ? (range.startOffset - 1) :\n range.startOffset]) || range.startContainer);\n var endNode = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) :\n range.endOffset] || range.endContainer);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var lastSelectionNode = endNode.lastChild.nodeName === 'BR' ? (isNOU(endNode.lastChild.previousSibling) ? endNode\n : endNode.lastChild.previousSibling) : endNode.lastChild;\n while (!isNOU(lastSelectionNode) && lastSelectionNode.nodeName !== '#text' && lastSelectionNode.nodeName !== 'IMG' &&\n lastSelectionNode.nodeName !== 'BR' && lastSelectionNode.nodeName !== 'HR') {\n lastSelectionNode = lastSelectionNode.lastChild;\n }\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startNode, lastSelectionNode, 0, lastSelectionNode.textContent.length);\n range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n }\n if (range.startContainer === range.endContainer && range.startContainer === this.parent.editableElement &&\n range.startOffset === range.endOffset && range.startOffset === 0 &&\n this.parent.editableElement.textContent.length === 0 && (this.parent.editableElement.childNodes[0].nodeName !== 'TABLE' &&\n this.parent.editableElement.childNodes[0].nodeName !== 'IMG')) {\n var focusNode = range.startContainer.childNodes[0];\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, focusNode, focusNode, 0, 0);\n range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n }\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.currentAction = e.subCommand;\n this.currentAction = e.subCommand = this.currentAction === 'NumberFormatList' ? 'OL' : this.currentAction === 'BulletFormatList' ? 'UL' : this.currentAction;\n this.domNode.setMarker(this.saveSelection);\n var listsNodes = this.domNode.blockNodes();\n if (e.enterAction === 'BR') {\n this.setSelectionBRConfig();\n var allSelectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument);\n var selectedNodes = this.parent.nodeSelection.getSelectionNodes(allSelectedNode);\n var currentFormatNodes = [];\n if (selectedNodes.length === 0) {\n selectedNodes.push(listsNodes[0]);\n }\n for (var i = 0; i < selectedNodes.length; i++) {\n var currentNode = selectedNodes[i];\n var previousCurrentNode = void 0;\n while (!this.parent.domNode.isBlockNode(currentNode) && currentNode !== this.parent.editableElement) {\n previousCurrentNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n if (this.parent.domNode.isBlockNode(currentNode) && currentNode === this.parent.editableElement) {\n currentFormatNodes.push(previousCurrentNode);\n }\n }\n for (var i = 0; i < currentFormatNodes.length; i++) {\n if (!this.parent.domNode.isBlockNode(currentFormatNodes[i])) {\n var currentNode = currentFormatNodes[i];\n var previousNode = currentNode;\n while (currentNode === this.parent.editableElement) {\n previousNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n var tempElem = void 0;\n if (this.parent.domNode.isBlockNode(previousNode.parentElement) &&\n previousNode.parentElement === this.parent.editableElement) {\n tempElem = createElement('p');\n previousNode.parentElement.insertBefore(tempElem, previousNode);\n tempElem.appendChild(previousNode);\n }\n else {\n tempElem = previousNode;\n }\n var preNode = tempElem.previousSibling;\n while (!isNOU(preNode) && preNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(preNode)) {\n tempElem.firstChild.parentElement.insertBefore(preNode, tempElem.firstChild);\n preNode = tempElem.previousSibling;\n }\n if (!isNOU(preNode) && preNode.nodeName === 'BR') {\n detach(preNode);\n }\n var postNode = tempElem.nextSibling;\n while (!isNOU(postNode) && postNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(postNode)) {\n tempElem.appendChild(postNode);\n postNode = tempElem.nextSibling;\n }\n if (!isNOU(postNode) && postNode.nodeName === 'BR') {\n detach(postNode);\n }\n }\n }\n this.setSelectionBRConfig();\n listsNodes = this.parent.domNode.blockNodes();\n }\n for (var i = 0; i < listsNodes.length; i++) {\n if (listsNodes[i].tagName === 'TABLE' && !range.collapsed) {\n listsNodes.splice(i, 1);\n }\n if (listsNodes.length > 0 && listsNodes[i].tagName !== 'LI'\n && 'LI' === listsNodes[i].parentNode.tagName) {\n listsNodes[i] = listsNodes[i].parentNode;\n }\n }\n this.applyLists(listsNodes, this.currentAction, e.selector, e.item, e);\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Lists.prototype.setSelectionBRConfig = function () {\n var startElem = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);\n var endElem = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);\n if (isNOU(endElem)) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, startElem, 0);\n }\n else {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startElem, endElem, 0, 0);\n }\n };\n Lists.prototype.applyLists = function (elements, type, selector, item, e) {\n var isReverse = true;\n if (this.isRevert(elements, type, item) && isNOU(item)) {\n this.revertList(elements, e);\n this.removeEmptyListElements();\n }\n else {\n this.checkLists(elements, type, item);\n for (var i = 0; i < elements.length; i++) {\n if (!isNOU(item) && !isNOU(item.listStyle)) {\n if (item.listStyle === 'listImage') {\n setStyleAttribute(elements[i], { 'list-style-image': item.listImage });\n }\n else {\n setStyleAttribute(elements[i], { 'list-style-image': 'none' });\n setStyleAttribute(elements[i], { 'list-style-type': item.listStyle.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() });\n }\n }\n if (elements[i].getAttribute('contenteditable') === 'true'\n && elements[i].childNodes.length === 1 && elements[i].childNodes[0].nodeName === 'TABLE') {\n var listEle = document.createElement(type);\n listEle.innerHTML = '

  • ';\n elements[i].appendChild(listEle);\n }\n else if ('LI' !== elements[i].tagName && isNOU(item)) {\n isReverse = false;\n var elemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);\n var openTag = '<' + type + '>';\n var closeTag = '';\n var newTag = 'li' + elemAtt;\n var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ?\n elements[i].innerHTML : elements[i].outerHTML);\n var innerHTML = this.domNode.createTagString(newTag, null, replaceHTML);\n var collectionString = openTag + innerHTML + closeTag;\n this.domNode.replaceWith(elements[i], collectionString);\n }\n else if (!isNOU(item) && 'LI' !== elements[i].tagName) {\n // eslint-disable-next-line\n isReverse = false;\n var elemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);\n var openTag = '<' + type + elemAtt + '>';\n var closeTag = '';\n var newTag = 'li';\n var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ?\n elements[i].innerHTML : elements[i].outerHTML);\n var innerHTML = this.domNode.createTagString(newTag, null, replaceHTML);\n var collectionString = openTag + innerHTML + closeTag;\n this.domNode.replaceWith(elements[i], collectionString);\n }\n }\n }\n this.cleanNode();\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, selector);\n }\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n };\n Lists.prototype.removeEmptyListElements = function () {\n var listElem = this.parent.editableElement.querySelectorAll('ol, ul');\n for (var i = 0; i < listElem.length; i++) {\n if (listElem[i].textContent.trim() === '') {\n detach(listElem[i]);\n }\n }\n };\n Lists.prototype.isRevert = function (nodes, tagName, item) {\n var isRevert = true;\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].tagName !== 'LI') {\n return false;\n }\n if (nodes[i].parentNode.tagName !== tagName ||\n isNOU(item) && nodes[i].parentNode.style.listStyleType !== '') {\n isRevert = false;\n }\n }\n return isRevert;\n };\n Lists.prototype.checkLists = function (nodes, tagName, item) {\n var nodesTemp = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i].parentNode;\n if (!isNOU(item) && 'LI' === nodes[i].tagName && !isNOU(item.listStyle)) {\n if (item.listStyle === 'listImage') {\n setStyleAttribute(node, { 'list-style-image': item.listImage });\n }\n else {\n setStyleAttribute(node, { 'list-style-image': 'none' });\n setStyleAttribute(node, { 'list-style-type': item.listStyle.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() });\n }\n }\n if ((nodes[i].tagName === 'LI' && node.tagName !== tagName && nodesTemp.indexOf(node) < 0) ||\n (nodes[i].tagName === 'LI' && node.tagName === tagName && nodesTemp.indexOf(node) < 0 && item !== null)) {\n nodesTemp.push(node);\n }\n if (isNOU(item) && (node.tagName === tagName ||\n ((node.tagName === 'UL' || node.tagName === 'OL') && node.hasAttribute('style')))) {\n if (node.hasAttribute('style')) {\n node.removeAttribute('style');\n }\n }\n }\n for (var j = nodesTemp.length - 1; j >= 0; j--) {\n var h = nodesTemp[j];\n var replace = '<' + tagName.toLowerCase() + ' '\n + this.domNode.attributes(h) + '>' + h.innerHTML + '';\n this.domNode.replaceWith(nodesTemp[j], replace);\n }\n };\n Lists.prototype.cleanNode = function () {\n var liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');\n for (var c = 0; c < liParents.length; c++) {\n var node = liParents[c];\n if (this.domNode.isList(node.previousElementSibling) &&\n this.domNode.openTagString(node) === this.domNode.openTagString(node.previousElementSibling)) {\n var contentNodes = this.domNode.contents(node);\n for (var f = 0; f < contentNodes.length; f++) {\n node.previousElementSibling.appendChild(contentNodes[f]);\n }\n node.parentNode.removeChild(node);\n }\n else if (!isNOU(node.getAttribute('level'))) {\n if (node.tagName === node.previousElementSibling.tagName) {\n node.previousElementSibling.lastChild.append(node);\n }\n }\n }\n };\n Lists.prototype.findUnSelected = function (temp, elements) {\n temp = temp.slice().reverse();\n if (temp.length > 0) {\n var rightIndent = [];\n var indentElements = [];\n var lastElement = elements[elements.length - 1];\n var lastElementChild = [];\n var childElements = [];\n lastElementChild = (lastElement.childNodes);\n for (var z = 0; z < lastElementChild.length; z++) {\n if (lastElementChild[z].tagName === 'OL' || lastElementChild[z].tagName === 'UL') {\n var childLI = lastElementChild[z]\n .querySelectorAll('li');\n if (childLI.length > 0) {\n for (var y = 0; y < childLI.length; y++) {\n childElements.push(childLI[y]);\n }\n }\n }\n }\n for (var i = 0; i < childElements.length; i++) {\n var count = 0;\n for (var j = 0; j < temp.length; j++) {\n if (!childElements[i].contains((temp[j]))) {\n count = count + 1;\n }\n }\n if (count === temp.length) {\n indentElements.push(childElements[i]);\n }\n }\n if (indentElements.length > 0) {\n for (var x = 0; x < indentElements.length; x++) {\n if (this.domNode.contents(indentElements[x])[0].nodeName !== 'OL' &&\n this.domNode.contents(indentElements[x])[0].nodeName !== 'UL') {\n rightIndent.push(indentElements[x]);\n }\n }\n }\n if (rightIndent.length > 0) {\n this.nestedList(rightIndent);\n }\n }\n };\n Lists.prototype.revertList = function (elements, e) {\n var temp = [];\n for (var i = elements.length - 1; i >= 0; i--) {\n for (var j = i - 1; j >= 0; j--) {\n if (elements[j].contains((elements[i])) || elements[j] === elements[i]) {\n temp.push(elements[i]);\n elements.splice(i, 1);\n break;\n }\n }\n }\n this.findUnSelected(temp, elements);\n var viewNode = [];\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (this.domNode.contents(element)[0].nodeType === 3 && this.domNode.contents(element)[0].textContent.trim().length === 0) {\n detach(this.domNode.contents(element)[0]);\n }\n var parentNode = elements[i].parentNode;\n var className = element.getAttribute('class');\n if (temp.length === 0) {\n var siblingList = elements[i].querySelectorAll('ul, ol');\n var firstNode = siblingList[0];\n if (firstNode) {\n var child = firstNode\n .querySelectorAll('li');\n if (child) {\n var nestedElement = createElement(firstNode.tagName);\n append([nestedElement], firstNode.parentNode);\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n append([nestedElementLI], nestedElement);\n append([firstNode], nestedElementLI);\n }\n }\n }\n if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),\n 'LI' === parentNode.parentNode.tagName || 'OL' === parentNode.parentNode.tagName ||\n 'UL' === parentNode.parentNode.tagName) {\n element.parentNode.insertBefore(this.closeTag('LI'), element);\n }\n else {\n var classAttr = '';\n if (className) {\n // eslint-disable-next-line\n classAttr += ' class=\"' + className + '\"';\n }\n if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {\n var wrapperclass = isNullOrUndefined(className) ? ' class=\"e-rte-wrap-inner\"' :\n ' class=\"' + className + ' e-rte-wrap-inner\"';\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + wrapperclass +\n this.domNode.attributes(parentNode) + '>';\n if (e.enterAction !== 'BR') {\n this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));\n }\n }\n else if (this.domNode.contents(element)[0].nodeType === 3) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||\n this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else {\n var childNode = element.firstChild;\n className = childNode.getAttribute('class');\n attributes(childNode, this.domNode.rawAttributes(parentNode));\n if (className && childNode.getAttribute('class')) {\n attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });\n }\n }\n append([this.openTag('LI')], element);\n prepend([this.closeTag('LI')], element);\n }\n this.domNode.insertAfter(this.openTag(parentNode.tagName), element);\n if (parentNode.parentNode.tagName === 'LI') {\n parentNode = parentNode.parentNode.parentNode;\n }\n if (viewNode.indexOf(parentNode) < 0) {\n viewNode.push(parentNode);\n }\n }\n for (var i = 0; i < viewNode.length; i++) {\n var node = viewNode[i];\n var nodeInnerHtml = node.innerHTML;\n var closeTag = /<\\/span>/g;\n var openTag = /<\\/span>/g;\n nodeInnerHtml = nodeInnerHtml.replace(closeTag, '');\n nodeInnerHtml = nodeInnerHtml.replace(openTag, '<$1 ' + this.domNode.attributes(node) + '>');\n this.domNode.replaceWith(node, this.domNode.openTagString(node) + nodeInnerHtml.trim() + this.domNode.closeTagString(node));\n }\n var emptyUl = this.parent.editableElement.querySelectorAll('ul:empty, ol:empty');\n for (var i = 0; i < emptyUl.length; i++) {\n detach(emptyUl[i]);\n }\n var emptyLi = this.parent.editableElement.querySelectorAll('li:empty');\n for (var i = 0; i < emptyLi.length; i++) {\n detach(emptyLi[i]);\n }\n };\n Lists.prototype.openTag = function (type) {\n return this.domNode.parseHTMLFragment('');\n };\n Lists.prototype.closeTag = function (type) {\n return this.domNode.parseHTMLFragment('');\n };\n return Lists;\n}());\nexport { Lists };\n","/**\n * Node appending methods.\n *\n * @hidden\n */\nvar InsertMethods = /** @class */ (function () {\n function InsertMethods() {\n }\n /**\n * WrapBefore method\n *\n * @param {Text} textNode - specifies the text node\n * @param {HTMLElement} parentNode - specifies the parent node\n * @param {boolean} isAfter - specifies the boolean value\n * @returns {Text} - returns the text value\n * @hidden\n\n */\n InsertMethods.WrapBefore = function (textNode, parentNode, isAfter) {\n parentNode.innerText = textNode.textContent;\n //eslint-disable-next-line\n (!isAfter) ? this.AppendBefore(parentNode, textNode) : this.AppendBefore(parentNode, textNode, true);\n if (textNode.parentNode) {\n textNode.parentNode.removeChild(textNode);\n }\n return parentNode.childNodes[0];\n };\n /**\n * Wrap method\n *\n * @param {HTMLElement} childNode - specifies the child node\n * @param {HTMLElement} parentNode - specifies the parent node.\n * @returns {HTMLElement} - returns the element\n * @hidden\n\n */\n InsertMethods.Wrap = function (childNode, parentNode) {\n this.AppendBefore(parentNode, childNode);\n parentNode.appendChild(childNode);\n return childNode;\n };\n /**\n * unwrap method\n *\n * @param {Node} node - specifies the node element.\n * @returns {Node[]} - returns the array of value\n * @hidden\n\n */\n InsertMethods.unwrap = function (node) {\n var parent = node.parentNode;\n var child = [];\n for (; node.firstChild; null) {\n child.push(parent.insertBefore(node.firstChild, node));\n }\n parent.removeChild(node);\n return child;\n };\n /**\n * AppendBefore method\n *\n * @param {HTMLElement} textNode - specifies the element\n * @param {HTMLElement} parentNode - specifies the parent node\n * @param {boolean} isAfter - specifies the boolean value\n * @returns {void}\n * @hidden\n\n */\n InsertMethods.AppendBefore = function (textNode, parentNode, isAfter) {\n return (parentNode.parentNode) ? ((!isAfter) ? parentNode.parentNode.insertBefore(textNode, parentNode)\n : parentNode.parentNode.insertBefore(textNode, parentNode.nextSibling)) :\n parentNode;\n };\n return InsertMethods;\n}());\nexport { InsertMethods };\n","import { NodeSelection } from './../../selection/index';\nimport { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { InsertMethods } from './insert-methods';\n/**\n * Split the Node based on selection\n *\n * @hidden\n\n */\nvar NodeCutter = /** @class */ (function () {\n function NodeCutter() {\n this.enterAction = 'P';\n this.position = -1;\n this.nodeSelection = new NodeSelection();\n }\n // Split Selection Node\n /**\n * GetSpliceNode method\n *\n * @param {Range} range - specifies the range\n * @param {HTMLElement} node - specifies the node element.\n * @returns {Node} - returns the node value\n * @hidden\n\n */\n NodeCutter.prototype.GetSpliceNode = function (range, node) {\n node = this.SplitNode(range, node, true);\n node = this.SplitNode(range, node, false);\n return node;\n };\n /**\n * @param {Range} range - specifies the range\n * @param {HTMLElement} node - specifies the node element.\n * @param {boolean} isCollapsed - specifies the boolean value\n * @returns {HTMLElement} - returns the element\n * @hidden\n\n */\n NodeCutter.prototype.SplitNode = function (range, node, isCollapsed) {\n if (node) {\n var clone = range.cloneRange();\n var parent_1 = node.parentNode;\n var index = this.nodeSelection.getIndex(node);\n clone.collapse(isCollapsed);\n // eslint-disable-next-line\n (isCollapsed) ? clone.setStartBefore(node) : clone.setEndAfter(node);\n var fragment = clone.extractContents();\n if (isCollapsed) {\n node = parent_1.childNodes[index];\n fragment = this.spliceEmptyNode(fragment, false);\n if (fragment && fragment.childNodes.length > 0) {\n var isEmpty = (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG'\n && this.isRteElm(fragment) && fragment.textContent === '') ? true : false;\n if (!isEmpty) {\n if (node) {\n InsertMethods.AppendBefore(fragment, node);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n node = divNode.firstChild;\n parent_1.appendChild(node);\n }\n }\n }\n }\n else {\n node = parent_1.childNodes.length > 1 ? parent_1.childNodes[index] :\n parent_1.childNodes[0];\n fragment = this.spliceEmptyNode(fragment, true);\n if (fragment && fragment.childNodes.length > 0) {\n var isEmpty = (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG'\n && this.isRteElm(fragment) && fragment.textContent === '') ? true : false;\n if (!isEmpty) {\n if (node) {\n InsertMethods.AppendBefore(fragment, node, true);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n parent_1.insertBefore(divNode.firstChild, parent_1.firstChild);\n node = parent_1.firstChild;\n }\n }\n }\n }\n return node;\n }\n else {\n return null;\n }\n };\n NodeCutter.prototype.isRteElm = function (fragment) {\n var result = true;\n if (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG') {\n var firstChild = fragment.childNodes[0];\n for (var i = 0; !isNOU(firstChild.childNodes) && i < firstChild.childNodes.length; i++) {\n if (firstChild.childNodes[i].nodeName === 'IMG' || (firstChild.childNodes[i].nodeName === 'SPAN' &&\n (firstChild.childNodes[i].classList.contains('e-video-wrap') ||\n firstChild.childNodes[i].classList.contains('e-embed-video-wrap') ||\n firstChild.childNodes[i].classList.contains('e-audio-wrap')))) {\n result = false;\n }\n }\n }\n else {\n result = true;\n }\n return result;\n };\n NodeCutter.prototype.spliceEmptyNode = function (fragment, isStart) {\n var len;\n if (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName === '#text' &&\n fragment.childNodes[0].textContent === '' || fragment.textContent === '') {\n len = -1;\n }\n else {\n len = fragment.childNodes.length - 1;\n }\n if (len > -1 && !isStart) {\n this.spliceEmptyNode(fragment.childNodes[len], isStart);\n }\n else if (len > -1) {\n this.spliceEmptyNode(fragment.childNodes[0], isStart);\n }\n else if (fragment.nodeType !== 3 && fragment.nodeType !== 11 && fragment.nodeName !== 'IMG' && !(fragment.classList.contains('e-video-wrap')) && !(fragment.classList.contains('e-audio-wrap'))) {\n fragment.parentNode.removeChild(fragment);\n }\n return fragment;\n };\n // Cursor Position split\n NodeCutter.prototype.GetCursorStart = function (indexes, index, isStart) {\n indexes = (isStart) ? indexes : indexes.reverse();\n var position = indexes[0];\n for (var num = 0; num < indexes.length && ((isStart) ? (indexes[num] < index) : (indexes[num] >= index)); num++) {\n position = indexes[num];\n }\n return position;\n };\n /**\n * GetCursorRange method\n *\n * @param {Document} docElement - specifies the document\n * @param {Range} range - specifies the range\n * @param {Node} node - specifies the node.\n * @returns {Range} - returns the range value\n * @hidden\n\n */\n NodeCutter.prototype.GetCursorRange = function (docElement, range, node) {\n var cursorRange = docElement.createRange();\n var indexes = [];\n indexes.push(0);\n var str = this.TrimLineBreak(node.data);\n var index = str.indexOf(' ', 0);\n while (index !== -1) {\n if (indexes.indexOf(index) < 0) {\n indexes.push(index);\n }\n if (new RegExp('\\\\s').test(str[index - 1]) && (indexes.indexOf(index - 1) < 0)) {\n indexes.push(index - 1);\n }\n if (new RegExp('\\\\s').test(str[index + 1])) {\n indexes.push(index + 1);\n }\n index = str.indexOf(' ', (index + 1));\n }\n indexes.push(str.length);\n if ((indexes.indexOf(range.startOffset) >= 0)\n || ((indexes.indexOf(range.startOffset - 1) >= 0) && (range.startOffset !== 1\n || (range.startOffset === 1 && new RegExp('\\\\s').test(str[0])))\n || ((indexes[indexes.length - 1] - 1) === range.startOffset))) {\n cursorRange = range;\n this.position = 1;\n }\n else {\n var startOffset = this.GetCursorStart(indexes, range.startOffset, true);\n this.position = range.startOffset - startOffset;\n cursorRange.setStart(range.startContainer, startOffset);\n cursorRange.setEnd(range.startContainer, this.GetCursorStart(indexes, range.startOffset, false));\n }\n return cursorRange;\n };\n /**\n * GetCursorNode method\n *\n * @param {Document} docElement - specifies the document\n * @param {Range} range - specifies the range\n * @param {Node} node - specifies the node.\n * @returns {Node} - returns the node value\n * @hidden\n\n */\n NodeCutter.prototype.GetCursorNode = function (docElement, range, node) {\n return this.GetSpliceNode(this.GetCursorRange(docElement, range, node), node);\n };\n /**\n * TrimLineBreak method\n *\n * @param {string} line - specifies the string value.\n * @returns {string} - returns the string\n * @hidden\n\n */\n NodeCutter.prototype.TrimLineBreak = function (line) {\n return line.replace(/(\\r\\n\\t|\\n|\\r\\t)/gm, ' ');\n };\n return NodeCutter;\n}());\nexport { NodeCutter };\n","import * as EVENTS from './../../common/constant';\nimport { isNullOrUndefined as isNOU, detach, createElement, closest } from '@syncfusion/ej2-base';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { markerClassName } from './dom-node';\nimport { NodeCutter } from './nodecutter';\n/**\n * Formats internal component\n *\n * @hidden\n\n */\nvar Formats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element.\n * @hidden\n\n */\n function Formats(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n Formats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, this.onKeyUp, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Formats.prototype.getParentNode = function (node) {\n for (; node.parentNode && node.parentNode !== this.parent.editableElement; null) {\n node = node.parentNode;\n }\n return node;\n };\n Formats.prototype.onKeyUp = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var endCon = range.endContainer;\n var lastChild = endCon.lastChild;\n if (e.event.which === 13 && range.startContainer === endCon && endCon.nodeType !== 3) {\n var pTag = createElement('p');\n pTag.innerHTML = '
    ';\n if (!isNOU(lastChild) && lastChild && lastChild.nodeName === 'BR' && (lastChild.previousSibling && lastChild.previousSibling.nodeName === 'TABLE')) {\n endCon.replaceChild(pTag, lastChild);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, pTag, 0);\n }\n else {\n var brNode = this.parent.nodeSelection.getSelectionNodeCollectionBr(range)[0];\n if (!isNOU(brNode) && brNode.nodeName === 'BR' && (brNode.previousSibling && brNode.previousSibling.nodeName === 'TABLE')) {\n endCon.replaceChild(pTag, brNode);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, pTag, 0);\n }\n }\n }\n };\n Formats.prototype.onKeyDown = function (e) {\n if (e.event.which === 13) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startCon = (range.startContainer.textContent.length === 0 || range.startContainer.nodeName === 'PRE')\n ? range.startContainer : range.startContainer.parentElement;\n var endCon = (range.endContainer.textContent.length === 0 || range.endContainer.nodeName === 'PRE')\n ? range.endContainer : range.endContainer.parentElement;\n var preElem = closest(startCon, 'pre');\n var endPreElem = closest(endCon, 'pre');\n var liParent = !isNOU(preElem) && !isNOU(preElem.parentElement) && preElem.parentElement.tagName === 'LI';\n if (liParent) {\n return;\n }\n if (((isNOU(preElem) && !isNOU(endPreElem)) || (!isNOU(preElem) && isNOU(endPreElem)))) {\n e.event.preventDefault();\n this.deleteContent(range);\n this.removeCodeContent(range);\n range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, endCon, 0);\n }\n if (e.event.which === 13 && !isNOU(preElem) && !isNOU(endPreElem)) {\n e.event.preventDefault();\n this.deleteContent(range);\n this.removeCodeContent(range);\n range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var lastEmpty = range.startContainer.childNodes[range.endOffset];\n var lastBeforeBr = range.startContainer.childNodes[range.endOffset - 1];\n var startParent = range.startContainer;\n if (!isNOU(lastEmpty) && !isNOU(lastBeforeBr) && isNOU(lastEmpty.nextSibling) &&\n lastEmpty.nodeName === 'BR' && lastBeforeBr.nodeName === 'BR') {\n this.paraFocus(range.startContainer, e.enterAction);\n }\n else if ((startParent.textContent.charCodeAt(0) === 8203 &&\n startParent.textContent.length === 1) || startParent.textContent.length === 0) {\n //Double enter with any parent tag for the node\n while (startParent.parentElement.nodeName !== 'PRE' &&\n (startParent.textContent.length === 1 || startParent.textContent.length === 0)) {\n startParent = startParent.parentElement;\n }\n if (!isNOU(startParent.previousSibling) && startParent.previousSibling.nodeName === 'BR' &&\n isNOU(startParent.nextSibling)) {\n this.paraFocus(startParent.parentElement);\n }\n else {\n this.isNotEndCursor(preElem, range);\n }\n }\n else {\n //Cursor at start and middle\n this.isNotEndCursor(preElem, range);\n }\n }\n }\n };\n Formats.prototype.removeCodeContent = function (range) {\n // eslint-disable-next-line\n var regEx = new RegExp(String.fromCharCode(65279), 'g');\n if (!isNOU(range.endContainer.textContent.match(regEx))) {\n var pointer = range.endContainer.textContent.charCodeAt(range.endOffset - 1) === 65279 ?\n range.endOffset - 2 : range.endOffset;\n range.endContainer.textContent = range.endContainer.textContent.replace(regEx, '');\n if (range.endContainer.textContent === '') {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, range.endContainer.parentElement, 0);\n }\n else {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, range.endContainer, pointer);\n }\n }\n };\n Formats.prototype.deleteContent = function (range) {\n if (range.startContainer !== range.endContainer || range.startOffset !== range.endOffset) {\n range.deleteContents();\n }\n };\n Formats.prototype.paraFocus = function (referNode, enterAction) {\n var insertTag;\n if (enterAction === 'DIV') {\n insertTag = createElement('div');\n insertTag.innerHTML = '
    ';\n }\n else if (enterAction === 'BR') {\n insertTag = createElement('br');\n }\n else {\n insertTag = createElement('p');\n insertTag.innerHTML = '
    ';\n }\n this.parent.domNode.insertAfter(insertTag, referNode);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, insertTag, 0);\n detach(referNode.lastChild);\n };\n Formats.prototype.isNotEndCursor = function (preElem, range) {\n var nodeCutter = new NodeCutter();\n var isEnd = range.startOffset === preElem.lastChild.textContent.length &&\n preElem.lastChild.textContent === range.startContainer.textContent;\n //Cursor at start point\n if (preElem.textContent.indexOf(range.startContainer.textContent) === 0 &&\n ((range.startOffset === 0 && range.endOffset === 0) || range.startContainer.nodeName === 'PRE')) {\n this.insertMarker(preElem, range);\n var brTag = createElement('br');\n preElem.childNodes[range.endOffset].parentElement.insertBefore(brTag, preElem.childNodes[range.endOffset]);\n }\n else {\n //Cursor at middle\n var cloneNode = nodeCutter.SplitNode(range, preElem, true);\n this.insertMarker(preElem, range);\n var previousSib = preElem.previousElementSibling;\n if (previousSib.tagName === 'PRE') {\n previousSib.insertAdjacentHTML('beforeend', '
    ' + cloneNode.innerHTML);\n detach(preElem);\n }\n }\n //To place the cursor position\n this.setCursorPosition(isEnd, preElem);\n };\n Formats.prototype.setCursorPosition = function (isEnd, preElem) {\n var isEmpty = false;\n var markerElem = this.parent.editableElement.querySelector('.tempSpan');\n var mrkParentElem = markerElem.parentElement;\n // eslint-disable-next-line\n markerElem.parentNode.textContent === '' ? isEmpty = true :\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n if (isEnd) {\n if (isEmpty) {\n //Enter press when pre element is empty\n if (mrkParentElem === preElem) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n detach(markerElem);\n }\n else {\n this.focusSelectionParent(markerElem, mrkParentElem);\n }\n }\n else {\n var brElm = createElement('br');\n this.parent.domNode.insertAfter(brElm, markerElem);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n detach(markerElem);\n }\n }\n else {\n // eslint-disable-next-line\n isEmpty ? this.focusSelectionParent(markerElem, mrkParentElem) : detach(markerElem);\n }\n };\n Formats.prototype.focusSelectionParent = function (markerElem, tempSpanPElem) {\n detach(markerElem);\n tempSpanPElem.innerHTML = '\\u200B';\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, tempSpanPElem, 0);\n };\n Formats.prototype.insertMarker = function (preElem, range) {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n if (range.startContainer.nodeName === 'PRE') {\n preElem.childNodes[range.endOffset].parentElement.insertBefore(tempSpan, preElem.childNodes[range.endOffset]);\n }\n else {\n range.startContainer.parentElement.insertBefore(tempSpan, range.startContainer);\n }\n };\n Formats.prototype.applyFormats = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var isSelectAll = false;\n if (this.parent.editableElement === range.endContainer &&\n !isNOU(this.parent.editableElement.children[range.endOffset - 1]) &&\n this.parent.editableElement.children[range.endOffset - 1].tagName === 'TABLE' && !range.collapsed) {\n isSelectAll = true;\n }\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var formatsNodes = this.parent.domNode.blockNodes();\n if (e.enterAction === 'BR') {\n this.setSelectionBRConfig();\n var allSelectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument);\n var selectedNodes = this.parent.nodeSelection.getSelectionNodes(allSelectedNode);\n var currentFormatNodes = [];\n if (selectedNodes.length === 0) {\n selectedNodes.push(formatsNodes[0]);\n }\n for (var i = 0; i < selectedNodes.length; i++) {\n var currentNode = selectedNodes[i];\n var previousCurrentNode = void 0;\n while (!this.parent.domNode.isBlockNode(currentNode) && currentNode !== this.parent.editableElement) {\n previousCurrentNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n if (this.parent.domNode.isBlockNode(currentNode) && currentNode === this.parent.editableElement) {\n currentFormatNodes.push(previousCurrentNode);\n }\n }\n for (var i = 0; i < currentFormatNodes.length; i++) {\n if (!this.parent.domNode.isBlockNode(currentFormatNodes[i])) {\n var currentNode = currentFormatNodes[i];\n var previousNode = currentNode;\n while (currentNode === this.parent.editableElement) {\n previousNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n var tempElem = void 0;\n if (this.parent.domNode.isBlockNode(previousNode.parentElement) &&\n previousNode.parentElement === this.parent.editableElement) {\n tempElem = createElement('div');\n previousNode.parentElement.insertBefore(tempElem, previousNode);\n tempElem.appendChild(previousNode);\n }\n else {\n tempElem = previousNode;\n }\n var preNode = tempElem.previousSibling;\n while (!isNOU(preNode) && preNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(preNode)) {\n tempElem.firstChild.parentElement.insertBefore(preNode, tempElem.firstChild);\n preNode = tempElem.previousSibling;\n }\n if (!isNOU(preNode) && preNode.nodeName === 'BR') {\n detach(preNode);\n }\n var postNode = tempElem.nextSibling;\n while (!isNOU(postNode) && postNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(postNode)) {\n tempElem.appendChild(postNode);\n postNode = tempElem.nextSibling;\n }\n if (!isNOU(postNode) && postNode.nodeName === 'BR') {\n detach(postNode);\n }\n }\n }\n this.setSelectionBRConfig();\n formatsNodes = this.parent.domNode.blockNodes();\n }\n for (var i = 0; i < formatsNodes.length; i++) {\n var parentNode = void 0;\n var replaceHTML = void 0;\n if (e.subCommand.toLowerCase() === 'blockquote') {\n parentNode = this.getParentNode(formatsNodes[i]);\n replaceHTML = this.parent.domNode.isList(parentNode) ||\n parentNode.tagName === 'TABLE' ? parentNode.outerHTML : parentNode.innerHTML;\n }\n else {\n parentNode = formatsNodes[i];\n replaceHTML = parentNode.innerHTML;\n }\n if ((e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() &&\n (e.subCommand.toLowerCase() !== 'pre' ||\n (!isNOU(e.exeValue) && e.exeValue.name === 'dropDownSelect'))) ||\n isNOU(parentNode.parentNode) ||\n (parentNode.tagName === 'TABLE' && e.subCommand.toLowerCase() === 'pre')) {\n continue;\n }\n this.cleanFormats(parentNode, e.subCommand);\n var replaceNode = (e.subCommand.toLowerCase() === 'pre' && parentNode.tagName.toLowerCase() === 'pre') ?\n 'p' : e.subCommand;\n var replaceTag = this.parent.domNode.createTagString(replaceNode, parentNode, replaceHTML.replace(/>\\s+<'));\n if (parentNode.tagName === 'LI') {\n parentNode.innerHTML = '';\n parentNode.insertAdjacentHTML('beforeend', replaceTag);\n }\n else {\n this.parent.domNode.replaceWith(parentNode, replaceTag);\n }\n }\n this.preFormatMerge();\n var startNode = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);\n var endNode = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);\n if (!isNOU(startNode) && !isNOU(endNode)) {\n startNode = startNode.lastChild;\n endNode = endNode.lastChild;\n }\n save = this.parent.domNode.saveMarker(save, null);\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n if (isSelectAll) {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startNode, endNode, 0, endNode.textContent.length);\n }\n else {\n save.restore();\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Formats.prototype.setSelectionBRConfig = function () {\n var startElem = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);\n var endElem = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);\n if (isNOU(endElem)) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, startElem, 0);\n }\n else {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startElem, endElem, 0, 0);\n }\n };\n Formats.prototype.preFormatMerge = function () {\n var preNodes = this.parent.editableElement.querySelectorAll('PRE');\n if (!isNOU(preNodes)) {\n for (var i = 0; i < preNodes.length; i++) {\n var previousSib = preNodes[i].previousElementSibling;\n if (!isNOU(previousSib) && previousSib.tagName === 'PRE') {\n previousSib.insertAdjacentHTML('beforeend', '
    ' + preNodes[i].innerHTML);\n detach(preNodes[i]);\n }\n }\n }\n };\n Formats.prototype.cleanFormats = function (element, tagName) {\n var ignoreAttr = ['display', 'font-size', 'margin-top', 'margin-bottom', 'margin-left', 'margin-right', 'font-weight'];\n tagName = tagName.toLowerCase();\n for (var i = 0; i < ignoreAttr.length && (tagName !== 'p' && tagName !== 'blockquote' && tagName !== 'pre'); i++) {\n element.style.removeProperty(ignoreAttr[i]);\n }\n };\n return Formats;\n}());\nexport { Formats };\n","import { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport * as CONSTANT from './../base/constant';\nimport { detach, Browser, isNullOrUndefined as isNOU, createElement, closest } from '@syncfusion/ej2-base';\nimport { InsertMethods } from './insert-methods';\nimport { updateTextNode } from './../../common/util';\n/**\n * Insert a HTML Node or Text\n *\n * @hidden\n\n */\nvar InsertHtml = /** @class */ (function () {\n function InsertHtml() {\n }\n InsertHtml.Insert = function (docElement, insertNode, editNode, isExternal, enterAction) {\n var node;\n if (typeof insertNode === 'string') {\n var divNode = document.createElement('div');\n divNode.innerHTML = insertNode;\n node = isExternal ? divNode : divNode.firstChild;\n }\n else {\n if (isExternal && !(!isNOU(insertNode) && !isNOU(insertNode.classList) &&\n insertNode.classList.contains('pasteContent'))) {\n var divNode = document.createElement('div');\n divNode.appendChild(insertNode);\n node = divNode;\n }\n else {\n node = insertNode;\n }\n }\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n if (range.startContainer === editNode && range.startContainer === range.endContainer && range.startOffset === 0 &&\n range.startOffset === range.endOffset && editNode.textContent.length === 0 &&\n (editNode.children[0].tagName === 'P' || (editNode.children[0].tagName === 'BR'))) {\n nodeSelection.setSelectionText(docElement, range.startContainer.children[0], range.startContainer.children[0], 0, 0);\n range = nodeSelection.getRange(docElement);\n }\n if (range.startContainer === editNode && range.startContainer === range.endContainer && range.startOffset === 0 &&\n range.startOffset === range.endOffset && editNode.textContent.trim().length > 0) {\n var focusNode = this.findFirstTextNode(range.startContainer);\n if (!isNOU(focusNode)) {\n nodeSelection.setSelectionText(docElement, focusNode, focusNode, 0, 0);\n range = nodeSelection.getRange(docElement);\n }\n }\n if (range.startContainer.nodeName === 'BR' && range.startOffset === 0 && range.startOffset === range.endOffset &&\n range.startContainer === range.endContainer) {\n var currentIndex = Array.prototype.slice.call(range.startContainer.parentElement.childNodes).indexOf(range.startContainer);\n nodeSelection.setSelectionText(docElement, range.startContainer.parentElement, range.startContainer.parentElement, currentIndex, currentIndex);\n range = nodeSelection.getRange(docElement);\n }\n var isCursor = range.startOffset === range.endOffset && range.startOffset === 0 &&\n range.startContainer === range.endContainer;\n var isCollapsed = range.collapsed;\n var nodes = this.getNodeCollection(range, nodeSelection, node);\n var closestParentNode = (node.nodeName.toLowerCase() === 'table') ? this.closestEle(nodes[0].parentNode, editNode) : nodes[0];\n if (isExternal || (!isNOU(node) && !isNOU(node.classList) &&\n node.classList.contains('pasteContent'))) {\n this.pasteInsertHTML(nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode, enterAction);\n return;\n }\n if (editNode !== range.startContainer && ((!isCollapsed && !(closestParentNode.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))\n || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {\n var preNode = nodeCutter.GetSpliceNode(range, closestParentNode);\n var sibNode = preNode.previousSibling;\n var parentNode = preNode.parentNode;\n if (nodes.length === 1 || (node.nodeName.toLowerCase() === 'table' && preNode.childElementCount === 0)) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);\n lasNode = isNOU(lasNode) ? preNode : lasNode;\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n range.extractContents();\n if (insertNode.tagName === 'TABLE') {\n this.removeEmptyElements(editNode);\n }\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3 && nodes[index].parentNode != null) {\n if (nodes[index].nodeName === 'IMG') {\n continue;\n }\n nodes[index].parentNode.removeChild(nodes[index]);\n }\n }\n if (sibNode) {\n InsertMethods.AppendBefore(node, sibNode, true);\n }\n else {\n var previousNode = null;\n while (parentNode !== editNode && parentNode.firstChild &&\n (parentNode.textContent.trim() === '')) {\n var parentNode1 = parentNode.parentNode;\n previousNode = parentNode;\n parentNode = parentNode1;\n }\n if (previousNode !== null) {\n parentNode = previousNode;\n }\n if (parentNode.firstChild && (parentNode !== editNode ||\n (node.nodeName === 'TABLE' && isCursor && parentNode === range.startContainer &&\n parentNode === range.endContainer))) {\n if (parentNode.textContent.trim() === '' && parentNode !== editNode) {\n InsertMethods.AppendBefore(node, parentNode, false);\n detach(parentNode);\n }\n else {\n InsertMethods.AppendBefore(node, parentNode.firstChild, false);\n }\n }\n else {\n parentNode.appendChild(node);\n }\n }\n if (node.nodeName === 'IMG') {\n this.imageFocus(node, nodeSelection, docElement);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.childNodes.length);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.textContent.length);\n }\n }\n else {\n range.deleteContents();\n if (isCursor && range.startContainer.textContent === '' && range.startContainer.nodeName !== 'BR') {\n range.startContainer.innerHTML = '';\n }\n if (Browser.isIE) {\n var frag = docElement.createDocumentFragment();\n frag.appendChild(node);\n range.insertNode(frag);\n }\n else if (range.startContainer.nodeType === 1 && range.startContainer.nodeName.toLowerCase() === 'hr'\n && range.endContainer.nodeName.toLowerCase() === 'hr') {\n var paraElem = range.startContainer.nextElementSibling;\n if (paraElem) {\n if (paraElem.querySelector('br')) {\n detach(paraElem.querySelector('br'));\n }\n paraElem.appendChild(node);\n }\n }\n else {\n if (range.startContainer.nodeName === 'BR') {\n range.startContainer.parentElement.insertBefore(node, range.startContainer);\n }\n else {\n range.insertNode(node);\n }\n }\n if (node.nodeType !== 3 && node.childNodes.length > 0) {\n nodeSelection.setSelectionText(docElement, node, node, 1, 1);\n }\n else if (node.nodeName === 'IMG') {\n this.imageFocus(node, nodeSelection, docElement);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionContents(docElement, node);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, node.textContent.length, node.textContent.length);\n }\n }\n };\n InsertHtml.findFirstTextNode = function (node) {\n if (node.nodeType === Node.TEXT_NODE) {\n return node;\n }\n for (var i = 0; i < node.childNodes.length; i++) {\n var textNode = this.findFirstTextNode(node.childNodes[i]);\n if (!isNOU(textNode)) {\n return textNode;\n }\n }\n return null;\n };\n InsertHtml.pasteInsertHTML = function (nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode, enterAction) {\n var isCursor = range.startOffset === range.endOffset &&\n range.startContainer === range.endContainer;\n if (isCursor && range.startContainer === editNode && editNode.textContent === '') {\n var currentBlockNode = this.getImmediateBlockNode(nodes[nodes.length - 1], editNode);\n nodeSelection.setSelectionText(docElement, currentBlockNode, currentBlockNode, 0, 0);\n range = nodeSelection.getRange(docElement);\n }\n var lasNode;\n var sibNode;\n var isSingleNode;\n var preNode;\n if (editNode !== range.startContainer && ((!isCollapsed && !(closestParentNode.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))\n || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {\n preNode = nodeCutter.GetSpliceNode(range, closestParentNode);\n sibNode = isNOU(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n isSingleNode = true;\n }\n else {\n lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);\n lasNode = isNOU(lasNode) ? preNode : lasNode;\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n isSingleNode = false;\n }\n }\n var containsBlockNode = false;\n this.removingComments(node);\n var allChildNodes = node.childNodes;\n for (var i = 0; i < allChildNodes.length; i++) {\n if (CONSTANT.BLOCK_TAGS.indexOf(allChildNodes[i].nodeName.toLocaleLowerCase()) >= 0) {\n containsBlockNode = true;\n break;\n }\n }\n var lastSelectionNode;\n var fragment = document.createDocumentFragment();\n if (!containsBlockNode) {\n if (!isCursor) {\n while (node.firstChild) {\n lastSelectionNode = node.firstChild;\n fragment.appendChild(node.firstChild);\n }\n if (isSingleNode) {\n preNode.parentNode.replaceChild(fragment, preNode);\n }\n else {\n range.deleteContents();\n if (!isNOU(lasNode)) {\n detach(lasNode);\n }\n // eslint-disable-next-line\n !isNOU(sibNode) ? sibNode.parentNode.appendChild(fragment) : editNode.appendChild(fragment);\n }\n }\n else {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n var nearestAnchor = closest(range.startContainer.parentElement, 'a');\n if (range.startContainer.nodeType === 3 && nearestAnchor && closest(nearestAnchor, 'span')) {\n var immediateBlockNode = this.getImmediateBlockNode(range.startContainer, editNode);\n if (immediateBlockNode.querySelectorAll('br').length > 0) {\n detach(immediateBlockNode.querySelector('br'));\n }\n var rangeElement = closest(nearestAnchor, 'span');\n rangeElement.appendChild(tempSpan);\n }\n else {\n range.insertNode(tempSpan);\n }\n while (node.firstChild) {\n lastSelectionNode = node.firstChild;\n fragment.appendChild(node.firstChild);\n }\n tempSpan.parentNode.replaceChild(fragment, tempSpan);\n }\n }\n else {\n var parentElem = range.startContainer;\n while (!isNOU(parentElem) && parentElem.nodeName !== 'PRE' && parentElem !== editNode) {\n parentElem = parentElem.parentElement;\n }\n if (!isNOU(node) && !isNOU(parentElem) && parentElem.nodeName === 'PRE') {\n range.insertNode(node);\n lastSelectionNode = node.lastChild;\n }\n else {\n this.insertTempNode(range, node, nodes, nodeCutter, editNode);\n var isFirstTextNode = true;\n var isPreviousInlineElem = void 0;\n var paraElm = void 0;\n var previousParent = void 0;\n if (!this.contentsDeleted) {\n range.deleteContents();\n }\n while (node.firstChild) {\n if (node.firstChild.nodeName === '#text' && node.firstChild.textContent.trim() === '') {\n detach(node.firstChild);\n continue;\n }\n if (node.firstChild.nodeName === '#text' && isFirstTextNode ||\n (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0 && isFirstTextNode)) {\n lastSelectionNode = node.firstChild;\n if (isNOU(node.previousElementSibling)) {\n var firstParaElm = createElement('p');\n node.parentElement.insertBefore(firstParaElm, node);\n }\n if (node.previousElementSibling.nodeName === 'BR') {\n node.parentElement.insertBefore(node.firstChild, node);\n }\n else {\n node.previousElementSibling.appendChild(node.firstChild);\n }\n }\n else {\n lastSelectionNode = node.firstChild;\n if (node.firstChild.nodeName === '#text' ||\n (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0)) {\n if (!isPreviousInlineElem) {\n paraElm = createElement('p');\n paraElm.appendChild(node.firstChild);\n fragment.appendChild(paraElm);\n }\n else {\n previousParent.appendChild(node.firstChild);\n fragment.appendChild(previousParent);\n }\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n else {\n fragment.appendChild(node.firstChild);\n isPreviousInlineElem = false;\n }\n isFirstTextNode = false;\n }\n }\n node.parentNode.replaceChild(fragment, node);\n }\n }\n if (lastSelectionNode.nodeName === '#text') {\n this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);\n }\n else {\n this.cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode, enterAction);\n }\n };\n InsertHtml.placeCursorEnd = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {\n lastSelectionNode = lastSelectionNode.nodeName === 'BR' ? (isNOU(lastSelectionNode.previousSibling) ? lastSelectionNode.parentNode\n : lastSelectionNode.previousSibling) : lastSelectionNode;\n while (!isNOU(lastSelectionNode) && lastSelectionNode.nodeName !== '#text' && lastSelectionNode.nodeName !== 'IMG' &&\n lastSelectionNode.nodeName !== 'BR' && lastSelectionNode.nodeName !== 'HR') {\n lastSelectionNode = lastSelectionNode.lastChild;\n }\n lastSelectionNode = isNOU(lastSelectionNode) ? node : lastSelectionNode;\n if (lastSelectionNode.nodeName === 'IMG') {\n this.imageFocus(lastSelectionNode, nodeSelection, docElement);\n }\n else {\n nodeSelection.setSelectionText(docElement, lastSelectionNode, lastSelectionNode, lastSelectionNode.textContent.length, lastSelectionNode.textContent.length);\n }\n this.removeEmptyElements(editNode);\n };\n InsertHtml.getNodeCollection = function (range, nodeSelection, node) {\n var nodes = [];\n if (range.startOffset === range.endOffset && range.startContainer === range.endContainer &&\n range.startContainer.nodeName !== 'BR' && range.startContainer.childNodes.length > 0 &&\n (range.startContainer.nodeName === 'TD' || (range.startContainer.nodeType !== 3 &&\n node.classList && node.classList.contains('pasteContent')))) {\n nodes.push(range.startContainer.childNodes[range.endOffset]);\n }\n else {\n nodes = nodeSelection.getInsertNodeCollection(range);\n }\n return nodes;\n };\n InsertHtml.insertTempNode = function (range, node, nodes, nodeCutter, editNode) {\n if (range.startContainer === editNode && !isNOU(range.startContainer.childNodes[range.endOffset - 1]) &&\n range.startContainer.childNodes[range.endOffset - 1].nodeName === 'TABLE') {\n if (isNOU(range.startContainer.childNodes[range.endOffset - 1].nextSibling)) {\n range.startContainer.appendChild(node);\n }\n else {\n range.startContainer.insertBefore(node, range.startContainer.childNodes[range.endOffset - 1].nextSibling);\n }\n }\n else if (range.startContainer === editNode && !isNOU(range.startContainer.childNodes[range.endOffset]) &&\n range.startContainer.childNodes[range.endOffset].nodeName === 'TABLE') {\n range.startContainer.insertBefore(node, range.startContainer.childNodes[range.endOffset]);\n }\n else if (range.startContainer === range.endContainer && range.startContainer.nodeType !== 3\n && node.firstChild.nodeName === 'HR') {\n if (range.startContainer.classList.contains('e-content') || range.startContainer.nodeName === 'BODY') {\n range.startContainer.appendChild(node);\n }\n else {\n range.startContainer.parentNode.insertBefore(node, range.startContainer);\n }\n }\n else {\n var blockNode = this.getImmediateBlockNode(nodes[nodes.length - 1], editNode);\n if ((isNOU(blockNode) || isNOU(blockNode.parentElement)) && range.endContainer.nodeType !== 3) {\n blockNode = range.endContainer;\n range.setEnd(blockNode, range.endContainer.textContent.length);\n }\n if (blockNode.nodeName === 'BODY' && range.startContainer === range.endContainer && range.startContainer.nodeType === 1) {\n blockNode = range.startContainer;\n }\n if (blockNode.closest('LI') && node && node.firstElementChild &&\n ((node).firstElementChild.tagName === 'OL' || node.firstElementChild.tagName === 'UL')) {\n var liNode = void 0;\n while (node.firstElementChild.lastElementChild && node.firstElementChild.lastElementChild.tagName === 'LI') {\n liNode = node.firstElementChild.lastElementChild;\n liNode.style.removeProperty('margin-left');\n liNode.style.removeProperty('margin-top');\n liNode.style.removeProperty('margin-bottom');\n node.firstElementChild.insertAdjacentElement('afterend', liNode);\n }\n }\n if (blockNode.nodeName === 'TD' || blockNode.nodeName === 'TH' || blockNode.nodeName === 'TR') {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n range.insertNode(tempSpan);\n tempSpan.parentNode.replaceChild(node, tempSpan);\n }\n else {\n var nodeSelection = new NodeSelection();\n var currentNode = this.getNodeCollection(range, nodeSelection, node)[this.getNodeCollection(range, nodeSelection, node).length - 1];\n var splitedElm = void 0;\n if ((currentNode.nodeName === 'BR' || currentNode.nodeName === 'HR' ||\n (currentNode.nodeName === '#text' && !isNOU(currentNode.parentElement) && currentNode.parentElement.nodeName === 'LI')) &&\n (!isNOU(currentNode.parentElement) && currentNode.parentElement.textContent.trim().length === 0)) {\n splitedElm = currentNode;\n if (currentNode.parentElement.nodeName === 'LI' && !isNOU(currentNode.nextSibling) &&\n currentNode.nextSibling.nodeName === 'BR') {\n detach(currentNode.nextSibling);\n }\n }\n else if ((currentNode.nodeName === '#text' || currentNode.nodeName === 'BR') && !isNOU(currentNode.parentElement) &&\n (currentNode.parentElement.nodeName === 'LI' || (blockNode === editNode && currentNode.parentElement === blockNode)) &&\n currentNode.parentElement.textContent.trim().length > 0) {\n splitedElm = currentNode;\n if (currentNode.parentElement.nodeName === 'LI' && !isNOU(currentNode.nextSibling) &&\n currentNode.nextSibling.nodeName === 'BR') {\n detach(currentNode.nextSibling);\n }\n if (!range.collapsed) {\n range.deleteContents();\n }\n range.insertNode(node);\n this.contentsDeleted = true;\n return;\n }\n else {\n splitedElm = nodeCutter.GetSpliceNode(range, blockNode);\n }\n splitedElm.parentNode.replaceChild(node, splitedElm);\n }\n }\n };\n InsertHtml.cursorPos = function (lastSelectionNode, node, nodeSelection, docElement, editNode, enterAction) {\n lastSelectionNode.classList.add('lastNode');\n editNode.innerHTML = updateTextNode(editNode.innerHTML, enterAction);\n lastSelectionNode = editNode.querySelector('.lastNode');\n if (!isNOU(lastSelectionNode)) {\n this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);\n lastSelectionNode.classList.remove('lastNode');\n if (lastSelectionNode.classList.length === 0) {\n lastSelectionNode.removeAttribute('class');\n }\n }\n };\n InsertHtml.imageFocus = function (node, nodeSelection, docElement) {\n var focusNode = document.createTextNode(' ');\n node.parentNode.insertBefore(focusNode, node.nextSibling);\n nodeSelection.setSelectionText(docElement, node.nextSibling, node.nextSibling, 0, 0);\n };\n // eslint-disable-next-line\n InsertHtml.getImmediateBlockNode = function (node, editNode) {\n do {\n node = node.parentNode;\n } while (node && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) < 0);\n return node;\n };\n InsertHtml.removingComments = function (elm) {\n var innerElement = elm.innerHTML;\n innerElement = innerElement.replace(//g, '');\n elm.innerHTML = innerElement;\n };\n InsertHtml.findDetachEmptyElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement)) {\n if (element.parentElement.textContent.trim() === '' && element.parentElement.contentEditable !== 'true' &&\n isNOU(element.parentElement.querySelector('img'))) {\n removableElement = this.findDetachEmptyElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n }\n else {\n removableElement = null;\n }\n return removableElement;\n };\n InsertHtml.removeEmptyElements = function (element) {\n var emptyElements = element.querySelectorAll(':empty');\n for (var i = 0; i < emptyElements.length; i++) {\n var lineWithDiv = true;\n if (emptyElements[i].tagName === 'DIV') {\n lineWithDiv = emptyElements[i].style.borderBottom === 'none' ||\n emptyElements[i].style.borderBottom === '' ? true : false;\n }\n if (CONSTANT.SELF_CLOSING_TAGS.indexOf(emptyElements[i].tagName.toLowerCase()) < 0 && lineWithDiv) {\n var detachableElement = this.findDetachEmptyElem(emptyElements[i]);\n if (!isNOU(detachableElement)) {\n detach(detachableElement);\n }\n }\n }\n };\n InsertHtml.closestEle = function (element, editNode) {\n var el = element;\n while (el && el.nodeType === 1) {\n if (el.parentNode === editNode ||\n (!isNOU(el.parentNode.tagName) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(el.parentNode.tagName.toLocaleLowerCase()) !== -1)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n };\n /**\n * Insert method\n *\n * @hidden\n\n */\n InsertHtml.inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\n InsertHtml.contentsDeleted = false;\n return InsertHtml;\n}());\nexport { InsertHtml };\n","import * as CONSTANT from './../base/constant';\nimport { NodeSelection } from '../../selection/selection';\nimport { NodeCutter } from './nodecutter';\nimport { InsertHtml } from './inserthtml';\nimport { createElement, isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\n/**\n * Link internal component\n *\n * @hidden\n\n */\nvar LinkCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the editor manager\n * @hidden\n\n */\n function LinkCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n LinkCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK, this.linkCommand, this);\n };\n LinkCommand.prototype.linkCommand = function (e) {\n switch (e.value.toString().toLocaleLowerCase()) {\n case 'createlink':\n case 'editlink':\n this.createLink(e);\n break;\n case 'openlink':\n this.openLink(e);\n break;\n case 'removelink':\n this.removeLink(e);\n break;\n }\n };\n LinkCommand.prototype.createLink = function (e) {\n var closestAnchor = (!isNOU(e.item.selectParent) && e.item.selectParent.length > 0) &&\n closest(e.item.selectParent[0], 'a');\n closestAnchor = !isNOU(closestAnchor) ? closestAnchor :\n (!isNOU(e.item.selectParent) && e.item.selectParent.length > 0) ? (e.item.selectParent[0]) : null;\n if (!isNOU(closestAnchor) && closestAnchor.tagName === 'A') {\n var anchorEle = closestAnchor;\n var linkText = '';\n if (!isNOU(e.item.url)) {\n anchorEle.setAttribute('href', e.item.url);\n }\n if (!isNOU(e.item.title)) {\n anchorEle.setAttribute('title', e.item.title);\n }\n if (!isNOU(e.item.text) && e.item.text !== '') {\n linkText = anchorEle.innerText;\n anchorEle.innerText = e.item.text;\n }\n if (!isNOU(e.item.target)) {\n anchorEle.setAttribute('target', e.item.target);\n }\n else {\n anchorEle.removeAttribute('target');\n }\n if (linkText === e.item.text) {\n e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle, anchorEle, 1, 1);\n e.item.selection.restore();\n }\n else {\n var startIndex = e.item.action === 'Paste' ? anchorEle.childNodes[0].textContent.length : 0;\n e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle.childNodes[0], anchorEle.childNodes[0], startIndex, anchorEle.childNodes[0].textContent.length);\n }\n }\n else {\n var domSelection = new NodeSelection();\n var range = domSelection.getRange(this.parent.currentDocument);\n if (range.endContainer.nodeName === '#text' && range.startContainer.textContent.length === (range.endOffset + 1) &&\n range.endContainer.textContent.charAt(range.endOffset) === ' ' && (!isNOU(range.endContainer.nextSibling) && range.endContainer.nextSibling.nodeName === 'A')) {\n domSelection.setSelectionText(this.parent.currentDocument, range.startContainer, range.endContainer, range.startOffset, range.endOffset + 1);\n range = domSelection.getRange(this.parent.currentDocument);\n }\n var text = isNOU(e.item.text) ? true : e.item.text.replace(/ /g, '').localeCompare(range.toString()\n .replace(/\\n/g, ' ').replace(/ /g, '')) < 0;\n if (e.event && e.event.type === 'keydown' && (e.event.keyCode === 32\n || e.event.keyCode === 13) || e.item.action === 'Paste' || range.collapsed || text) {\n var anchor = this.createAchorNode(e);\n anchor.innerText = e.item.text === '' ? e.item.url : e.item.text;\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, anchor, this.parent.editableElement);\n if (e.event && e.event.type === 'keydown' && (e.event.keyCode === 32\n || e.event.keyCode === 13)) {\n var startContainer = e.item.selection.range.startContainer;\n startContainer.textContent = this.removeText(startContainer.textContent, e.item.text);\n }\n else {\n var startIndex = e.item.action === 'Paste' ? anchor.childNodes[0].textContent.length : 0;\n e.item.selection.setSelectionText(this.parent.currentDocument, anchor.childNodes[0], anchor.childNodes[0], startIndex, anchor.childNodes[0].textContent.length);\n }\n }\n else {\n this.createLinkNode(e);\n }\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Links',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n LinkCommand.prototype.createLinkNode = function (e) {\n var domSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = domSelection.getRange(this.parent.currentDocument);\n var nodes = this.getSelectionNodes(domSelection.getNodeCollection(range));\n var save = domSelection.save(range, this.parent.currentDocument);\n var txtArray = [];\n var inlineNodes = [];\n var currentNode;\n var removeNodes = [];\n var anchorNodes = [];\n var finalinlineNodes = [];\n var cloneNode;\n for (var index = 0; index < nodes.length; index++) {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n txtArray[index] = nodes[index];\n }\n for (var i = 0; i < txtArray.length; i++) {\n var check = true;\n currentNode = txtArray[i];\n while (check === true) {\n if (currentNode.parentNode.nodeName === 'A') {\n var anchorEle = currentNode.parentNode;\n currentNode.parentNode.parentNode.insertBefore(anchorEle.firstChild, anchorEle);\n currentNode.parentNode.removeChild(anchorEle);\n }\n if (this.isBlockNode(currentNode.parentNode) || txtArray.length === 0 || i === 0 || i === txtArray.length - 1\n || range.startContainer.nodeType === 3) {\n inlineNodes[i] = currentNode;\n check = false;\n }\n else {\n currentNode = currentNode.parentNode;\n }\n }\n }\n for (var i = 0, j_1 = 0; i < inlineNodes.length; i++) {\n if (i === 0) {\n finalinlineNodes[j_1] = inlineNodes[i];\n }\n if (inlineNodes.length > 1 && i < inlineNodes.length - 1) {\n if ((inlineNodes[i].parentElement === inlineNodes[i + 1].parentElement) &&\n (inlineNodes[i] === inlineNodes[i + 1])) {\n continue;\n }\n else {\n finalinlineNodes[j_1 + 1] = inlineNodes[i + 1];\n j_1++;\n }\n }\n }\n var j = 0;\n anchorNodes[j] = this.createAchorNode(e);\n for (var i = 0; i < finalinlineNodes.length; i++) {\n if (i === 0) {\n cloneNode = finalinlineNodes[i].cloneNode(true);\n anchorNodes[i].appendChild(cloneNode);\n }\n if (i < finalinlineNodes.length - 1) {\n if (finalinlineNodes[i].parentNode === finalinlineNodes[i + 1].parentNode) {\n var cln = finalinlineNodes[i + 1].cloneNode(true);\n anchorNodes[j].appendChild(cln);\n }\n else {\n j = j + 1;\n anchorNodes[j] = this.createAchorNode(e);\n cloneNode = finalinlineNodes[i + 1].cloneNode(true);\n anchorNodes[j].appendChild(cloneNode);\n }\n }\n }\n this.parent.nodeSelection.setRange(document, save.range);\n for (var i = 0, j_2 = 0, k = 0; i <= finalinlineNodes.length; i++) {\n if (i === 0) {\n finalinlineNodes[i].parentNode.insertBefore(anchorNodes[j_2], finalinlineNodes[i].nextSibling);\n if (this.parent.domNode.blockNodes().length === 1) {\n this.parent.nodeSelection.setSelectionNode(this.parent.currentDocument, anchorNodes[j_2]);\n }\n removeNodes[k] = finalinlineNodes[i];\n k++;\n }\n if (i < finalinlineNodes.length - 1) {\n if (finalinlineNodes[i].parentNode === finalinlineNodes[i + 1].parentNode) {\n removeNodes[k] = finalinlineNodes[i + 1];\n k++;\n }\n else {\n j_2 = j_2 + 1;\n finalinlineNodes[i + 1].parentNode.insertBefore(anchorNodes[j_2], finalinlineNodes[i + 1]);\n removeNodes[k] = finalinlineNodes[i + 1];\n k++;\n }\n }\n }\n for (var i = 0; i < removeNodes.length; i++) {\n if (removeNodes[i].parentNode) {\n removeNodes[i].parentNode.removeChild(removeNodes[i]);\n }\n }\n };\n LinkCommand.prototype.createAchorNode = function (e) {\n var anchorEle = createElement('a', {\n className: 'e-rte-anchor',\n attrs: {\n href: e.item.url,\n title: isNOU(e.item.title) || e.item.title === '' ? e.item.url : e.item.title\n }\n });\n if (!isNOU(e.item.target)) {\n anchorEle.setAttribute('target', e.item.target);\n }\n return anchorEle;\n };\n LinkCommand.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || nodeCollection[index].textContent.trim() === '') {\n if (nodeCollection[index].nodeName !== 'IMG') {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n }\n return nodeCollection.reverse();\n };\n LinkCommand.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n LinkCommand.prototype.removeText = function (text, val) {\n var arr = text.split(' ');\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === val) {\n arr.splice(i, 1);\n i--;\n }\n }\n return arr.join(' ') + ' ';\n };\n LinkCommand.prototype.openLink = function (e) {\n document.defaultView.open(e.item.url, e.item.target);\n this.callBack(e);\n };\n LinkCommand.prototype.removeLink = function (e) {\n var blockNodes = this.parent.domNode.blockNodes();\n if (blockNodes.length < 2) {\n this.parent.domNode.setMarker(e.item.selection);\n var closestAnchor = closest(e.item.selectParent[0], 'a');\n var selectParent = closestAnchor ? closestAnchor : e.item.selectParent[0];\n var parent_1 = selectParent.parentNode;\n var child = [];\n for (; selectParent.firstChild; null) {\n child.push(parent_1.insertBefore(selectParent.firstChild, selectParent));\n }\n parent_1.removeChild(selectParent);\n if (child && child.length === 1) {\n e.item.selection.startContainer = e.item.selection.getNodeArray(child[child.length - 1], true);\n e.item.selection.endContainer = e.item.selection.startContainer;\n }\n e.item.selection = this.parent.domNode.saveMarker(e.item.selection);\n }\n else {\n for (var i = 0; i < blockNodes.length; i++) {\n var linkNode = blockNodes[i].querySelectorAll('a');\n for (var j = 0; j < linkNode.length; j++) {\n if (document.getSelection().containsNode(linkNode[j], true)) {\n linkNode[j].outerHTML = linkNode[j].innerHTML;\n }\n }\n }\n }\n e.item.selection.restore();\n this.callBack(e);\n };\n LinkCommand.prototype.callBack = function (e) {\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return LinkCommand;\n}());\nexport { LinkCommand };\n","import * as CONSTANT from './../base/constant';\nimport { setStyleAttribute, closest } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * Formats internal component\n *\n * @hidden\n\n */\nvar Alignments = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element.\n * @returns {void}\n * @hidden\n\n */\n function Alignments(parent) {\n this.alignments = {\n 'JustifyLeft': 'left',\n 'JustifyCenter': 'center',\n 'JustifyRight': 'right',\n 'JustifyFull': 'justify'\n };\n this.parent = parent;\n this.addEventListener();\n }\n Alignments.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.ALIGNMENT_TYPE, this.applyAlignment, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Alignments.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'justify-center':\n this.applyAlignment({ subCommand: 'JustifyCenter', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-full':\n this.applyAlignment({ subCommand: 'JustifyFull', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-left':\n this.applyAlignment({ subCommand: 'JustifyLeft', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-right':\n this.applyAlignment({ subCommand: 'JustifyRight', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Alignments.prototype.getTableNode = function (range) {\n var startNode = range.startContainer.nodeType === Node.ELEMENT_NODE\n ? range.startContainer : range.startContainer.parentNode;\n var cellNode = closest(startNode, 'td,th');\n return [cellNode];\n };\n Alignments.prototype.applyAlignment = function (e) {\n var isTableAlign = e.value === 'Table' ? true : false;\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n if (!isTableAlign) {\n this.parent.domNode.setMarker(save);\n var alignmentNodes = this.parent.domNode.blockNodes();\n for (var i = 0; i < alignmentNodes.length; i++) {\n var parentNode = alignmentNodes[i];\n setStyleAttribute(parentNode, { 'text-align': this.alignments[e.subCommand] });\n }\n var imageTags = this.parent.domNode.getImageTagInSelection();\n for (var i = 0; i < imageTags.length; i++) {\n var elementNode = [];\n elementNode.push(imageTags[i]);\n this.parent.imgObj.imageCommand({\n item: {\n selectNode: elementNode\n },\n subCommand: e.subCommand,\n value: e.subCommand,\n callBack: e.callBack,\n selector: e.selector\n });\n }\n this.parent.editableElement.focus();\n save = this.parent.domNode.saveMarker(save);\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n save.restore();\n }\n else {\n setStyleAttribute(this.getTableNode(range)[0], { 'text-align': this.alignments[e.subCommand] });\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: (isTableAlign ? this.getTableNode(range) : this.parent.domNode.blockNodes())\n });\n }\n };\n return Alignments;\n}());\nexport { Alignments };\n","import * as CONSTANT from './../base/constant';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * Indents internal component\n *\n * @hidden\n\n */\nvar Indents = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function Indents(parent) {\n this.indentValue = 20;\n this.parent = parent;\n this.addEventListener();\n }\n Indents.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INDENT_TYPE, this.applyIndents, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Indents.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'indents':\n this.applyIndents({ subCommand: 'Indent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'outdents':\n this.applyIndents({ subCommand: 'Outdent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Indents.prototype.applyIndents = function (e) {\n var editEle = this.parent.editableElement;\n var isRtl = editEle.classList.contains('e-rtl');\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var indentsNodes = this.parent.domNode.blockNodes();\n var parentNodes = indentsNodes.slice();\n var listsNodes = [];\n for (var i = 0; i < parentNodes.length; i++) {\n if (parentNodes[i].tagName !== 'LI' && 'LI' === parentNodes[i].parentNode.tagName) {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i].parentNode);\n }\n else if (parentNodes[i].tagName === 'LI') {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i]);\n }\n }\n if (listsNodes.length > 0) {\n this.parent.observer.notify(EVENTS.KEY_DOWN_HANDLER, {\n event: {\n preventDefault: function () {\n return;\n },\n stopPropagation: function () {\n return;\n },\n shiftKey: (e.subCommand === 'Indent' ? false : true),\n which: 9,\n action: 'indent'\n },\n ignoreDefault: true\n });\n }\n for (var i = 0; i < indentsNodes.length; i++) {\n var parentNode = indentsNodes[i];\n var marginLeftOrRight = isRtl ? parentNode.style.marginRight : parentNode.style.marginLeft;\n var indentsValue = void 0;\n if (e.subCommand === 'Indent') {\n /* eslint-disable */\n indentsValue = marginLeftOrRight === '' ? this.indentValue + 'px' : parseInt(marginLeftOrRight, null) + this.indentValue + 'px';\n isRtl ? (parentNode.style.marginRight = indentsValue) : (parentNode.style.marginLeft = indentsValue);\n }\n else {\n indentsValue = (marginLeftOrRight === '' || marginLeftOrRight === '0px') ? '' : parseInt(marginLeftOrRight, null) - this.indentValue + 'px';\n isRtl ? (parentNode.style.marginRight = indentsValue) : (parentNode.style.marginLeft = indentsValue);\n /* eslint-enable */\n }\n }\n editEle.focus();\n if (isIDevice()) {\n setEditFrameFocus(editEle, e.selector);\n }\n save = this.parent.domNode.saveMarker(save);\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n return Indents;\n}());\nexport { Indents };\n","/**\n * Rich Text Editor classes defined here.\n */\n/**\n * @hidden\n\n */\nexport var CLASS_IMAGE_RIGHT = 'e-imgright';\nexport var CLASS_IMAGE_LEFT = 'e-imgleft';\nexport var CLASS_IMAGE_CENTER = 'e-imgcenter';\nexport var CLASS_VIDEO_RIGHT = 'e-video-right';\nexport var CLASS_VIDEO_LEFT = 'e-video-left';\nexport var CLASS_VIDEO_CENTER = 'e-video-center';\nexport var CLASS_IMAGE_BREAK = 'e-imgbreak';\nexport var CLASS_AUDIO_BREAK = 'e-audio-break';\nexport var CLASS_VIDEO_BREAK = 'e-video-break';\nexport var CLASS_CAPTION = 'e-img-caption';\nexport var CLASS_RTE_CAPTION = 'e-rte-img-caption';\nexport var CLASS_CAPTION_INLINE = 'e-caption-inline';\nexport var CLASS_IMAGE_INLINE = 'e-imginline';\nexport var CLASS_AUDIO_INLINE = 'e-audio-inline';\nexport var CLASS_CLICK_ELEM = 'e-clickelem';\nexport var CLASS_VIDEO_CLICK_ELEM = 'e-video-clickelem';\nexport var CLASS_AUDIO = 'e-rte-audio';\nexport var CLASS_VIDEO = 'e-rte-video';\nexport var CLASS_AUDIO_WRAP = 'e-audio-wrap';\nexport var CLASS_VIDEO_WRAP = 'e-video-wrap';\nexport var CLASS_EMBED_VIDEO_WRAP = 'e-embed-video-wrap';\nexport var CLASS_AUDIO_FOCUS = 'e-audio-focus';\nexport var CLASS_VIDEO_FOCUS = 'e-video-focus';\nexport var CLASS_VIDEO_INLINE = 'e-video-inline';\n","import { createElement, isNullOrUndefined as isNOU, detach, closest, addClass, removeClass, select, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport * as classes from './../base/classes';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n *\n * @hidden\n\n */\nvar ImageCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function ImageCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ImageCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.IMAGE, this.imageCommand, this);\n };\n /**\n * imageCommand method\n *\n * @param {IHtmlItem} e - specifies the element\n * @returns {void}\n * @hidden\n\n */\n ImageCommand.prototype.imageCommand = function (e) {\n switch (e.value.toString().toLowerCase()) {\n case 'image':\n case 'replace':\n this.createImage(e);\n break;\n case 'insertlink':\n this.insertImageLink(e);\n break;\n case 'openimagelink':\n this.openImageLink(e);\n break;\n case 'editimagelink':\n this.editImageLink(e);\n break;\n case 'removeimagelink':\n this.removeImageLink(e);\n break;\n case 'remove':\n this.removeImage(e);\n break;\n case 'alttext':\n this.insertAltTextImage(e);\n break;\n case 'dimension':\n this.imageDimension(e);\n break;\n case 'caption':\n this.imageCaption(e);\n break;\n case 'justifyleft':\n this.imageJustifyLeft(e);\n break;\n case 'justifycenter':\n this.imageJustifyCenter(e);\n break;\n case 'justifyright':\n this.imageJustifyRight(e);\n break;\n case 'inline':\n this.imageInline(e);\n break;\n case 'break':\n this.imageBreak(e);\n break;\n }\n };\n ImageCommand.prototype.createImage = function (e) {\n var _this = this;\n var isReplaced = false;\n e.item.url = isNOU(e.item.url) || e.item.url === 'undefined' ? e.item.src : e.item.url;\n if (!isNOU(e.item.selectParent) && e.item.selectParent[0].tagName === 'IMG') {\n var imgEle = e.item.selectParent[0];\n this.setStyle(imgEle, e);\n isReplaced = true;\n }\n else {\n var imgElement = createElement('img');\n this.setStyle(imgElement, e);\n if (!isNOU(e.item.selection)) {\n e.item.selection.restore();\n }\n if (!isNOU(e.selector) && e.selector === 'pasteCleanupModule') {\n e.callBack({ requestType: 'Images',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: [imgElement]\n });\n }\n else {\n InsertHtml.Insert(this.parent.currentDocument, imgElement, this.parent.editableElement);\n }\n }\n if (e.callBack && (isNOU(e.selector) || !isNOU(e.selector) && e.selector !== 'pasteCleanupModule')) {\n var selectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)[0];\n var imgElm_1 = (e.value === 'Replace' || isReplaced) ? e.item.selectParent[0] :\n (Browser.isIE ? selectedNode.previousSibling : selectedNode.previousElementSibling);\n imgElm_1.addEventListener('load', function () {\n if (e.value !== 'Replace' || !isReplaced) {\n e.callBack({\n requestType: 'Images',\n editorMode: 'HTML',\n event: e.event,\n range: _this.parent.nodeSelection.getRange(_this.parent.currentDocument),\n elements: [imgElm_1]\n });\n }\n });\n }\n };\n ImageCommand.prototype.setStyle = function (imgElement, e) {\n if (!isNOU(e.item.url)) {\n imgElement.setAttribute('src', e.item.url);\n }\n imgElement.setAttribute('class', 'e-rte-image' + (isNOU(e.item.cssClass) ? '' : ' ' + e.item.cssClass));\n if (!isNOU(e.item.altText)) {\n imgElement.setAttribute('alt', e.item.altText);\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.width)) {\n imgElement.setAttribute('width', this.calculateStyleValue(e.item.width.width));\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.height)) {\n imgElement.setAttribute('height', this.calculateStyleValue(e.item.height.height));\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.minWidth)) {\n imgElement.style.minWidth = this.calculateStyleValue(e.item.width.minWidth);\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.maxWidth)) {\n imgElement.style.maxWidth = this.calculateStyleValue(e.item.width.maxWidth);\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.minHeight)) {\n imgElement.style.minHeight = this.calculateStyleValue(e.item.height.minHeight);\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.maxHeight)) {\n imgElement.style.maxHeight = this.calculateStyleValue(e.item.height.maxHeight);\n }\n };\n ImageCommand.prototype.calculateStyleValue = function (value) {\n var styleValue;\n if (typeof (value) === 'string') {\n if (value.indexOf('px') || value.indexOf('%') || value.indexOf('auto')) {\n styleValue = value;\n }\n else {\n styleValue = value + 'px';\n }\n }\n else {\n styleValue = value + 'px';\n }\n return styleValue;\n };\n ImageCommand.prototype.insertImageLink = function (e) {\n var anchor = createElement('a', {\n attrs: {\n href: e.item.url\n }\n });\n if (e.item.selectNode[0].parentElement.classList.contains('e-img-wrap')) {\n e.item.selection.restore();\n anchor.setAttribute('contenteditable', 'true');\n }\n anchor.appendChild(e.item.selectNode[0]);\n if (!isNOU(e.item.target)) {\n anchor.setAttribute('target', e.item.target);\n }\n InsertHtml.Insert(this.parent.currentDocument, anchor, this.parent.editableElement);\n this.callBack(e);\n };\n ImageCommand.prototype.openImageLink = function (e) {\n document.defaultView.open(e.item.url, e.item.target);\n this.callBack(e);\n };\n ImageCommand.prototype.removeImageLink = function (e) {\n var selectParent = e.item.selectParent[0];\n if (selectParent.classList.contains('e-img-caption')) {\n var capImgWrap = select('.e-img-wrap', selectParent);\n var textEle = select('.e-img-inner', selectParent);\n var newTextEle = textEle.cloneNode(true);\n detach(select('a', selectParent));\n detach(textEle);\n capImgWrap.appendChild(e.item.insertElement);\n capImgWrap.appendChild(newTextEle);\n }\n else {\n detach(selectParent);\n if (Browser.isIE && e.item.selection) {\n e.item.selection.restore();\n }\n InsertHtml.Insert(this.parent.currentDocument, e.item.insertElement, this.parent.editableElement);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.editImageLink = function (e) {\n e.item.selectNode[0].parentElement.href = e.item.url;\n if (isNOU(e.item.target)) {\n e.item.selectNode[0].parentElement.removeAttribute('target');\n }\n else {\n e.item.selectNode[0].parentElement.target = e.item.target;\n }\n this.callBack(e);\n };\n ImageCommand.prototype.removeImage = function (e) {\n if (closest(e.item.selectNode[0], 'a')) {\n if (e.item.selectNode[0].parentElement.nodeName === 'A' && !isNOU(e.item.selectNode[0].parentElement.innerText)) {\n if (!isNOU(closest(e.item.selectNode[0], '.' + classes.CLASS_CAPTION))) {\n detach(closest(e.item.selectNode[0], '.' + classes.CLASS_CAPTION));\n }\n else {\n detach(e.item.selectNode[0]);\n }\n }\n else {\n detach(closest(e.item.selectNode[0], 'a'));\n }\n }\n else if (!isNOU(closest(e.item.selectNode[0], '.' + classes.CLASS_CAPTION))) {\n detach(closest(e.item.selectNode[0], '.' + classes.CLASS_CAPTION));\n }\n else {\n detach(e.item.selectNode[0]);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.insertAltTextImage = function (e) {\n e.item.selectNode[0].setAttribute('alt', e.item.altText);\n this.callBack(e);\n };\n ImageCommand.prototype.imageDimension = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.style.height = '';\n selectNode.style.width = '';\n if (e.item.width !== 'auto') {\n selectNode.style.width = formatUnit(e.item.width);\n }\n else {\n selectNode.removeAttribute('width');\n }\n if (e.item.height !== 'auto') {\n selectNode.style.height = formatUnit(e.item.height);\n }\n else {\n selectNode.removeAttribute('height');\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageCaption = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.item.insertElement, this.parent.editableElement);\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyLeft = function (e) {\n var selectNode = e.item.selectNode[0];\n if (!isNOU(selectNode)) {\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n addClass([selectNode], classes.CLASS_IMAGE_LEFT);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_LEFT);\n }\n this.callBack(e);\n }\n };\n ImageCommand.prototype.imageJustifyCenter = function (e) {\n var selectNode = e.item.selectNode[0];\n if (!isNOU(selectNode)) {\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_CENTER);\n addClass([selectNode], classes.CLASS_IMAGE_CENTER);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_CENTER);\n }\n this.callBack(e);\n }\n };\n ImageCommand.prototype.imageJustifyRight = function (e) {\n var selectNode = e.item.selectNode[0];\n if (!isNOU(selectNode)) {\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n addClass([selectNode], classes.CLASS_IMAGE_RIGHT);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_RIGHT);\n }\n this.callBack(e);\n }\n };\n ImageCommand.prototype.imageInline = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n addClass([selectNode], classes.CLASS_IMAGE_INLINE);\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_BREAK);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_CAPTION_INLINE);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageBreak = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], classes.CLASS_IMAGE_BREAK);\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_CAPTION_INLINE);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_BREAK);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.callBack = function (e) {\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return ImageCommand;\n}());\nexport { ImageCommand };\n","import { createElement, isNullOrUndefined as isNOU, detach, addClass, Browser } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport * as classes from './../base/classes';\nimport { InsertHtml } from './inserthtml';\n/**\n * Audio internal component\n *\n * @hidden\n\n */\nvar AudioCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Audio plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function AudioCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n AudioCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.AUDIO, this.audioCommand, this);\n };\n /**\n * audioCommand method\n *\n * @param {IHtmlItem} e - specifies the element\n * @returns {void}\n * @hidden\n\n */\n AudioCommand.prototype.audioCommand = function (e) {\n var selectNode;\n var value = e.value.toString().toLowerCase();\n if (value === 'inline' || value === 'break' || value === 'audioremove') {\n selectNode = e.item.selectNode[0];\n }\n switch (value) {\n case 'audio':\n case 'audioreplace':\n this.createAudio(e);\n break;\n case 'inline':\n selectNode.removeAttribute('class');\n selectNode.closest('.' + classes.CLASS_AUDIO_WRAP).style.display = 'inline-block';\n addClass([selectNode], [classes.CLASS_AUDIO, classes.CLASS_AUDIO_INLINE, classes.CLASS_AUDIO_FOCUS]);\n this.callBack(e);\n break;\n case 'break':\n selectNode.removeAttribute('class');\n selectNode.closest('.' + classes.CLASS_AUDIO_WRAP).style.display = 'block';\n addClass([selectNode], [classes.CLASS_AUDIO_BREAK, classes.CLASS_AUDIO, classes.CLASS_AUDIO_FOCUS]);\n this.callBack(e);\n break;\n case 'audioremove':\n detach(selectNode);\n this.callBack(e);\n break;\n }\n };\n AudioCommand.prototype.createAudio = function (e) {\n var _this = this;\n var isReplaced = false;\n var wrapElement;\n if (!isNOU(e.item.selectParent) && e.item.selectParent[0].classList &&\n (e.item.selectParent[0].classList.contains(classes.CLASS_CLICK_ELEM) ||\n e.item.selectParent[0].classList.contains(classes.CLASS_AUDIO_WRAP))) {\n var audioEle = e.item.selectParent[0].querySelector('source');\n this.setStyle(audioEle, e);\n isReplaced = true;\n }\n else {\n wrapElement = createElement('span', { className: classes.CLASS_AUDIO_WRAP, attrs: { contentEditable: 'false', title: e.item.fileName } });\n var audElement = createElement('audio', { className: classes.CLASS_AUDIO + ' ' + classes.CLASS_AUDIO_INLINE, attrs: { controls: '' } });\n var sourceElement = createElement('source');\n var clickElement = createElement('span', { className: classes.CLASS_CLICK_ELEM });\n this.setStyle(sourceElement, e);\n audElement.appendChild(sourceElement);\n clickElement.appendChild(audElement);\n wrapElement.appendChild(clickElement);\n if (!isNOU(e.item.selection)) {\n e.item.selection.restore();\n }\n InsertHtml.Insert(this.parent.currentDocument, wrapElement, this.parent.editableElement);\n if (wrapElement.nextElementSibling === null) {\n var insertElem = createElement('br');\n wrapElement.parentNode.insertBefore(insertElem, wrapElement.nextSibling);\n }\n }\n if (e.callBack && (isNOU(e.selector) || !isNOU(e.selector) && e.selector !== 'pasteCleanupModule')) {\n var selectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)[0];\n var audioElm_1 = (e.value === 'AudioReplace' || isReplaced) ? e.item.selectParent[0].querySelector('audio')\n : (Browser.isIE ? selectedNode : selectedNode.querySelector('audio'));\n audioElm_1.addEventListener('loadeddata', function () {\n if (e.value !== 'AudioReplace' || !isReplaced) {\n e.callBack({\n requestType: 'Audios',\n editorMode: 'HTML',\n event: e.event,\n range: _this.parent.nodeSelection.getRange(_this.parent.currentDocument),\n elements: [audioElm_1]\n });\n }\n });\n if (isReplaced) {\n audioElm_1.load();\n }\n }\n };\n AudioCommand.prototype.setStyle = function (sourceElement, e) {\n if (!isNOU(e.item.url)) {\n sourceElement.setAttribute('src', e.item.url);\n }\n sourceElement.type = e.item.fileName && e.item.fileName.split('.').length > 0 ?\n 'audio/' + e.item.fileName.split('.')[e.item.fileName.split('.').length - 1] :\n e.item.url && e.item.url.split('.').length > 0 ? 'audio/' + e.item.url.split('.')[e.item.url.split('.').length - 1] : '';\n };\n AudioCommand.prototype.callBack = function (e) {\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return AudioCommand;\n}());\nexport { AudioCommand };\n","import { createElement, isNullOrUndefined as isNOU, detach, addClass, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport * as classes from './../base/classes';\nimport { InsertHtml } from './inserthtml';\n/**\n * Video internal component\n *\n * @hidden\n\n */\nvar VideoCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Video plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function VideoCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n VideoCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.VIDEO, this.videoCommand, this);\n };\n /**\n * videoCommand method\n *\n * @param {IHtmlItem} e - specifies the element\n * @returns {void}\n * @hidden\n\n */\n VideoCommand.prototype.videoCommand = function (e) {\n var selectNode;\n var videoWrapNode;\n var videoClickElem;\n var value = e.value.toString().toLowerCase();\n if (value !== 'video' && value !== 'videoreplace') {\n selectNode = e.item.selectNode[0];\n videoWrapNode = selectNode.closest('.' + classes.CLASS_EMBED_VIDEO_WRAP);\n videoClickElem = selectNode.closest('.' + classes.CLASS_VIDEO_CLICK_ELEM);\n }\n switch (value) {\n case 'video':\n case 'videoreplace':\n this.createVideo(e);\n break;\n case 'videodimension':\n this.videoDimension(e);\n break;\n case 'inline':\n selectNode.removeAttribute('class');\n if (videoWrapNode) {\n videoWrapNode.style.display = 'inline-block';\n }\n if (videoClickElem) {\n selectNode.parentElement.style.cssFloat = '';\n }\n addClass([selectNode], [classes.CLASS_VIDEO, classes.CLASS_VIDEO_INLINE, classes.CLASS_VIDEO_FOCUS]);\n this.callBack(e);\n break;\n case 'break':\n selectNode.removeAttribute('class');\n if (videoWrapNode) {\n videoWrapNode.style.display = 'block';\n }\n if (videoClickElem) {\n selectNode.parentElement.style.cssFloat = '';\n }\n addClass([selectNode], [classes.CLASS_VIDEO_BREAK, classes.CLASS_VIDEO, classes.CLASS_VIDEO_FOCUS]);\n this.callBack(e);\n break;\n case 'justifyleft':\n selectNode.removeAttribute('class');\n if (videoWrapNode) {\n videoWrapNode.style.display = 'block';\n }\n if (videoClickElem) {\n selectNode.parentElement.style.cssFloat = 'left';\n }\n addClass([selectNode], [classes.CLASS_VIDEO, classes.CLASS_VIDEO_LEFT]);\n this.callBack(e);\n break;\n case 'justifycenter':\n selectNode.removeAttribute('class');\n if (videoWrapNode) {\n videoWrapNode.style.display = 'block';\n }\n if (videoClickElem) {\n selectNode.parentElement.style.cssFloat = '';\n }\n addClass([selectNode], [classes.CLASS_VIDEO, classes.CLASS_VIDEO_CENTER]);\n this.callBack(e);\n break;\n case 'justifyright':\n selectNode.removeAttribute('class');\n if (videoWrapNode) {\n videoWrapNode.style.display = 'block';\n }\n if (videoClickElem) {\n selectNode.parentElement.style.cssFloat = 'right';\n }\n addClass([selectNode], [classes.CLASS_VIDEO, classes.CLASS_VIDEO_RIGHT]);\n this.callBack(e);\n break;\n case 'videoremove':\n detach(selectNode.parentElement);\n this.callBack(e);\n break;\n }\n };\n VideoCommand.prototype.createVideo = function (e) {\n var _this = this;\n var isReplaced = false;\n var wrapElement;\n var vidElement;\n var sourceElement;\n if (e.value === 'VideoReplace' && !isNOU(e.item.selectParent) && (e.item.selectParent[0].tagName === 'VIDEO')) {\n var videoEle = e.item.selectParent[0].querySelector('source');\n this.setStyle(videoEle, e, videoEle);\n isReplaced = true;\n }\n else if (e.value === 'VideoReplace' && !isNOU(e.item.selectParent) &&\n e.item.selectParent[0].classList &&\n e.item.selectParent[0].classList.contains(classes.CLASS_VIDEO_CLICK_ELEM)) {\n e.item.selectParent[0].innerHTML = e.item.fileName;\n this.setStyle(e.item.selectParent[0].firstElementChild, e, e.item.selectParent[0].firstElementChild);\n }\n else {\n if (!e.item.isEmbedUrl) {\n wrapElement = createElement('span', { className: classes.CLASS_VIDEO_WRAP, attrs: { contentEditable: 'false', title: e.item.fileName } });\n vidElement = createElement('video', { className: classes.CLASS_VIDEO + ' ' + classes.CLASS_VIDEO_INLINE, attrs: { controls: '' } });\n sourceElement = createElement('source');\n this.setStyle(sourceElement, e, vidElement);\n vidElement.appendChild(sourceElement);\n wrapElement.appendChild(vidElement);\n }\n else {\n wrapElement = createElement('span', { className: classes.CLASS_EMBED_VIDEO_WRAP, attrs: { contentEditable: 'false' } });\n var clickElement = createElement('span', { className: classes.CLASS_VIDEO_CLICK_ELEM });\n var temp = createElement('template');\n temp.innerHTML = e.item.fileName;\n clickElement.appendChild(temp.content);\n vidElement = sourceElement = clickElement.firstElementChild;\n this.setStyle(sourceElement, e, vidElement);\n wrapElement.appendChild(clickElement);\n }\n if (!isNOU(e.item.selection)) {\n e.item.selection.restore();\n }\n InsertHtml.Insert(this.parent.currentDocument, wrapElement, this.parent.editableElement);\n if (wrapElement.nextElementSibling === null) {\n var insertElem = createElement('br');\n wrapElement.parentNode.insertBefore(insertElem, wrapElement.nextSibling);\n }\n }\n if (e.callBack && (isNOU(e.selector) || !isNOU(e.selector) && e.selector !== 'pasteCleanupModule')) {\n var selectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)[0];\n var videoElm_1 = (e.value === 'VideoReplace' || isReplaced) ? !e.item.isEmbedUrl ? e.item.selectParent[0] : e.item.selectParent[0].querySelector('iframe')\n : (Browser.isIE ? selectedNode : !e.item.isEmbedUrl ? selectedNode.lastElementChild : selectedNode.querySelector('iframe'));\n videoElm_1.addEventListener(videoElm_1.tagName !== 'IFRAME' ? 'loadeddata' : 'load', function () {\n if (e.value !== 'VideoReplace' || !isReplaced) {\n if (e.item.isEmbedUrl && videoElm_1) {\n videoElm_1.classList.add('e-rte-embed-url');\n }\n e.callBack({\n requestType: 'Videos',\n editorMode: 'HTML',\n event: e.event,\n range: _this.parent.nodeSelection.getRange(_this.parent.currentDocument),\n elements: [videoElm_1]\n });\n }\n });\n if (isReplaced) {\n videoElm_1.load();\n }\n if (Browser.userAgent.indexOf('Firefox') !== -1) {\n vidElement.addEventListener('play', function () { _this.editAreaVideoClick(e); });\n vidElement.addEventListener('pause', function () { _this.editAreaVideoClick(e); });\n }\n }\n };\n VideoCommand.prototype.editAreaVideoClick = function (e) {\n e.callBack({\n requestType: 'VideosPlayPause',\n editorMode: 'HTML',\n event: e.event\n });\n };\n VideoCommand.prototype.setStyle = function (sourceElement, e, videoEle) {\n if (e.item.url !== '' && !isNOU(e.item.url)) {\n sourceElement.setAttribute('src', e.item.url);\n }\n if (!e.item.isEmbedUrl) {\n sourceElement.type = e.item.fileName && e.item.fileName.split('.').length > 0 ?\n 'video/' + e.item.fileName.split('.')[e.item.fileName.split('.').length - 1] :\n e.item.url && e.item.url.split('.').length > 0 ? 'video/' + e.item.url.split('.')[e.item.url.split('.').length - 1] : '';\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.width)) {\n videoEle.setAttribute('width', formatUnit(e.item.width.width));\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.height)) {\n videoEle.setAttribute('height', formatUnit(e.item.height.height));\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.minWidth)) {\n videoEle.style.minWidth = formatUnit(e.item.width.minWidth);\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.maxWidth)) {\n videoEle.style.maxWidth = formatUnit(e.item.width.maxWidth);\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.minHeight)) {\n videoEle.style.minHeight = formatUnit(e.item.height.minHeight);\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.maxHeight)) {\n videoEle.style.maxHeight = formatUnit(e.item.height.maxHeight);\n }\n };\n VideoCommand.prototype.videoDimension = function (e) {\n var selectNode = !(e.item.selectNode[0].classList.contains(classes.CLASS_VIDEO_CLICK_ELEM)) ? e.item.selectNode[0] :\n e.item.selectNode[0].querySelector('iframe');\n selectNode.style.height = '';\n selectNode.style.width = '';\n if (e.item.width !== 'auto') {\n selectNode.style.width = formatUnit(e.item.width);\n }\n else {\n selectNode.removeAttribute('width');\n }\n if (e.item.height !== 'auto') {\n selectNode.style.height = formatUnit(e.item.height);\n }\n else {\n selectNode.removeAttribute('height');\n }\n this.callBack(e);\n };\n VideoCommand.prototype.callBack = function (e) {\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return VideoCommand;\n}());\nexport { VideoCommand };\n","import { createElement, closest, detach, Browser, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n *\n * @hidden\n\n */\nvar TableCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function TableCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n TableCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.TABLE, this.createTable, this);\n this.parent.observer.on(CONSTANT.INSERT_ROW, this.insertRow, this);\n this.parent.observer.on(CONSTANT.INSERT_COLUMN, this.insertColumn, this);\n this.parent.observer.on(CONSTANT.DELETEROW, this.deleteRow, this);\n this.parent.observer.on(CONSTANT.DELETECOLUMN, this.deleteColumn, this);\n this.parent.observer.on(CONSTANT.REMOVETABLE, this.removeTable, this);\n this.parent.observer.on(CONSTANT.TABLEHEADER, this.tableHeader, this);\n this.parent.observer.on(CONSTANT.TABLE_VERTICAL_ALIGN, this.tableVerticalAlign, this);\n this.parent.observer.on(CONSTANT.TABLE_MERGE, this.cellMerge, this);\n this.parent.observer.on(CONSTANT.TABLE_HORIZONTAL_SPLIT, this.HorizontalSplit, this);\n this.parent.observer.on(CONSTANT.TABLE_VERTICAL_SPLIT, this.VerticalSplit, this);\n this.parent.observer.on(CONSTANT.TABLE_MOVE, this.tableMove, this);\n };\n TableCommand.prototype.createTable = function (e) {\n var table = createElement('table', { className: 'e-rte-table' });\n var tblBody = createElement('tbody');\n if (!isNOU(e.item.width.width)) {\n table.style.width = this.calculateStyleValue(e.item.width.width);\n }\n if (!isNOU(e.item.width.minWidth)) {\n table.style.minWidth = this.calculateStyleValue(e.item.width.minWidth);\n }\n if (!isNOU(e.item.width.maxWidth)) {\n table.style.maxWidth = this.calculateStyleValue(e.item.width.maxWidth);\n }\n var tdWid = parseInt(e.item.width.width, 10) > 100 ?\n 100 / e.item.columns : parseInt(e.item.width.width, 10) / e.item.columns;\n for (var i = 0; i < e.item.rows; i++) {\n var row = createElement('tr');\n for (var j = 0; j < e.item.columns; j++) {\n var cell = createElement('td');\n cell.appendChild(createElement('br'));\n cell.style.width = tdWid + '%';\n row.appendChild(cell);\n }\n tblBody.appendChild(row);\n }\n table.appendChild(tblBody);\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, table, this.parent.editableElement);\n this.removeEmptyNode();\n e.item.selection.setSelectionText(this.parent.currentDocument, table.querySelector('td'), table.querySelector('td'), 0, 0);\n if (table.nextElementSibling === null) {\n var insertElem = void 0;\n if (e.enterAction === 'DIV') {\n insertElem = createElement('div');\n insertElem.appendChild(createElement('br'));\n }\n else if (e.enterAction === 'BR') {\n insertElem = createElement('br');\n }\n else {\n insertElem = createElement('p');\n insertElem.appendChild(createElement('br'));\n }\n this.insertAfter(insertElem, table);\n }\n table.querySelector('td').classList.add('e-cell-select');\n if (e.callBack) {\n e.callBack({\n requestType: 'Table',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: [table]\n });\n }\n return table;\n };\n TableCommand.prototype.calculateStyleValue = function (value) {\n var styleValue;\n if (typeof (value) === 'string') {\n if (value.indexOf('px') || value.indexOf('%') || value.indexOf('auto')) {\n styleValue = value;\n }\n else {\n styleValue = value + 'px';\n }\n }\n else {\n styleValue = value + 'px';\n }\n return styleValue;\n };\n TableCommand.prototype.removeEmptyNode = function () {\n var emptyUl = this.parent.editableElement.querySelectorAll('ul:empty, ol:empty');\n for (var i = 0; i < emptyUl.length; i++) {\n detach(emptyUl[i]);\n }\n var emptyLiChild = this.parent.editableElement.querySelectorAll('li *:empty:not(img)');\n for (var i = 0; i < emptyLiChild.length; i++) {\n detach(emptyLiChild[i]);\n if (emptyLiChild.length === i + 1) {\n emptyLiChild = this.parent.editableElement.querySelectorAll('li *:empty:not(img)');\n i = -1;\n }\n }\n var emptyLi = this.parent.editableElement.querySelectorAll('li:empty');\n for (var i = 0; i < emptyLi.length; i++) {\n detach(emptyLi[i]);\n }\n };\n TableCommand.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n TableCommand.prototype.getSelectedCellMinMaxIndex = function (e) {\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n var a = 0;\n var minI = e.length;\n var maxI = 0;\n var minJ = e[0].length;\n var maxJ = 0;\n //eslint-disable-next-line\n for (var i = 0; a < selectedCells.length; a++) {\n var selectedCellIndex = this.getCorrespondingIndex(selectedCells[a], e);\n var minMaxIndex = this.FindIndex(selectedCellIndex[0], selectedCellIndex[1], e);\n //eslint-disable-next-line\n minI = Math.min(selectedCellIndex[0], minI),\n maxI = Math.max(minMaxIndex[0], maxI),\n minJ = Math.min(selectedCellIndex[1], minJ),\n maxJ = Math.max(minMaxIndex[1], maxJ);\n }\n return {\n startRow: minI,\n endRow: maxI,\n startColumn: minJ,\n endColumn: maxJ\n };\n };\n TableCommand.prototype.insertRow = function (e) {\n var isBelow = e.item.subCommand === 'InsertRowBefore' ? false : true;\n var selectedCell = e.item.selection.range.startContainer;\n if (!(selectedCell.nodeName === 'TH' || selectedCell.nodeName === 'TD')) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n if (selectedCell.nodeName.toLowerCase() === 'th' && e.item.subCommand === 'InsertRowBefore') {\n return;\n }\n this.curTable = closest(this.parent.nodeSelection.range.startContainer.parentElement, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length === 0) {\n var lastRow = this.curTable.rows[this.curTable.rows.length - 1];\n var cloneRow = lastRow.cloneNode(true);\n cloneRow.removeAttribute('rowspan');\n this.insertAfter(cloneRow, lastRow);\n }\n else {\n var allCells = this.getCorrespondingColumns();\n var minMaxIndex = this.getSelectedCellMinMaxIndex(allCells);\n var minVal = isBelow ? minMaxIndex.endRow : minMaxIndex.startRow;\n var newRow = createElement('tr');\n var isHeaderSelect = this.curTable.querySelectorAll('th.e-cell-select').length > 0;\n for (var i = 0; i < allCells[minVal].length; i++) {\n // eslint-disable-next-line max-len\n if (isBelow && minVal < allCells.length - 1 && allCells[minVal][i] === allCells[minVal + 1][i] ||\n !isBelow && 0 < minVal && allCells[minVal][i] === allCells[minVal - 1][i]) {\n if (0 === i || 0 < i && allCells[minVal][i] !== allCells[minVal][i - 1]) {\n allCells[minVal][i].setAttribute('rowspan', (parseInt(allCells[minVal][i].getAttribute('rowspan'), 10) + 1).toString());\n }\n }\n else {\n var tdElement = createElement('td');\n tdElement.appendChild(createElement('br'));\n newRow.appendChild(tdElement);\n tdElement.setAttribute('style', allCells[(isHeaderSelect && isBelow) ? allCells[(minVal + 1)] ? (minVal + 1) : minVal : minVal][i].getAttribute('style'));\n }\n }\n // eslint-disable-next-line\n var selectedRow = void 0;\n if (isHeaderSelect && isBelow) {\n selectedRow = this.curTable.querySelector('tbody').childNodes[0];\n }\n else {\n selectedRow = this.curTable.rows[minVal];\n }\n // eslint-disable-next-line\n (e.item.subCommand === 'InsertRowBefore') ? selectedRow.parentElement.insertBefore(newRow, selectedRow) :\n (isHeaderSelect ? selectedRow.parentElement.insertBefore(newRow, selectedRow) :\n this.insertAfter(newRow, selectedRow));\n }\n e.item.selection.setSelectionText(this.parent.currentDocument, e.item.selection.range.startContainer, e.item.selection.range.startContainer, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.insertColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n if (!(selectedCell.nodeName === 'TH' || selectedCell.nodeName === 'TD')) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n var curRow = closest(selectedCell, 'tr');\n var curCell;\n var allRows = closest((curRow), 'table').rows;\n var colIndex = Array.prototype.slice.call(curRow.querySelectorAll(':scope > td, :scope > th')).indexOf(selectedCell);\n var previousWidth = parseInt(e.item.width, 10) / (curRow.querySelectorAll(':scope > td, :scope > th').length);\n var currentWidth = parseInt(e.item.width, 10) / (curRow.querySelectorAll(':scope > td, :scope > th').length + 1);\n var currentTabElm = closest(curRow, 'table');\n var thTdElm = closest(curRow, 'table').querySelectorAll('th,td');\n for (var i = 0; i < thTdElm.length; i++) {\n thTdElm[i].dataset.oldWidth = (thTdElm[i].offsetWidth / currentTabElm.offsetWidth * 100) + '%';\n }\n for (var i = 0; i < allRows.length; i++) {\n curCell = allRows[i].querySelectorAll(':scope > td, :scope > th')[colIndex];\n var colTemplate = curCell.cloneNode(true);\n colTemplate.innerHTML = '';\n colTemplate.appendChild(createElement('br'));\n colTemplate.removeAttribute('class');\n colTemplate.removeAttribute('colspan');\n colTemplate.removeAttribute('rowspan');\n // eslint-disable-next-line\n (e.item.subCommand === 'InsertColumnLeft') ? curCell.parentElement.insertBefore(colTemplate, curCell) :\n this.insertAfter(colTemplate, curCell);\n colTemplate.style.width = currentWidth.toFixed(4) + '%';\n delete colTemplate.dataset.oldWidth;\n }\n for (var i = 0; i < thTdElm.length; i++) {\n thTdElm[i].style.width = (Number(thTdElm[i].dataset.oldWidth.split('%')[0]) * currentWidth / previousWidth).toFixed(4) + '%';\n delete thTdElm[i].dataset.oldWidth;\n }\n e.item.selection.setSelectionText(this.parent.currentDocument, selectedCell, selectedCell, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n if (selectedCell.nodeType === 3) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n var tBodyHeadEle = closest(selectedCell, selectedCell.tagName === 'TH' ? 'thead' : 'tbody');\n var rowIndex = tBodyHeadEle && Array.prototype.indexOf.call(tBodyHeadEle.childNodes, selectedCell.parentNode);\n this.curTable = closest(selectedCell, 'table');\n var curRow = closest(selectedCell, 'tr');\n if (curRow.querySelectorAll('th,td').length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n var deleteIndex = void 0;\n var allCells = this.getCorrespondingColumns();\n //eslint-disable-next-line\n var selectedMinMaxIndex = this.getSelectedCellMinMaxIndex(allCells);\n var minCol = selectedMinMaxIndex.startColumn;\n var maxCol = selectedMinMaxIndex.endColumn;\n for (var i = 0; i < allCells.length; i++) {\n var currentRow = allCells[i];\n for (var j = 0; j < currentRow.length; j++) {\n var currentCell = currentRow[j];\n //eslint-disable-next-line\n var currentCellIndex = this.getCorrespondingIndex(currentCell, allCells);\n var colSpanVal = parseInt(currentCell.getAttribute('colspan'), 10) || 1;\n if (currentCellIndex[1] + (colSpanVal - 1) >= minCol && currentCellIndex[1] <= maxCol) {\n if (colSpanVal > 1) {\n currentCell.setAttribute('colspan', (colSpanVal - 1).toString());\n }\n else {\n detach(currentCell);\n deleteIndex = j;\n if (Browser.isIE) {\n e.item.selection.setSelectionText(this.parent.currentDocument, this.curTable.querySelector('td'), this.curTable.querySelector('td'), 0, 0);\n this.curTable.querySelector('td, th').classList.add('e-cell-select');\n }\n }\n }\n }\n }\n if (deleteIndex > -1) {\n var rowHeadEle = tBodyHeadEle.children[rowIndex];\n var nextFocusCell = rowHeadEle &&\n rowHeadEle.children[(deleteIndex <= rowHeadEle.children.length - 1 ? deleteIndex : deleteIndex - 1)];\n if (nextFocusCell) {\n e.item.selection.setSelectionText(this.parent.currentDocument, nextFocusCell, nextFocusCell, 0, 0);\n nextFocusCell.classList.add('e-cell-select');\n }\n }\n }\n if (e.callBack) {\n var sContainer = this.parent.nodeSelection.getRange(this.parent.currentDocument).startContainer;\n if (sContainer.nodeName !== 'TD') {\n var startChildLength = this.parent.nodeSelection.getRange(this.parent.currentDocument).startOffset;\n var focusNode = sContainer.children[startChildLength];\n if (focusNode) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, focusNode, 0);\n }\n }\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n if (selectedCell.nodeType === 3) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n var colIndex = Array.prototype.indexOf.call(selectedCell.parentNode.childNodes, selectedCell);\n this.curTable = closest(selectedCell, 'table');\n var currentRow;\n var allCells = this.getCorrespondingColumns();\n var minMaxIndex = this.getSelectedCellMinMaxIndex(allCells);\n var maxI;\n var j;\n if (this.curTable.rows.length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n for (maxI = minMaxIndex.endRow; maxI >= minMaxIndex.startRow; maxI--) {\n currentRow = this.curTable.rows[maxI];\n for (j = 0; j < allCells[maxI].length; j++) {\n if (j === 0 || allCells[maxI][j] !== allCells[maxI][j - 1]) {\n if (1 < parseInt(allCells[maxI][j].getAttribute('rowspan'), 10)) {\n var rowSpanVal = parseInt(allCells[maxI][j].getAttribute('rowspan'), 10) - 1;\n /* eslint-disable */\n if (1 === rowSpanVal) {\n allCells[maxI][j].removeAttribute('rowspan');\n var cell = this.getMergedRow(this.getCorrespondingColumns())[j];\n if (cell) {\n var cloneNode = cell.cloneNode(true);\n cloneNode.innerHTML = '
    ';\n if (cell.parentElement) {\n cell.parentElement.insertBefore(cloneNode, cell);\n }\n }\n }\n else {\n allCells[maxI][j].setAttribute('rowspan', rowSpanVal.toString());\n }\n /* eslint-enable */\n }\n }\n // eslint-disable-next-line max-len\n if (maxI < allCells.length - 1 && allCells[maxI][j] === allCells[maxI + 1][j] && (0 === maxI ||\n allCells[maxI][j] !== allCells[maxI - 1][j])) {\n var element = allCells[maxI][j];\n var index = void 0;\n // eslint-disable-next-line max-len\n for (index = j; 0 < index && allCells[maxI][index] === allCells[maxI][index - 1]; index--) {\n if (index === 0) {\n this.curTable.rows[maxI + 1].prepend(element);\n }\n else {\n allCells[maxI + 1][index - 1].insertAdjacentElement('afterend', element);\n }\n }\n }\n }\n var deleteIndex = currentRow.rowIndex;\n this.curTable.deleteRow(deleteIndex);\n var focusTrEle = !isNOU(this.curTable.rows[deleteIndex]) ? this.curTable.querySelectorAll('tbody tr')[deleteIndex]\n : this.curTable.querySelectorAll('tbody tr')[deleteIndex - 1];\n var nextFocusCell = focusTrEle && focusTrEle.querySelectorAll('td')[colIndex];\n if (nextFocusCell) {\n e.item.selection.setSelectionText(this.parent.currentDocument, nextFocusCell, nextFocusCell, 0, 0);\n nextFocusCell.classList.add('e-cell-select');\n }\n else {\n e.item.selection.setSelectionText(this.parent.currentDocument, this.curTable.querySelector('td'), this.curTable.querySelector('td'), 0, 0);\n this.curTable.querySelector('td, th').classList.add('e-cell-select');\n }\n }\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.getMergedRow = function (cells) {\n var mergedRow;\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].length !== this.curTable.rows[0].childNodes.length) {\n mergedRow = cells[i];\n }\n }\n return mergedRow;\n };\n TableCommand.prototype.removeTable = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var selectedTable = closest(selectedCell.parentElement, 'table');\n if (selectedTable) {\n e.item.selection.restore();\n detach(selectedTable);\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableHeader = function (e) {\n var headerExit = false;\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var table = closest(selectedCell.parentElement, 'table');\n [].slice.call(table.childNodes).forEach(function (el) {\n if (el.nodeName === 'THEAD') {\n headerExit = true;\n }\n });\n if (table && !headerExit) {\n var cellCount = table.querySelector('tr').childElementCount;\n var colSpanCount = 0;\n for (var i = 0; i < cellCount; i++) {\n colSpanCount = colSpanCount + (parseInt(table.querySelector('tr').children[i].getAttribute('colspan'), 10) || 1);\n }\n var header = table.createTHead();\n var row = header.insertRow(0);\n for (var j = 0; j < colSpanCount; j++) {\n var th = createElement('th');\n th.appendChild(createElement('br'));\n row.appendChild(th);\n }\n }\n else {\n table.deleteTHead();\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableVerticalAlign = function (e) {\n if (e.item.subCommand === 'AlignTop') {\n e.item.tableCell.style.verticalAlign = 'top';\n }\n else if (e.item.subCommand === 'AlignMiddle') {\n e.item.tableCell.style.verticalAlign = 'middle';\n }\n else {\n e.item.tableCell.style.verticalAlign = 'bottom';\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.cellMerge = function (e) {\n if (isNOU(this.curTable)) {\n this.curTable = closest(this.parent.nodeSelection.range.startContainer.parentElement, 'table');\n }\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n if (selectedCells.length < 2) {\n return;\n }\n this.mergeCellContent();\n var minMaxIndexes = this.getSelectedMinMaxIndexes(this.getCorrespondingColumns());\n var firstCell = selectedCells[0];\n var rowSelectedCells = firstCell.parentElement.querySelectorAll('.e-cell-select');\n if (minMaxIndexes.startColumn < minMaxIndexes.endColumn) {\n firstCell.setAttribute('colspan', (minMaxIndexes.endColumn - minMaxIndexes.startColumn + 1).toString());\n }\n if (minMaxIndexes.startRow < minMaxIndexes.endRow) {\n firstCell.setAttribute('rowspan', (minMaxIndexes.endRow - minMaxIndexes.startRow + 1).toString());\n }\n var totalWidth = 0;\n for (var j = rowSelectedCells.length - 1; j >= 0; j--) {\n totalWidth = totalWidth + parseFloat(rowSelectedCells[j].style.width);\n }\n firstCell.style.width = totalWidth + '%';\n for (var i = 1; i <= selectedCells.length - 1; i++) {\n detach(selectedCells[i]);\n }\n for (var i = 0; i < this.curTable.rows.length; i++) {\n if (this.curTable.rows[i].innerHTML === '') {\n detach(this.curTable.rows[i]);\n }\n }\n this.updateRowSpanStyle(minMaxIndexes.startRow, minMaxIndexes.endRow, this.getCorrespondingColumns());\n this.updateColSpanStyle(minMaxIndexes.startColumn, minMaxIndexes.endColumn, this.getCorrespondingColumns());\n e.item.selection.setSelectionText(this.parent.currentDocument, e.item.selection.range.startContainer, e.item.selection.range.startContainer, 0, 0);\n if (this.parent.nodeSelection && firstCell) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, \n // eslint-disable-next-line\n firstCell, 0);\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.updateColSpanStyle = function (min, max, elements) {\n var colValue;\n var colIndex;\n var colMin;\n var index = 0;\n var attrValue;\n var count = 0;\n var eleArray = elements;\n //eslint-disable-next-line\n if (min < (max = Math.min(max, eleArray[0].length - 1))) {\n for (colIndex === min; colIndex <= max; colIndex++) {\n // eslint-disable-next-line\n if (!(min < colIndex && eleArray[0][colIndex] === eleArray[0][colIndex - 1]) && 1 < (index =\n Math.min(parseInt(eleArray[0][colIndex].getAttribute('colspan'), 10) || 1, max - min + 1)) &&\n eleArray[0][colIndex] === eleArray[0][colIndex + 1]) {\n for (count = index - 1, colValue = 1; colValue < eleArray.length; colValue++) {\n if (eleArray[colValue][colIndex] !== eleArray[colValue - 1][colIndex]) {\n /* eslint-disable */\n for (colMin = colIndex; colMin < colIndex + index; colMin++) {\n if (1 < (attrValue = parseInt(eleArray[colValue][colMin].getAttribute('colspan'), 10) || 1) &&\n eleArray[colValue][colMin] === eleArray[colValue][colMin + 1]) {\n colMin += count = Math.min(count, attrValue - 1);\n }\n else if (!(count = Math.max(0, count - 1))) {\n break;\n }\n /* eslint-enable */\n }\n }\n if (!count) {\n break;\n }\n }\n }\n }\n if (count) {\n this.updateCellAttribute(eleArray, count, 'colspan', 0, eleArray.length - 1, min, max);\n }\n }\n };\n TableCommand.prototype.updateRowSpanStyle = function (min, max, ele) {\n var rowValue;\n var colIndex;\n var rowMin;\n var index = 0;\n var attrValue;\n var count = 0;\n var eleArray = ele;\n // eslint-disable-next-line\n if (min < (max = Math.min(max, eleArray.length - 1))) {\n for (rowValue = min; rowValue <= max; rowValue++) {\n // eslint-disable-next-line\n if (!(min < rowValue && eleArray[rowValue][0] === eleArray[rowValue - 1][0])\n // eslint-disable-next-line no-cond-assign\n && eleArray[rowValue][0] && 1 < (index = Math.min(parseInt(eleArray[rowValue][0].getAttribute('rowspan'), 10) ||\n 1, max - min + 1)) && eleArray[rowValue][0] === eleArray[rowValue + 1][0]) {\n for (count = index - 1, colIndex = 1; colIndex < eleArray[0].length; colIndex++) {\n if (eleArray[rowValue][colIndex] !== eleArray[rowValue][colIndex - 1]) {\n for (rowMin = rowValue; rowMin < rowValue + index; rowMin++) {\n // eslint-disable-next-line\n if (1 < (attrValue = parseInt(eleArray[rowMin][colIndex].getAttribute('rowspan'), 10) || 1) && eleArray[rowMin][colIndex] === eleArray[rowMin + 1][colIndex]) {\n rowMin += count = Math.min(count, attrValue - 1);\n }\n // eslint-disable-next-line\n else if (!(count = Math.max(0, count - 1))) {\n break;\n }\n }\n if (!count) {\n break;\n }\n }\n }\n }\n }\n if (count) {\n this.updateCellAttribute(eleArray, count, 'rowspan', min, max, 0, eleArray[0].length - 1);\n }\n }\n };\n TableCommand.prototype.updateCellAttribute = function (elements, index, attr, min, max, firstIndex, length) {\n var rowIndex;\n var colIndex;\n var spanCount;\n for (rowIndex = min; rowIndex <= max; rowIndex++) {\n for (colIndex = firstIndex; colIndex <= length; colIndex++) {\n // eslint-disable-next-line\n min < rowIndex && elements[rowIndex][colIndex] === elements[rowIndex - 1][colIndex] ||\n firstIndex < colIndex && elements[rowIndex][colIndex] === elements[rowIndex][colIndex - 1] ||\n 1 < (spanCount = parseInt(elements[rowIndex][colIndex].getAttribute(attr), 10) || 1) &&\n // eslint-disable-next-line max-len\n (1 < spanCount - index ? elements[rowIndex][colIndex].setAttribute(attr, (spanCount - index).toString()) :\n elements[rowIndex][colIndex].removeAttribute(attr));\n }\n }\n };\n TableCommand.prototype.mergeCellContent = function () {\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n var innerHtml = selectedCells[0].innerHTML === '
    ' ? '' : selectedCells[0].innerHTML;\n for (var i = 1; i < selectedCells.length; i++) {\n if ('
    ' !== selectedCells[i].innerHTML) {\n innerHtml = innerHtml ? innerHtml + '
    ' + selectedCells[i].innerHTML : innerHtml + selectedCells[i].innerHTML;\n }\n }\n selectedCells[0].innerHTML = innerHtml;\n };\n TableCommand.prototype.getSelectedMinMaxIndexes = function (correspondingCells) {\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n if (0 < selectedCells.length) {\n var minRow = correspondingCells.length;\n var maxRow = 0;\n var minCol = correspondingCells[0].length;\n var maxCol = 0;\n for (var i = 0; i < selectedCells.length; i++) {\n var currentRowCol = this.getCorrespondingIndex(selectedCells[i], correspondingCells);\n var targetRowCol = this.FindIndex(currentRowCol[0], currentRowCol[1], correspondingCells);\n minRow = Math.min(currentRowCol[0], minRow);\n maxRow = Math.max(targetRowCol[0], maxRow);\n minCol = Math.min(currentRowCol[1], minCol);\n maxCol = Math.max(targetRowCol[1], maxCol);\n }\n return {\n startRow: minRow,\n endRow: maxRow,\n startColumn: minCol,\n endColumn: maxCol\n };\n }\n return null;\n };\n TableCommand.prototype.HorizontalSplit = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n this.curTable = closest(selectedCell.parentElement, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length > 1) {\n return;\n }\n this.activeCell = this.curTable.querySelector('.e-cell-select');\n var newCell = this.activeCell.cloneNode(true);\n newCell.removeAttribute('class');\n newCell.innerHTML = '
    ';\n var activeCellIndex = this.getCorrespondingIndex(this.activeCell, this.getCorrespondingColumns());\n var correspondingCells = this.getCorrespondingColumns();\n var activeCellRowSpan = this.activeCell.getAttribute('rowspan') ? parseInt(this.activeCell.getAttribute('rowspan'), 10) : 1;\n if (activeCellRowSpan > 1) {\n var avgCount = Math.ceil(activeCellRowSpan / 2);\n // eslint-disable-next-line\n 1 < avgCount ? this.activeCell.setAttribute('rowspan', avgCount.toString()) :\n this.activeCell.removeAttribute('rowspan');\n // eslint-disable-next-line\n 1 < (activeCellRowSpan - avgCount) ? newCell.setAttribute('rowspan', (activeCellRowSpan - avgCount).toString()) : newCell.removeAttribute('rowspan');\n var avgRowIndex = void 0;\n var colIndex = void 0;\n for (avgRowIndex = activeCellIndex[0] + Math.ceil(activeCellRowSpan / 2),\n colIndex = 0 === activeCellIndex[1] ? activeCellIndex[1]\n : activeCellIndex[1] - 1; 0 <= colIndex && (correspondingCells[avgRowIndex][colIndex] ===\n // eslint-disable-next-line max-len\n correspondingCells[avgRowIndex][colIndex - 1] || 0 < avgRowIndex && correspondingCells[avgRowIndex][colIndex]\n === correspondingCells[avgRowIndex - 1][colIndex]);) {\n colIndex--;\n }\n if (colIndex === -1) {\n // eslint-disable-next-line\n this.curTable.rows[avgRowIndex].firstChild ? this.curTable.rows[avgRowIndex].prepend(newCell) : this.curTable.appendChild(newCell);\n }\n else {\n correspondingCells[avgRowIndex][colIndex].insertAdjacentElement('afterend', newCell);\n }\n }\n else {\n var newTrEle = createElement('tr');\n newTrEle.appendChild(newCell);\n var selectedRow = correspondingCells[activeCellIndex[0]];\n for (var j = 0; j <= selectedRow.length - 1; j++) {\n if (selectedRow[j] !== selectedRow[j - 1] && selectedRow[j] !== this.activeCell) {\n selectedRow[j].setAttribute('rowspan', ((parseInt(selectedRow[j].getAttribute('rowspan'), 10) ?\n parseInt(selectedRow[j].getAttribute('rowspan'), 10) : 1) + 1).toString());\n }\n }\n this.activeCell.parentNode.insertAdjacentElement('afterend', newTrEle);\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.VerticalSplit = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n this.curTable = closest(selectedCell.parentElement, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length > 1) {\n return;\n }\n this.activeCell = this.curTable.querySelector('.e-cell-select');\n var allRows = this.curTable.rows;\n var newCell = this.activeCell.cloneNode(true);\n newCell.removeAttribute('class');\n newCell.innerHTML = '
    ';\n var avgWidth = parseFloat(this.activeCell.style.width) / 2;\n if (this.activeCell.tagName === 'TH' && isNaN(avgWidth)) {\n var cellCount = this.curTable.querySelector('tr').childElementCount;\n var colSpanCount = 0;\n for (var i = 0; i < cellCount; i++) {\n colSpanCount = colSpanCount + (parseInt(this.curTable.querySelector('tr').children[i].getAttribute('colspan'), 10) || 1);\n }\n avgWidth = parseFloat((((this.activeCell.offsetWidth / 2) / this.curTable.offsetWidth) * 100).toFixed(1));\n }\n var activeCellIndex = this.getCorrespondingIndex(this.activeCell, this.getCorrespondingColumns());\n var correspondingColumns = this.getCorrespondingColumns();\n var activeCellcolSpan = parseInt(this.activeCell.getAttribute('colspan'), 10);\n if (activeCellcolSpan > 1) {\n // eslint-disable-next-line\n 1 < Math.ceil(activeCellcolSpan / 2) ? this.activeCell.setAttribute('colspan', (activeCellcolSpan / 2).toString())\n : this.activeCell.removeAttribute('colspan');\n // eslint-disable-next-line\n 1 < (activeCellcolSpan - activeCellcolSpan / 2) ? newCell.setAttribute('colspan', \n // eslint-disable-next-line\n (activeCellcolSpan - activeCellcolSpan / 2).toString()) : newCell.removeAttribute('colspan');\n }\n else {\n for (var i = 0; i <= allRows.length - 1; i++) {\n if (0 === i || correspondingColumns[i][activeCellIndex[1]] !== correspondingColumns[i - 1][activeCellIndex[1]]) {\n var currentCell = correspondingColumns[i][activeCellIndex[1]];\n if (currentCell !== this.activeCell) {\n currentCell.setAttribute('colspan', ((parseInt(currentCell.getAttribute('colspan'), 10) ?\n parseInt(currentCell.getAttribute('colspan'), 10) : 1) + 1).toString());\n }\n }\n }\n }\n this.activeCell.style.width = avgWidth + '%';\n newCell.style.width = avgWidth + '%';\n this.activeCell.parentNode.insertBefore(newCell, this.activeCell.nextSibling);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.getCorrespondingColumns = function () {\n var elementArray = [];\n // eslint-disable-next-line\n var _this = this;\n var colspan = 0;\n var allRows = _this.curTable.rows;\n for (var i = 0; i <= allRows.length - 1; i++) {\n var ele = allRows[i];\n var index = 0;\n for (var j = 0; j <= ele.children.length - 1; j++) {\n /* eslint-disable */\n var colEle = ele.children[j];\n for (var ele_1 = colEle, colspan_1 = parseInt(ele_1.getAttribute('colspan'), 10) || 1, rowSpan = parseInt(ele_1.getAttribute('rowspan'), 10) || 1, rowIndex = i; rowIndex < i + rowSpan; rowIndex++) {\n for (var colIndex = index; colIndex < index + colspan_1; colIndex++) {\n elementArray[rowIndex] || (elementArray[rowIndex] = []);\n elementArray[rowIndex][colIndex] ? index++ : elementArray[rowIndex][colIndex] = colEle;\n }\n }\n index += colspan;\n }\n /* eslint-enable */\n }\n return elementArray;\n };\n // eslint-disable-next-line\n TableCommand.prototype.FindIndex = function (rowIndex, columnIndex, cells) {\n var nextIndex;\n var nextCol;\n for (nextIndex = rowIndex + 1, nextCol = columnIndex + 1; nextIndex < cells.length;) {\n if (cells[nextIndex][columnIndex] !== cells[rowIndex][columnIndex]) {\n nextIndex--;\n break;\n }\n nextIndex++;\n }\n for (nextIndex === cells.length && nextIndex--; nextCol < cells[rowIndex].length;) {\n if (cells[rowIndex][nextCol] !== cells[rowIndex][columnIndex]) {\n nextCol--;\n break;\n }\n nextCol++;\n }\n return nextCol === cells[rowIndex].length && nextCol--,\n [\n nextIndex,\n nextCol\n ];\n };\n TableCommand.prototype.getCorrespondingIndex = function (cell, allCells) {\n //let value: RowCol = new RowCol();\n for (var i = 0; i < allCells.length; i++) {\n for (var j = 0; j < allCells[i].length; j++) {\n if (allCells[i][j] === cell) {\n return [i, j];\n }\n }\n }\n return [];\n };\n TableCommand.prototype.highlightCells = function (minRow, maxRow, minCol, maxCol, eleArray) {\n var j;\n var k;\n var startCell;\n var endCell;\n var minRowIndex = minRow;\n var maxRowIndex = maxRow;\n var minColIndex = minCol;\n var maxColIndex = maxCol;\n var minMaxValues = new MinMax();\n for (j = minRowIndex; j <= maxRowIndex; j++) {\n /* eslint-disable */\n if ((1 < (parseInt(eleArray[j][minColIndex].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[j][minColIndex].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[j][minColIndex], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n else if ((1 < (parseInt(eleArray[j][maxColIndex].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[j][maxColIndex].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[j][maxColIndex], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n for (k = minColIndex; k <= maxColIndex; k++) {\n if ((1 < (parseInt(eleArray[minRowIndex][k].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[minRowIndex][k].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[minRowIndex][k], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n else if ((1 < (parseInt(eleArray[maxRowIndex][k].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[maxRowIndex][k].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[maxRowIndex][k], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n }\n minMaxValues = minRowIndex === minRow && maxRowIndex === maxRow && minColIndex === minCol && maxColIndex === maxCol ? {\n startRow: minRow,\n endRow: maxRow,\n startColumn: minCol,\n endColumn: maxCol\n } : this.highlightCells(minRowIndex, maxRowIndex, minColIndex, maxColIndex, eleArray);\n }\n return minMaxValues;\n /* eslint-enable */\n };\n TableCommand.prototype.tableMove = function (e) {\n this.activeCell = e.selectNode[0];\n var target = e.event.target;\n var activeCellTag = this.activeCell.tagName;\n var targetCellTag = target.tagName;\n this.curTable = closest(target, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length > 1) {\n this.parent.nodeSelection.Clear(this.parent.currentDocument);\n }\n if ((target.tagName !== 'TD' && target.tagName !== 'TH') && activeCellTag !== targetCellTag) {\n return;\n }\n var activeRowIndex = Array.prototype.slice.call((this.activeCell).parentElement.parentElement.children)\n .indexOf((this.activeCell).parentElement);\n var activeColumnIndex = Array.prototype.slice.call((this.activeCell).parentElement.children).indexOf(this.activeCell);\n var targetRowIndex = Array.prototype.slice.call(target.parentElement.parentElement.children)\n .indexOf(target.parentElement);\n var targetColumnIndex = Array.prototype.slice.call(target.parentElement.children).indexOf(target);\n var activeCellList = this.curTable.querySelectorAll('.e-cell-select');\n for (var i = activeCellList.length - 1; i >= 0; i--) {\n if (this.activeCell !== activeCellList[i]) {\n activeCellList[i].classList.remove('e-cell-select');\n }\n }\n if (activeRowIndex === targetRowIndex && activeColumnIndex === targetColumnIndex) {\n return;\n }\n var correspondingCells = this.getCorrespondingColumns();\n var activeIndexes = this.getCorrespondingIndex(this.activeCell, correspondingCells);\n var targetIndexes = this.getCorrespondingIndex(target, correspondingCells);\n var minMaxIndexes = this.highlightCells(Math.min(activeIndexes[0], targetIndexes[0]), Math.max(activeIndexes[0], \n /* eslint-disable */\n targetIndexes[0]), Math.min(activeIndexes[1], targetIndexes[1]), Math.max(activeIndexes[1], targetIndexes[1]), correspondingCells);\n for (var rowIndex = minMaxIndexes.startRow; rowIndex <= minMaxIndexes.endRow; rowIndex++) {\n for (var colIndex = minMaxIndexes.startColumn; colIndex <= minMaxIndexes.endColumn; colIndex++) {\n correspondingCells[rowIndex][colIndex].classList.add('e-cell-select');\n }\n }\n if (this.parent.nodeSelection.range) {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, this.parent.nodeSelection.range.endContainer, this.parent.nodeSelection.range.endContainer, 0, 0);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, this.parent.nodeSelection.range.endContainer, 0);\n }\n };\n ;\n return TableCommand;\n}());\nexport { TableCommand };\nvar MinMax = /** @class */ (function () {\n function MinMax() {\n }\n return MinMax;\n}());\n","/**\n * Is formatted or not.\n *\n * @hidden\n\n */\nvar IsFormatted = /** @class */ (function () {\n function IsFormatted() {\n }\n /**\n * getFormattedNode method\n *\n * @param {Node} node - specifies the node.\n * @param {string} format - specifies the string value.\n * @param {Node} endNode - specifies the end node\n * @returns {Node} - returns the node\n * @hidden\n\n */\n IsFormatted.prototype.getFormattedNode = function (node, format, endNode) {\n var parentNode = this.getFormatParent(node, format, endNode);\n if (parentNode !== null && parentNode !== endNode) {\n return parentNode;\n }\n return null;\n };\n IsFormatted.prototype.getFormatParent = function (node, format, endNode) {\n do {\n node = node.parentNode;\n } while (node && (node !== endNode) && !this.isFormattedNode(node, format));\n return node;\n };\n IsFormatted.prototype.isFormattedNode = function (node, format) {\n switch (format) {\n case 'bold':\n return IsFormatted.isBold(node);\n case 'italic':\n return IsFormatted.isItalic(node);\n case 'underline':\n return IsFormatted.isUnderline(node);\n case 'strikethrough':\n return IsFormatted.isStrikethrough(node);\n case 'superscript':\n return IsFormatted.isSuperscript(node);\n case 'subscript':\n return IsFormatted.isSubscript(node);\n case 'fontcolor':\n return this.isFontColor(node);\n case 'fontname':\n return this.isFontName(node);\n case 'fontsize':\n return this.isFontSize(node);\n case 'backgroundcolor':\n return this.isBackgroundColor(node);\n default:\n return false;\n }\n };\n /**\n * isBold method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isBold = function (node) {\n var validTags = ['strong', 'b'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontWeight === 'bold') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isItalic method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isItalic = function (node) {\n var validTags = ['em', 'i'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontStyle === 'italic') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isUnderline method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isUnderline = function (node) {\n var validTags = ['u'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n /* eslint-disable */\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && (node.style.textDecoration === 'underline' ||\n node.style.textDecorationLine === 'underline')) {\n /* eslint-enable */\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isStrikethrough method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isStrikethrough = function (node) {\n var validTags = ['del', 'strike'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n /* eslint-disable */\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && (node.style.textDecoration === 'line-through' ||\n node.style.textDecorationLine === 'line-through')) {\n /* eslint-enable */\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isSuperscript method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isSuperscript = function (node) {\n var validTags = ['sup'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isSubscript method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isSubscript = function (node) {\n var validTags = ['sub'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontColor = function (node) {\n var color = node.style && node.style.color;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n color !== null && color !== '' && color !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n backColor !== null && backColor !== '' && backColor !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontSize = function (node) {\n var size = node.style && node.style.fontSize;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n size !== null && size !== '' && size !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontName = function (node) {\n var name = node.style && node.style.fontFamily;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n name !== null && name !== '' && name !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n // Get Formatted Node\n IsFormatted.inlineTags = [\n 'a',\n 'abbr',\n 'acronym',\n 'b',\n 'bdo',\n 'big',\n 'cite',\n 'code',\n 'dfn',\n 'em',\n 'font',\n 'i',\n 'kbd',\n 'label',\n 'q',\n 'samp',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'tt',\n 'u',\n 'var',\n 'del'\n ];\n return IsFormatted;\n}());\nexport { IsFormatted };\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { isNullOrUndefined as isNOU, Browser, closest, detach } from '@syncfusion/ej2-base';\nimport { DOMNode } from './dom-node';\nvar SelectionCommands = /** @class */ (function () {\n function SelectionCommands() {\n }\n /**\n * applyFormat method\n *\n * @param {Document} docElement - specifies the document\n * @param {string} format - specifies the string value\n * @param {Node} endNode - specifies the end node\n * @param {string} enterAction - specifies the enter key action\n * @param {string} value - specifies the string value\n * @param {string} selector - specifies the string\n * @param {FormatPainterValue} painterValues specifies the element created and last child\n * @returns {void}\n * @hidden\n\n */\n SelectionCommands.applyFormat = function (docElement, format, endNode, enterAction, value, selector, painterValues) {\n this.enterAction = enterAction;\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase', 'fontcolor', 'fontname', 'fontsize', 'backgroundcolor'];\n if (validFormats.indexOf(format) > -1 || value === 'formatPainter') {\n if (format === 'backgroundcolor' && value === '') {\n value = 'transparent';\n }\n var domSelection = new NodeSelection();\n var domNode = new DOMNode(endNode, docElement);\n var nodeCutter = new NodeCutter();\n var isFormatted = new IsFormatted();\n var range = domSelection.getRange(docElement);\n var save = domSelection.save(range, docElement);\n var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :\n domSelection.getSelectionNodeCollectionBr(range);\n var isCollapsed = false;\n var isFormat = false;\n var isCursor = false;\n var preventRestore = false;\n var isFontStyle = (['fontcolor', 'fontname', 'fontsize', 'backgroundcolor'].indexOf(format) > -1);\n if (range.collapsed) {\n var currentFormatNode = isFormatted.getFormattedNode(range.startContainer, format, endNode);\n var currentSelector = !isNOU(currentFormatNode) ?\n (currentFormatNode.getAttribute('style') === null ? currentFormatNode.nodeName :\n currentFormatNode.nodeName + '[style=\\'' + currentFormatNode.getAttribute('style') + '\\']') : null;\n if (nodes.length > 0) {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, nodes[0]);\n }\n else if (range.startContainer.nodeType === 3 && ((range.startContainer.parentElement.childElementCount > 0 &&\n range.startOffset > 0 && range.startContainer.parentElement.firstElementChild.tagName.toLowerCase() !== 'br') ||\n !isNOU(currentFormatNode) && currentFormatNode ===\n (range.startContainer.parentElement.closest(currentSelector)) &&\n ((range.startContainer.parentElement.closest(currentSelector)).textContent.replace(\n // eslint-disable-next-line\n new RegExp(String.fromCharCode(8203), 'g'), '').trim().length !== 0))) {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, range.startContainer);\n nodes.push(range.startContainer);\n }\n else {\n var cursorNode = this.insertCursorNode(docElement, domSelection, range, isFormatted, nodeCutter, format, value, endNode);\n domSelection.endContainer = domSelection.startContainer = domSelection.getNodeArray(cursorNode, true);\n var childNodes = cursorNode.nodeName === 'BR' && cursorNode.parentNode.childNodes;\n if (!isNOU(childNodes) && childNodes.length === 1 && childNodes[0].nodeName === 'BR' && nodes.length === 0) {\n domSelection.setSelectionText(docElement, range.startContainer, range.endContainer, 0, 0);\n preventRestore = true;\n }\n else {\n domSelection.endOffset = domSelection.startOffset = 1;\n }\n if (cursorNode.nodeName === 'BR' && cursorNode.parentNode.textContent.length === 0) {\n preventRestore = true;\n }\n }\n }\n isCursor = range.collapsed;\n var isSubSup = false;\n for (var index = 0; index < nodes.length; index++) {\n var formatNode = isFormatted.getFormattedNode(nodes[index], format, endNode);\n if (formatNode === null) {\n if (format === 'subscript') {\n formatNode = isFormatted.getFormattedNode(nodes[index], 'superscript', endNode);\n isSubSup = formatNode === null ? false : true;\n }\n else if (format === 'superscript') {\n formatNode = isFormatted.getFormattedNode(nodes[index], 'subscript', endNode);\n isSubSup = formatNode === null ? false : true;\n }\n }\n if (index === 0 && formatNode === null) {\n isFormat = true;\n }\n if (formatNode !== null && (!isFormat || isFontStyle)) {\n nodes[index] = this.removeFormat(nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection, endNode, domNode);\n }\n else {\n nodes[index] = this.insertFormat(docElement, nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, painterValues, domNode, endNode);\n }\n domSelection = this.applySelection(nodes, domSelection, nodeCutter, index, isCollapsed);\n }\n if (isIDevice()) {\n setEditFrameFocus(endNode, selector);\n }\n if (!preventRestore) {\n save.restore();\n }\n if (isSubSup) {\n this.applyFormat(docElement, format, endNode, enterAction);\n }\n }\n };\n SelectionCommands.insertCursorNode = function (docElement, domSelection, range, isFormatted, nodeCutter, format, value, endNode) {\n var cursorNodes = domSelection.getNodeCollection(range);\n var domNode = new DOMNode(endNode, docElement);\n var cursorFormat = (cursorNodes.length > 0) ?\n (cursorNodes.length > 1 && range.startContainer === range.endContainer) ?\n this.getCursorFormat(isFormatted, cursorNodes, format, endNode) :\n isFormatted.getFormattedNode(cursorNodes[0], format, endNode) : null;\n var cursorNode = null;\n if (cursorFormat) {\n cursorNode = cursorNodes[0];\n if (cursorFormat.firstChild.textContent.charCodeAt(0) === 8203 && cursorFormat.firstChild.nodeType === 3) {\n // eslint-disable-next-line\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var emptySpaceNode = void 0;\n if (cursorFormat.firstChild === cursorNode) {\n cursorNode.textContent = (cursorFormat.parentElement && (domNode.isBlockNode(cursorFormat.parentElement) &&\n cursorFormat.parentElement.textContent.length <= 1 ? cursorFormat.parentElement.childElementCount > 1 :\n cursorFormat.childElementCount === 0) &&\n (cursorFormat.parentElement.textContent.length > 1 ||\n cursorFormat.parentElement.firstChild && cursorFormat.parentElement.firstChild.nodeType === 1) ?\n cursorNode.textContent : cursorNode.textContent.replace(regEx, ''));\n emptySpaceNode = cursorNode;\n }\n else {\n cursorFormat.firstChild.textContent = cursorFormat.firstChild.textContent.replace(regEx, '');\n emptySpaceNode = cursorFormat.firstChild;\n }\n var pointer = void 0;\n if (emptySpaceNode.textContent.length === 0) {\n if (!isNOU(emptySpaceNode.previousSibling)) {\n cursorNode = emptySpaceNode.previousSibling;\n pointer = emptySpaceNode.textContent.length - 1;\n domSelection.setCursorPoint(docElement, emptySpaceNode, pointer);\n }\n else if (!isNOU(emptySpaceNode.parentElement) && emptySpaceNode.parentElement.textContent.length === 0) {\n var brElem = document.createElement('BR');\n emptySpaceNode.parentElement.appendChild(brElem);\n detach(emptySpaceNode);\n cursorNode = brElem;\n domSelection.setCursorPoint(docElement, cursorNode.parentElement, 0);\n }\n }\n }\n if ((['fontcolor', 'fontname', 'fontsize', 'backgroundcolor'].indexOf(format) > -1)) {\n if (format === 'fontcolor') {\n cursorFormat.style.color = value;\n }\n else if (format === 'fontname') {\n cursorFormat.style.fontFamily = value;\n }\n else if (format === 'fontsize') {\n cursorFormat.style.fontSize = value;\n }\n else {\n cursorFormat.style.backgroundColor = value;\n }\n cursorNode = cursorFormat;\n }\n else {\n InsertMethods.unwrap(cursorFormat);\n }\n }\n else {\n if (cursorNodes.length > 1 && range.startOffset > 0 && (cursorNodes[0].firstElementChild &&\n cursorNodes[0].firstElementChild.tagName.toLowerCase() === 'br')) {\n cursorNodes[0].innerHTML = '';\n }\n if (cursorNodes.length === 1 && range.startOffset === 0 && (cursorNodes[0].nodeName === 'BR' ||\n cursorNodes[0].nextSibling.nodeName === 'BR')) {\n detach(cursorNodes[0].nodeName === '#text' ? cursorNodes[0].nextSibling : cursorNodes[0]);\n }\n cursorNode = this.getInsertNode(docElement, range, format, value).firstChild;\n }\n return cursorNode;\n };\n SelectionCommands.getCursorFormat = function (isFormatted, cursorNodes, format, endNode) {\n var currentNode;\n for (var index = 0; index < cursorNodes.length; index++) {\n currentNode = cursorNodes[index].lastElementChild ?\n cursorNodes[index].lastElementChild : cursorNodes[index];\n }\n return isFormatted.getFormattedNode(currentNode, format, endNode);\n };\n SelectionCommands.removeFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection, endNode, domNode) {\n var splitNode = null;\n var startText = range.startContainer.nodeName === '#text' ?\n range.startContainer.textContent.substring(range.startOffset, range.startContainer.textContent.length) :\n range.startContainer.textContent;\n var nodeText = nodes[index].textContent;\n if (!(range.startContainer === range.endContainer && range.startOffset === 0\n && range.endOffset === range.startContainer.length)) {\n var nodeIndex = [];\n var cloneNode = nodes[index];\n do {\n nodeIndex.push(domSelection.getIndex(cloneNode));\n cloneNode = cloneNode.parentNode;\n } while (cloneNode && (cloneNode !== formatNode));\n if (nodes[index].nodeName !== 'BR') {\n cloneNode = splitNode = (isCursor && (formatNode.textContent.length - 1) === range.startOffset) ?\n nodeCutter.SplitNode(range, formatNode, true)\n : nodeCutter.GetSpliceNode(range, formatNode);\n }\n if (!isCursor) {\n while (cloneNode && cloneNode.childNodes.length > 0 && ((nodeIndex.length - 1) >= 0)\n && (cloneNode.childNodes.length > nodeIndex[nodeIndex.length - 1])) {\n cloneNode = cloneNode.childNodes[nodeIndex[nodeIndex.length - 1]];\n nodeIndex.pop();\n }\n if (nodes[index].nodeName !== 'BR') {\n if (cloneNode.nodeType === 3 && !(isCursor && cloneNode.nodeValue === '')) {\n nodes[index] = cloneNode;\n }\n else {\n var divNode = document.createElement('div');\n divNode.innerHTML = '​';\n if (cloneNode.nodeType !== 3) {\n cloneNode.insertBefore(divNode.firstChild, cloneNode.firstChild);\n nodes[index] = cloneNode.firstChild;\n }\n else {\n cloneNode.parentNode.insertBefore(divNode.firstChild, cloneNode);\n nodes[index] = cloneNode.previousSibling;\n cloneNode.parentNode.removeChild(cloneNode);\n }\n }\n }\n }\n else {\n var lastNode = splitNode;\n for (; lastNode.firstChild !== null && lastNode.firstChild.nodeType !== 3; null) {\n lastNode = lastNode.firstChild;\n }\n lastNode.innerHTML = '​';\n nodes[index] = lastNode.firstChild;\n }\n }\n else if (isFontStyle && !nodes[index].contains(formatNode) && nodes[index].nodeType === 3 &&\n nodes[index].textContent !== formatNode.textContent) {\n // If the selection is within the format node .\n var isFullNodeSelected = nodes[index].textContent === nodes[index].wholeText;\n var nodeTraverse = nodes[index];\n var styleElement = this.GetFormatNode(format, value);\n // while loop and traverse back until text content does not match with parent text content\n while (nodeTraverse && nodeTraverse.textContent === nodeTraverse.parentElement.textContent) {\n nodeTraverse = nodeTraverse.parentElement;\n }\n if (isFullNodeSelected && formatNode.textContent !== nodeTraverse.textContent) {\n var nodeArray = [];\n var priorityNode = this.getPriorityFormatNode(nodeTraverse, endNode);\n if (priorityNode && priorityNode.textContent === nodeTraverse.textContent) {\n nodeTraverse = priorityNode;\n }\n nodeArray.push(nodeTraverse);\n this.applyStyles(nodeArray, 0, styleElement);\n return nodes[index];\n }\n }\n var fontStyle;\n if (format === 'backgroundcolor') {\n fontStyle = formatNode.style.fontSize;\n }\n var bgStyle;\n if (format === 'fontsize') {\n var bg = closest(nodes[index].parentElement, 'span[style*=' + 'background-color' + ']');\n if (!isNOU(bg)) {\n bgStyle = bg.style.backgroundColor;\n }\n }\n var formatNodeStyles = formatNode.getAttribute('style');\n var formatNodeTagName = formatNode.tagName;\n var child = InsertMethods.unwrap(formatNode);\n if (child[0] && !isFontStyle) {\n var nodeTraverse = child[index] ? child[index] : child[0];\n var textNode = nodeTraverse;\n for (; nodeTraverse && nodeTraverse.parentElement && nodeTraverse.parentElement !== endNode; \n // eslint-disable-next-line\n nodeTraverse = nodeTraverse) {\n var nodeTraverseCondition = void 0;\n if (formatNode.nodeName === 'SPAN') {\n nodeTraverseCondition = nodeTraverse.parentElement.tagName.toLocaleLowerCase()\n === formatNode.tagName.toLocaleLowerCase() && nodeTraverse.parentElement.getAttribute('style') === formatNodeStyles;\n }\n else {\n nodeTraverseCondition = nodeTraverse.parentElement.tagName.toLocaleLowerCase()\n === formatNode.tagName.toLocaleLowerCase();\n }\n if (nodeTraverse.parentElement && nodeTraverseCondition &&\n (nodeTraverse.parentElement.childElementCount > 1 || range.startOffset > 1)) {\n if (textNode.parentElement && textNode.parentElement.tagName.toLocaleLowerCase()\n === formatNode.tagName.toLocaleLowerCase()) {\n if ((range.startOffset === range.endOffset) && textNode.nodeType !== 1 &&\n !isNOU(textNode.textContent) && textNode.parentElement.childElementCount > 1) {\n range.setStart(textNode, 0);\n range.setEnd(textNode, textNode.textContent.length);\n nodeCutter.SplitNode(range, textNode.parentElement, false);\n }\n }\n if (nodeTraverse.parentElement.tagName.toLocaleLowerCase() === 'span') {\n if (formatNode.style.textDecoration === 'underline' &&\n nodeTraverse.parentElement.style.textDecoration !== 'underline') {\n nodeTraverse = nodeTraverse.parentElement;\n continue;\n }\n }\n InsertMethods.unwrap(nodeTraverse.parentElement);\n nodeTraverse = !isNOU(nodeTraverse.parentElement) && !domNode.isBlockNode(nodeTraverse.parentElement) ? textNode :\n nodeTraverse.parentElement;\n }\n else {\n nodeTraverse = nodeTraverse.parentElement;\n }\n }\n }\n if (child.length > 0 && isFontStyle) {\n for (var num = 0; num < child.length; num++) {\n if (child[num].nodeType !== 3 || (child[num].textContent &&\n child[num].textContent.trim().length > 0)) {\n child[num] = InsertMethods.Wrap(child[num], this.GetFormatNode(format, value, formatNodeTagName, formatNodeStyles));\n if (child[num].textContent === startText) {\n if (num === 0) {\n range.setStartBefore(child[num]);\n }\n else if (num === child.length - 1) {\n range.setEndAfter(child[num]);\n }\n }\n }\n }\n var currentNodeElem = nodes[index].parentElement;\n if (!isNOU(fontStyle) && fontStyle !== '') {\n currentNodeElem.style.fontSize = fontStyle;\n }\n if (!isNOU(bgStyle) && bgStyle !== '') {\n currentNodeElem.style.backgroundColor = bgStyle;\n }\n if ((format === 'backgroundcolor' && !isNOU(fontStyle) && fontStyle !== '') &&\n currentNodeElem.parentElement.innerHTML === currentNodeElem.outerHTML) {\n var curParentElem = currentNodeElem.parentElement;\n curParentElem.parentElement.insertBefore(currentNodeElem, curParentElem);\n detach(curParentElem);\n }\n if (format === 'fontsize' || format === 'fontcolor') {\n var liElement = nodes[index].parentElement;\n var parentElement = nodes[index].parentElement;\n while (!isNOU(parentElement) && parentElement.tagName.toLowerCase() !== 'li') {\n parentElement = parentElement.parentElement;\n liElement = parentElement;\n }\n var num = index;\n var liChildContent = '';\n while (num >= 0 && !isNOU(liElement) && liElement.tagName.toLowerCase() === 'li' && liElement.textContent.replace('/\\u200B/g', '').trim().includes(nodes[num].textContent.trim())) {\n liChildContent = ' ' + nodes[num].textContent.trim() + liChildContent;\n num--;\n }\n var isNestedList = false;\n var nestedListCount = 0;\n var isNestedListItem = false;\n if (!isNOU(liElement) && liElement.childNodes) {\n for (var num_1 = 0; num_1 < liElement.childNodes.length; num_1++) {\n if (liElement.childNodes[num_1].nodeName === ('OL' || 'UL')) {\n nestedListCount++;\n isNestedList = true;\n }\n }\n }\n if (!isNOU(liElement) && liElement.tagName.toLowerCase() === 'li' &&\n liElement.textContent.split('\\u200B').join('').trim() === liChildContent.split('\\u200B').join('').trim()) {\n if (format === 'fontsize') {\n liElement.style.fontSize = value;\n }\n else {\n liElement.style.color = value;\n liElement.style.textDecoration = 'inherit';\n }\n }\n else if (!isNOU(liElement) && liElement.tagName.toLowerCase() === 'li' && isNestedList) {\n if (isNestedList && nestedListCount > 0) {\n for (var num_2 = 0; num_2 < liElement.childNodes.length; num_2++) {\n if (nodes[index].textContent === liElement.childNodes[num_2].textContent && nodes[index].textContent === nodeText && liElement.textContent.replace('/\\u200B/g', '').trim().includes(liChildContent.split('\\u200B').join('').trim())) {\n isNestedListItem = true;\n }\n }\n }\n if (isNestedListItem) {\n for (var num_3 = 0; num_3 < liElement.childNodes.length; num_3++) {\n if (liElement.childNodes[num_3].nodeName === ('OL' || 'UL')) {\n liElement.childNodes[num_3].style.fontSize = 'initial';\n }\n }\n if (format === 'fontsize') {\n liElement.style.fontSize = value;\n }\n else {\n liElement.style.color = value;\n liElement.style.textDecoration = 'inherit';\n }\n }\n }\n }\n }\n return nodes[index];\n };\n SelectionCommands.insertFormat = function (docElement, nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, painterValues, domNode, endNode) {\n if (!isCursor) {\n if ((formatNode === null && isFormat) || isFontStyle) {\n if (nodes[index].nodeName !== 'BR') {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n nodes[index].textContent = nodeCutter.TrimLineBreak(nodes[index].textContent);\n }\n if (format === 'uppercase' || format === 'lowercase') {\n nodes[index].textContent = (format === 'uppercase') ? nodes[index].textContent.toLocaleUpperCase()\n : nodes[index].textContent.toLocaleLowerCase();\n }\n else if (!(isFontStyle === true && value === '')) {\n var element = this.GetFormatNode(format, value);\n if (value === 'formatPainter' || isFontStyle) {\n var liElement = nodes[index].parentElement;\n var parentElement = nodes[index].parentElement;\n while (!isNOU(parentElement) && parentElement.tagName.toLowerCase() !== 'li') {\n parentElement = parentElement.parentElement;\n liElement = parentElement;\n }\n if (!isNOU(liElement) && liElement.tagName.toLowerCase() === 'li' &&\n liElement.textContent.trim() === nodes[index].textContent.trim()) {\n if (format === 'fontsize') {\n liElement.style.fontSize = value;\n }\n else if (format === 'fontcolor') {\n liElement.style.color = value;\n liElement.style.textDecoration = 'inherit';\n }\n }\n if (value === 'formatPainter') {\n return this.insertFormatPainterElem(nodes, index, range, nodeCutter, painterValues, domNode);\n }\n var currentNode = nodes[index];\n var priorityNode = this.getPriorityFormatNode(currentNode, endNode);\n // 1. Checking is there any priority node present in the selection range. (Use case for nested styles);\n // 2 Or font style is applied. (Use case not a nested style)\n if (!isNOU(priorityNode) || isFontStyle) {\n var currentFormatNode = isNOU(priorityNode) ? currentNode : priorityNode;\n currentFormatNode = !isNOU(priorityNode) && priorityNode.style.fontSize !== '' ?\n currentFormatNode.firstChild : currentFormatNode;\n if (isNOU(priorityNode) || format === 'fontsize') {\n while (currentFormatNode) {\n var isSameTextContent = currentFormatNode.parentElement.textContent.trim()\n === nodes[index].textContent.trim();\n var parent_1 = currentFormatNode.parentElement;\n if (!domNode.isBlockNode(parent_1) && isSameTextContent &&\n !(parent_1.nodeName === 'SPAN' && parent_1.classList.contains('e-img-inner'))) {\n currentFormatNode = parent_1;\n }\n else {\n break;\n }\n }\n }\n var nodeList = [];\n // Since color is different for different themnes, we need to wrap the fontColor over the text node.\n if (format === 'fontcolor') {\n var closestAnchor = closest(nodes[index].parentElement, 'A');\n if (!isNOU(closestAnchor) && closestAnchor.firstChild.textContent.trim()\n === nodes[index].textContent.trim()) {\n currentFormatNode = nodes[index];\n }\n }\n if (nodes[index].textContent.trim() !== currentFormatNode.textContent.trim()) {\n currentFormatNode = nodes[index];\n }\n nodeList[0] = currentFormatNode;\n this.applyStyles(nodeList, 0, element);\n }\n else {\n nodes[index] = this.applyStyles(nodes, index, element);\n }\n }\n else {\n nodes[index] = this.applyStyles(nodes, index, element);\n }\n }\n }\n else {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n }\n }\n else {\n if (format !== 'uppercase' && format !== 'lowercase') {\n var element = this.getInsertNode(docElement, range, format, value);\n nodes[index] = element.firstChild;\n nodeCutter.position = 1;\n }\n else {\n nodeCutter.position = range.startOffset;\n }\n }\n return nodes[index];\n };\n SelectionCommands.applyStyles = function (nodes, index, element) {\n if (!(nodes[index].nodeName === 'BR' && this.enterAction === 'BR')) {\n nodes[index] = (index === (nodes.length - 1)) || nodes[index].nodeName === 'BR' ?\n InsertMethods.Wrap(nodes[index], element)\n : InsertMethods.WrapBefore(nodes[index], element, true);\n nodes[index] = this.getChildNode(nodes[index], element);\n }\n return nodes[index];\n };\n SelectionCommands.getPriorityFormatNode = function (node, endNode) {\n var isFormatted = new IsFormatted();\n var fontSizeNode = isFormatted.getFormattedNode(node, 'fontsize', endNode);\n var fontColorNode;\n var backgroundColorNode;\n var fontNameNode;\n if (isNOU(fontSizeNode)) {\n backgroundColorNode = isFormatted.getFormattedNode(node, 'backgroundcolor', endNode);\n if (isNOU(backgroundColorNode)) {\n fontNameNode = isFormatted.getFormattedNode(node, 'fontname', endNode);\n if (isNOU(fontNameNode)) {\n fontColorNode = isFormatted.getFormattedNode(node, 'fontcolor', endNode);\n if (isNOU(fontColorNode)) {\n return null;\n }\n else {\n return fontColorNode;\n }\n }\n else {\n return fontNameNode;\n }\n }\n else {\n return backgroundColorNode;\n }\n }\n else {\n return fontSizeNode;\n }\n };\n SelectionCommands.getInsertNode = function (docElement, range, format, value) {\n var element = this.GetFormatNode(format, value);\n element.innerHTML = '​';\n if (Browser.isIE) {\n var frag = docElement.createDocumentFragment();\n frag.appendChild(element);\n range.insertNode(frag);\n }\n else {\n range.insertNode(element);\n }\n return element;\n };\n SelectionCommands.getChildNode = function (node, element) {\n if (node === undefined || node === null) {\n element.innerHTML = '​';\n node = element.firstChild;\n }\n return node;\n };\n SelectionCommands.applySelection = function (nodes, domSelection, nodeCutter, index, isCollapsed) {\n if (nodes.length === 1 && !isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = 0;\n domSelection.endOffset = nodes[index].textContent.length;\n }\n else if (nodes.length === 1 && isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = nodeCutter.position;\n domSelection.endOffset = nodeCutter.position;\n }\n else if (index === 0) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.startOffset = 0;\n }\n else if (index === nodes.length - 1) {\n domSelection.endContainer = domSelection.getNodeArray(nodes[index], false);\n domSelection.endOffset = nodes[index].textContent.length;\n }\n return domSelection;\n };\n SelectionCommands.GetFormatNode = function (format, value, tagName, styles) {\n var node;\n switch (format) {\n case 'bold':\n return document.createElement('strong');\n case 'italic':\n return document.createElement('em');\n case 'underline':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.textDecoration = 'underline';\n return node;\n case 'strikethrough':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.textDecoration = 'line-through';\n return node;\n case 'superscript':\n return document.createElement('sup');\n case 'subscript':\n return document.createElement('sub');\n case 'fontcolor':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.color = value;\n node.style.textDecoration = 'inherit';\n return node;\n case 'fontname':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.fontFamily = value;\n return node;\n case 'fontsize':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.fontSize = value;\n return node;\n default:\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.backgroundColor = value;\n return node;\n }\n };\n SelectionCommands.updateStyles = function (ele, tag, styles) {\n if (styles !== null && tag === 'SPAN') {\n ele.setAttribute('style', styles);\n }\n };\n // Below function is used to insert the element created by the format painter plugin.\n SelectionCommands.insertFormatPainterElem = function (nodes, index, range, nodeCutter, painterValues, domNode) {\n var parent = !domNode.isBlockNode(nodes[index].parentElement) ?\n nodes[index].parentElement : nodes[index];\n if (!domNode.isBlockNode(parent)) {\n while (parent.textContent.trim() === parent.parentElement.textContent.trim() && !domNode.isBlockNode(parent.parentElement)) {\n parent = parent.parentElement;\n }\n }\n // The below code is used to remove the already present inline style from the text node.\n if (!isNOU(parent) && parent.nodeType === 1 && !(parent.classList.contains('e-rte-img-caption') || parent.classList.contains('e-img-inner'))) {\n this.formatPainterCleanup(index, nodes, parent, range, nodeCutter, domNode);\n }\n var elem = painterValues.element;\n // The below code is used to apply the inline format copied.\n if (!isNOU(elem)) {\n // Step 1: Cloning the element that is created by format painter.\n // Step 2: Finding the last child of the nested elememt using the paintervalues.lastchild nodename\n // Step 3: Assigning the nodes[index] text content to the last child element.\n // Step 4: Wrapping the cloned element with the nodes[index]\n var clonedElement = elem.cloneNode(true);\n var elemList = clonedElement.querySelectorAll(painterValues.lastChild.nodeName);\n var lastElement = void 0;\n if (elemList.length > 0) {\n lastElement = elemList[elemList.length - 1];\n }\n else {\n if (!isNOU(clonedElement) && clonedElement.nodeName === painterValues.lastChild.nodeName) {\n lastElement = clonedElement;\n }\n }\n lastElement.textContent = nodes[index].textContent;\n var lastChild = lastElement.childNodes[0];\n nodes[index] = InsertMethods.Wrap(nodes[index], clonedElement);\n nodes[index].textContent = '';\n nodes[index] = lastChild;\n }\n return nodes[index];\n };\n SelectionCommands.formatPainterCleanup = function (index, nodes, parent, range, nodeCutter, domNode) {\n var INVALID_TAGS = ['A', 'AUDIO', 'IMG', 'VIDEO', 'IFRAME'];\n if (index === 0 && parent.textContent.trim() !== nodes[index].textContent.trim()) {\n nodeCutter.SplitNode(range, parent, true);\n var childELemList = nodes[index].parentElement.childNodes;\n for (var i = 0; i < childELemList.length; i++) {\n if (childELemList[i].textContent.trim() === nodes[i].textContent.trim()) {\n parent.parentNode.insertBefore(childELemList[i], parent);\n break;\n }\n }\n var blockChildNodes = parent.parentElement.childNodes;\n for (var k = 0; k < blockChildNodes.length; k++) {\n if (blockChildNodes[k].textContent.trim() === '' || blockChildNodes[k].textContent.length === 0) {\n detach(blockChildNodes[k]);\n }\n }\n }\n else if (parent.textContent.trim() !== nodes[index].textContent.trim()) {\n parent.parentElement.insertBefore(nodes[index], parent);\n }\n else {\n while (!isNOU(parent) && parent.nodeType !== 3 && !domNode.isBlockNode(parent)) {\n var temp = void 0;\n for (var i = 0; i < parent.childNodes.length; i++) {\n var currentChild = parent.childNodes[i];\n if (currentChild.textContent.trim().length !== 0 && currentChild.nodeType !== 3) {\n temp = parent.childNodes[i];\n }\n }\n if (INVALID_TAGS.indexOf(parent.tagName) === -1) {\n InsertMethods.unwrap(parent);\n }\n parent = temp;\n }\n }\n };\n SelectionCommands.enterAction = 'P';\n return SelectionCommands;\n}());\nexport { SelectionCommands };\n","import * as CONSTANT from './../base/constant';\nimport { SelectionCommands } from './selection-commands';\nimport * as EVENTS from './../../common/constant';\n/**\n * Selection EXEC internal component\n *\n * @hidden\n\n */\nvar SelectionBasedExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function SelectionBasedExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n SelectionBasedExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.SELECTION_TYPE, this.applySelection, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n SelectionBasedExec.prototype.keyDownHandler = function (e) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase'];\n if (e.event.ctrlKey && validFormats.indexOf(e.event.action) > -1) {\n e.event.preventDefault();\n SelectionCommands.applyFormat(this.parent.currentDocument, e.event.action, this.parent.editableElement, e.enterAction);\n this.callBack(e, e.event.action);\n }\n };\n SelectionBasedExec.prototype.applySelection = function (e) {\n SelectionCommands.applyFormat(this.parent.currentDocument, e.subCommand.toLocaleLowerCase(), this.parent.editableElement, e.enterAction, e.value, e.selector);\n this.callBack(e, e.subCommand);\n };\n SelectionBasedExec.prototype.callBack = function (event, action) {\n if (event.callBack) {\n event.callBack({\n requestType: action,\n event: event.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return SelectionBasedExec;\n}());\nexport { SelectionBasedExec };\n","import * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Selection EXEC internal component\n *\n * @hidden\n\n */\nvar InsertHtmlExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - sepcifies the parent element\n * @hidden\n\n */\n function InsertHtmlExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertHtmlExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERTHTML_TYPE, this.applyHtml, this);\n };\n InsertHtmlExec.prototype.applyHtml = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.value, this.parent.editableElement, true, e.enterAction);\n if (e.subCommand === 'pasteCleanup') {\n var pastedElements = this.parent.editableElement.querySelectorAll('.pasteContent_RTE');\n var allPastedElements = [].slice.call(pastedElements);\n var imgElements = this.parent.editableElement.querySelectorAll('.pasteContent_Img');\n var allImgElm = [].slice.call(imgElements);\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n elements: allPastedElements,\n imgElem: allImgElm\n });\n }\n else {\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n }\n };\n return InsertHtmlExec;\n}());\nexport { InsertHtmlExec };\n","/**\n * `Clear Format` module is used to handle Clear Format.\n */\nimport { closest } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { DOMNode } from './dom-node';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nvar ClearFormat = /** @class */ (function () {\n function ClearFormat() {\n }\n /**\n * clear method\n *\n * @param {Document} docElement - specifies the document element.\n * @param {Node} endNode - specifies the end node\n * @param {string} enterAction - specifies the enter key action\n * @param {string} selector - specifies the string value\n * @param {string} command - specifies the command value\n * @returns {void}\n * @hidden\n\n */\n ClearFormat.clear = function (docElement, endNode, enterAction, selector, command) {\n this.domNode = new DOMNode(endNode, docElement);\n this.defaultTag = enterAction === 'P' ? this.defaultTag : 'div';\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var nodes = range.collapsed ? nodeSelection.getSelectionNodeCollection(range) :\n nodeSelection.getSelectionNodeCollectionBr(range);\n var save = nodeSelection.save(range, docElement);\n var cursorRange = false;\n if (range.collapsed && command !== 'ClearFormat') {\n cursorRange = true;\n range = nodeCutter.GetCursorRange(docElement, range, nodes[0]);\n }\n var isCollapsed = range.collapsed;\n if (!isCollapsed) {\n var preNode = void 0;\n if (nodes.length > 0 && nodes[0].nodeName === 'BR' && closest(nodes[0], 'table')) {\n preNode = nodeCutter.GetSpliceNode(range, closest(nodes[0], 'table'));\n }\n else {\n preNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length > 1 && nodes[0].nodeName === 'IMG' ? 1 : 0]);\n }\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else if (nodes.length > 1) {\n var i = 1;\n var lastText = nodes[nodes.length - i];\n while (nodes.length <= i && nodes[nodes.length - i].nodeName === 'BR') {\n i++;\n lastText = nodes[nodes.length - i];\n }\n var lasNode = nodeCutter.GetSpliceNode(range, lastText);\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n var exactNodes = nodeSelection.getNodeCollection(range);\n var cloneSelectNodes = exactNodes.slice();\n this.clearInlines(nodeSelection.getSelectionNodes(cloneSelectNodes), cloneSelectNodes, nodeSelection.getRange(docElement), nodeCutter, endNode);\n this.reSelection(docElement, save, exactNodes);\n range = nodeSelection.getRange(docElement);\n exactNodes = nodeSelection.getNodeCollection(range);\n var cloneParentNodes = exactNodes.slice();\n this.clearBlocks(docElement, cloneParentNodes, endNode, nodeCutter, nodeSelection);\n if (isIDevice()) {\n setEditFrameFocus(endNode, selector);\n }\n this.reSelection(docElement, save, exactNodes);\n }\n if (cursorRange) {\n nodeSelection.setCursorPoint(docElement, range.endContainer, range.endOffset);\n }\n };\n ClearFormat.reSelection = function (docElement, save, exactNodes) {\n var selectionNodes = save.getInsertNodes(exactNodes);\n save.startContainer = save.getNodeArray(selectionNodes[0], true, docElement);\n save.startOffset = 0;\n save.endContainer = save.getNodeArray(selectionNodes[selectionNodes.length - 1], false, docElement);\n var endIndexNode = selectionNodes[selectionNodes.length - 1];\n save.endOffset = (endIndexNode.nodeType === 3) ? endIndexNode.textContent.length\n : endIndexNode.childNodes.length;\n save.restore();\n };\n ClearFormat.clearBlocks = function (docElement, nodes, endNode, nodeCutter, nodeSelection) {\n var parentNodes = [];\n for (var index = 0; index < nodes.length; index++) {\n if (this.BLOCK_TAGS.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1\n && parentNodes.indexOf(nodes[index]) === -1) {\n parentNodes.push(nodes[index]);\n }\n else if ((this.BLOCK_TAGS.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1)\n && parentNodes.indexOf(nodes[index].parentNode) === -1\n && endNode !== nodes[index].parentNode) {\n parentNodes.push(nodes[index].parentNode);\n }\n }\n parentNodes = this.spliceParent(parentNodes, nodes)[0];\n parentNodes = this.removeParent(parentNodes);\n this.unWrap(docElement, parentNodes, nodeCutter, nodeSelection);\n };\n ClearFormat.spliceParent = function (parentNodes, nodes) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n var len = parentNodes[index1].childNodes.length;\n for (var index2 = 0; index2 < len; index2++) {\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) > 0)\n && (parentNodes[index1].childNodes[index2].childNodes.length > 0)) {\n nodes = this.spliceParent([parentNodes[index1].childNodes[index2]], nodes)[1];\n }\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) <= -1) &&\n (parentNodes[index1].childNodes[index2].textContent.trim() !== '')) {\n for (var index3 = 0; index3 < len; index3++) {\n if (nodes.indexOf(parentNodes[index1].childNodes[index3]) > -1) {\n nodes.splice(nodes.indexOf(parentNodes[index1].childNodes[index3]), 1);\n }\n }\n index2 = parentNodes[index1].childNodes.length;\n var parentIndex = parentNodes.indexOf(parentNodes[index1].parentNode);\n var nodeIndex = nodes.indexOf(parentNodes[index1].parentNode);\n if (parentIndex > -1) {\n parentNodes.splice(parentIndex, 1);\n }\n if (nodeIndex > -1) {\n nodes.splice(nodeIndex, 1);\n }\n var elementIndex = nodes.indexOf(parentNodes[index1]);\n if (elementIndex > -1) {\n nodes.splice(elementIndex, 1);\n }\n parentNodes.splice(index1, 1);\n index1--;\n }\n }\n }\n return [parentNodes, nodes];\n };\n ClearFormat.removeChild = function (parentNodes, parentNode) {\n var count = parentNode.childNodes.length;\n if (count > 0) {\n for (var index = 0; index < count; index++) {\n if (parentNodes.indexOf(parentNode.childNodes[index]) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNode.childNodes[index]);\n parentNodes.splice(parentNodes.indexOf(parentNode.childNodes[index]), 1);\n }\n }\n }\n return parentNodes;\n };\n ClearFormat.removeParent = function (parentNodes) {\n for (var index = 0; index < parentNodes.length; index++) {\n if (parentNodes.indexOf(parentNodes[index].parentNode) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNodes[index]);\n parentNodes.splice(index, 1);\n index--;\n }\n }\n return parentNodes;\n };\n ClearFormat.unWrap = function (docElement, parentNodes, nodeCutter, nodeSelection) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n if (this.NONVALID_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) > -1\n && parentNodes[index1].parentNode\n && this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].parentNode.nodeName.toLowerCase()) > -1) {\n nodeSelection.setSelectionText(docElement, parentNodes[index1], parentNodes[index1], 0, parentNodes[index1].childNodes.length);\n InsertMethods.unwrap(nodeCutter.GetSpliceNode(nodeSelection.getRange(docElement), parentNodes[index1].parentNode));\n }\n if (parentNodes[index1].nodeName.toLocaleLowerCase() !== 'p') {\n if (this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) < 0\n && parentNodes[index1].parentNode.nodeName.toLocaleLowerCase() !== 'p'\n && !((parentNodes[index1].nodeName.toLocaleLowerCase() === 'blockquote'\n || parentNodes[index1].nodeName.toLocaleLowerCase() === 'li')\n && this.IGNORE_PARENT_TAGS.indexOf(parentNodes[index1].childNodes[0].nodeName.toLocaleLowerCase()) > -1)\n && !(parentNodes[index1].childNodes.length === 1\n && parentNodes[index1].childNodes[0].nodeName.toLocaleLowerCase() === 'p')) {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement(this.defaultTag));\n }\n var childNodes = InsertMethods.unwrap(parentNodes[index1]);\n if (childNodes.length === 1\n && childNodes[0].parentNode.nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement(this.defaultTag));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n for (var index2 = 0; index2 < childNodes.length; index2++) {\n if (this.NONVALID_TAGS.indexOf(childNodes[index2].nodeName.toLowerCase()) > -1) {\n this.unWrap(docElement, [childNodes[index2]], nodeCutter, nodeSelection);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].nodeName.toLocaleLowerCase() !== 'p') {\n var blockNodes = this.removeParent([childNodes[index2]]);\n this.unWrap(docElement, blockNodes, nodeCutter, nodeSelection);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].parentNode.nodeName.toLocaleLowerCase() ===\n childNodes[index2].nodeName.toLocaleLowerCase()) {\n InsertMethods.unwrap(childNodes[index2]);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(childNodes[index2], docElement.createElement(this.defaultTag));\n InsertMethods.unwrap(childNodes[index2]);\n }\n }\n }\n else {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement(this.defaultTag));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n }\n };\n ClearFormat.clearInlines = function (textNodes, nodes, range, nodeCutter, \n // eslint-disable-next-line\n endNode) {\n for (var index = 0; index < textNodes.length; index++) {\n var currentInlineNode = textNodes[index];\n var currentNode = void 0;\n while (!this.domNode.isBlockNode(currentInlineNode) &&\n (currentInlineNode.parentElement && !currentInlineNode.parentElement.classList.contains('e-img-inner'))) {\n currentNode = currentInlineNode;\n currentInlineNode = currentInlineNode.parentElement;\n }\n if (currentNode &&\n IsFormatted.inlineTags.indexOf(currentNode.nodeName.toLocaleLowerCase()) > -1) {\n nodeCutter.GetSpliceNode(range, currentNode);\n this.removeInlineParent(currentNode);\n }\n }\n };\n ClearFormat.removeInlineParent = function (textNodes) {\n var nodes = InsertMethods.unwrap(textNodes);\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].parentNode.childNodes.length === 1 && !nodes[index].parentNode.classList.contains('e-img-inner')\n && IsFormatted.inlineTags.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index].parentNode);\n }\n else if (IsFormatted.inlineTags.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index]);\n }\n }\n };\n ClearFormat.BLOCK_TAGS = ['address', 'article', 'aside', 'blockquote',\n 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'li', 'main', 'nav',\n 'noscript', 'ol', 'p', 'pre', 'section', 'ul'];\n ClearFormat.NONVALID_PARENT_TAGS = ['thead', 'tbody', 'ul', 'ol', 'table', 'tfoot', 'tr'];\n ClearFormat.IGNORE_PARENT_TAGS = ['ul', 'ol', 'table'];\n ClearFormat.NONVALID_TAGS = ['thead', 'tbody', 'figcaption', 'td', 'tr', 'th', 'tfoot', 'figcaption', 'li'];\n ClearFormat.defaultTag = 'p';\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import * as CONSTANT from './../base/constant';\nimport { ClearFormat } from './clearformat';\nimport * as EVENTS from './../../common/constant';\n/**\n * Clear Format EXEC internal component\n *\n * @hidden\n\n */\nvar ClearFormatExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element.\n * @returns {void}\n * @hidden\n\n */\n function ClearFormatExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ClearFormatExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_TYPE, this.applyClear, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ClearFormatExec.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'clear-format':\n this.applyClear({ subCommand: 'ClearFormat', callBack: e.callBack, enterAction: e.enterAction });\n e.event.preventDefault();\n break;\n }\n };\n ClearFormatExec.prototype.applyClear = function (e) {\n if (e.subCommand === 'ClearFormat') {\n ClearFormat.clear(this.parent.currentDocument, this.parent.editableElement, e.enterAction, e.selector, e.subCommand);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n }\n };\n return ClearFormatExec;\n}());\nexport { ClearFormatExec };\n","import { debounce, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/selection';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoManager = /** @class */ (function () {\n function UndoRedoManager(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.addEventListener();\n }\n UndoRedoManager.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n this.parent.observer.on(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged, this);\n };\n UndoRedoManager.prototype.onPropertyChanged = function (props) {\n for (var _i = 0, _a = Object.keys(props.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'undoRedoSteps':\n this.undoRedoSteps = props.newProp.undoRedoSteps;\n break;\n case 'undoRedoTimer':\n this.undoRedoTimer = props.newProp.undoRedoTimer;\n break;\n }\n }\n };\n UndoRedoManager.prototype.removeEventListener = function () {\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, this.keyUp);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n };\n /**\n * onAction method\n *\n * @param {IHtmlSubCommands} e - specifies the sub command\n * @returns {void}\n * @hidden\n\n */\n UndoRedoManager.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n UndoRedoManager.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoManager.prototype.keyDown = function (e) {\n var event = e.event;\n // eslint-disable-next-line\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoManager.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n UndoRedoManager.prototype.getTextContentFromFragment = function (fragment) {\n var textContent = '';\n for (var i = 0; i < fragment.childNodes.length; i++) {\n var childNode = fragment.childNodes[i];\n if (childNode.nodeType === Node.TEXT_NODE) {\n textContent += childNode.textContent;\n }\n else if (childNode.nodeType === Node.ELEMENT_NODE) {\n textContent += this.getTextContentFromFragment(childNode);\n }\n }\n return textContent;\n };\n /**\n * RTE collection stored html format.\n *\n * @function saveData\n * @param {KeyboardEvent} e - specifies the keyboard event\n * @returns {void}\n * @hidden\n\n */\n UndoRedoManager.prototype.saveData = function (e) {\n var range = new NodeSelection().getRange(this.parent.currentDocument);\n var currentContainer = this.parent.editableElement === range.startContainer.parentElement ?\n range.startContainer.parentElement : range.startContainer;\n for (var i = currentContainer.childNodes.length - 1; i >= 0; i--) {\n if (!isNullOrUndefined(currentContainer.childNodes[i]) && currentContainer.childNodes[i].nodeName === '#text' &&\n currentContainer.childNodes[i].textContent.length === 0 && currentContainer.childNodes[i].nodeName !== 'IMG' &&\n currentContainer.childNodes[i].nodeName !== 'BR' && currentContainer.childNodes[i].nodeName && 'HR') {\n detach(currentContainer.childNodes[i]);\n }\n }\n range = new NodeSelection().getRange(this.parent.currentDocument);\n var save = new NodeSelection().save(range, this.parent.currentDocument);\n var clonedElement = this.parent.editableElement.cloneNode(true);\n var fragment = document.createDocumentFragment();\n while (clonedElement.firstChild) {\n fragment.appendChild(clonedElement.firstChild);\n }\n var changEle = { text: fragment, range: save };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.collapsed === range.collapsed)\n && (this.undoRedoStack[this.undoRedoStack.length - 1].range.startOffset === save.range.startOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.endOffset === save.range.endOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.startContainer === save.range.startContainer) &&\n (this.getTextContentFromFragment(this.undoRedoStack[this.undoRedoStack.length - 1].text).trim() ===\n this.getTextContentFromFragment(changEle.text).trim())) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.steps > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n this.steps--;\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n *\n * @function undo\n * @param {IHtmlSubCommands} e - specifies the sub commands\n * @returns {void}\n * @hidden\n\n */\n UndoRedoManager.prototype.undo = function (e) {\n if (this.steps > 0) {\n var range = this.undoRedoStack[this.steps - 1].range;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.editableElement.innerHTML = '';\n this.parent.editableElement.appendChild(removedContent.cloneNode(true));\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n range.restore();\n this.steps--;\n if (e.callBack) {\n e.callBack({\n requestType: 'Undo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * Redo the editable text.\n *\n * @param {IHtmlSubCommands} e - specifies the sub commands\n * @function redo\n * @returns {void}\n * @hidden\n\n */\n UndoRedoManager.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n var range = this.undoRedoStack[this.steps + 1].range;\n var addedContent = this.undoRedoStack[this.steps + 1].text;\n this.parent.editableElement.innerHTML = '';\n this.parent.editableElement.appendChild(addedContent.cloneNode(true));\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n range.restore();\n this.steps++;\n if (e.callBack) {\n e.callBack({\n requestType: 'Redo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * getUndoStatus method\n *\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n UndoRedoManager.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoManager;\n}());\nexport { UndoRedoManager };\n","import * as EVENTS from '../../common/constant';\nimport { createElement, isNullOrUndefined as isNOU, detach } from '@syncfusion/ej2-base';\n/**\n * PasteCleanup for MsWord content\n *\n * @hidden\n\n */\nvar MsWordPaste = /** @class */ (function () {\n function MsWordPaste(parent) {\n this.olData = [\n 'decimal',\n 'lower-alpha',\n 'lower-roman',\n 'upper-alpha',\n 'upper-roman',\n 'lower-greek'\n ];\n this.ulData = [\n 'disc',\n 'square',\n 'circle',\n 'disc',\n 'square',\n 'circle'\n ];\n this.ignorableNodes = ['A', 'APPLET', 'B', 'BLOCKQUOTE', 'BR',\n 'BUTTON', 'CENTER', 'CODE', 'COL', 'COLGROUP', 'DD', 'DEL', 'DFN', 'DIR', 'DIV',\n 'DL', 'DT', 'EM', 'FIELDSET', 'FONT', 'FORM', 'FRAME', 'FRAMESET', 'H1', 'H2',\n 'H3', 'H4', 'H5', 'H6', 'HR', 'I', 'IMG', 'IFRAME', 'INPUT', 'INS', 'LABEL',\n 'LI', 'OL', 'OPTION', 'P', 'PARAM', 'PRE', 'Q', 'S', 'SELECT', 'SPAN', 'STRIKE',\n 'STRONG', 'SUB', 'SUP', 'TABLE', 'TBODY', 'TD', 'TEXTAREA', 'TFOOT', 'TH',\n 'THEAD', 'TITLE', 'TR', 'TT', 'U', 'UL'];\n this.blockNode = ['div', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'address', 'blockquote', 'button', 'center', 'dd', 'dir', 'dl', 'dt', 'fieldset',\n 'frameset', 'hr', 'iframe', 'isindex', 'li', 'map', 'menu', 'noframes', 'noscript',\n 'object', 'ol', 'pre', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'ul',\n 'header', 'article', 'nav', 'footer', 'section', 'aside', 'main', 'figure', 'figcaption'];\n this.borderStyle = ['border-top', 'border-right', 'border-bottom', 'border-left'];\n this.upperRomanNumber = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX',\n 'X', 'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX'];\n this.lowerRomanNumber = ['i', 'ii', 'iii', 'iv', 'v', 'vi', 'vii', 'viii', 'ix',\n 'x', 'xi', 'xii', 'xiii', 'xiv', 'xv', 'xvi', 'xvii', 'xviii', 'xix', 'xx'];\n this.lowerGreekNumber = ['α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ',\n 'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω'];\n this.removableElements = ['o:p', 'style'];\n this.listContents = [];\n this.parent = parent;\n this.addEventListener();\n }\n MsWordPaste.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.MS_WORD_CLEANUP_PLUGIN, this.wordCleanup, this);\n };\n MsWordPaste.prototype.wordCleanup = function (e) {\n var wordPasteStyleConfig = !isNOU(e.allowedStylePropertiesArray) ? e.allowedStylePropertiesArray : [];\n var listNodes = [];\n var tempHTMLContent = e.args.clipboardData.getData('text/HTML');\n var rtfData = e.args.clipboardData.getData('text/rtf');\n var elm = createElement('p');\n elm.setAttribute('id', 'MSWord-Content');\n elm.innerHTML = tempHTMLContent;\n var patern = /class='?Mso|style='[^ ]*\\bmso-/i;\n var patern2 = /class=\"?Mso|style=\"[^ ]*\\bmso-/i;\n var patern3 = /(class=\"?Mso|class='?Mso|class=\"?Xl|class='?Xl|class=Xl|style=\"[^\"]*\\bmso-|style='[^']*\\bmso-|w:WordDocument)/gi;\n var pattern4 = /style='mso-width-source:/i;\n if (patern.test(tempHTMLContent) || patern2.test(tempHTMLContent) || patern3.test(tempHTMLContent) ||\n pattern4.test(tempHTMLContent)) {\n this.imageConversion(elm, rtfData);\n tempHTMLContent = tempHTMLContent.replace(/]+>/i, '');\n this.addListClass(elm);\n listNodes = this.cleanUp(elm, listNodes);\n if (!isNOU(listNodes[0]) && listNodes[0].parentElement.tagName !== 'UL' &&\n listNodes[0].parentElement.tagName !== 'OL') {\n this.listConverter(listNodes);\n }\n this.cleanList(elm, 'UL');\n this.cleanList(elm, 'OL');\n this.styleCorrection(elm, wordPasteStyleConfig);\n this.removingComments(elm);\n this.removeUnwantedElements(elm);\n this.removeEmptyElements(elm);\n this.removeEmptyAnchorTag(elm);\n this.breakLineAddition(elm);\n this.removeClassName(elm);\n if (pattern4.test(tempHTMLContent)) {\n this.addTableBorderClass(elm);\n }\n // Removing the margin for list items\n var liChildren = elm.querySelectorAll('li');\n if (liChildren.length > 0) {\n for (var i = 0; i < liChildren.length; i++) {\n if (!isNOU(liChildren[i].style.marginLeft)) {\n liChildren[i].style.marginLeft = '';\n }\n }\n }\n e.callBack(elm.innerHTML);\n }\n else {\n e.callBack(elm.innerHTML);\n }\n };\n MsWordPaste.prototype.cleanList = function (elm, listTag) {\n var replacableElem = elm.querySelectorAll(listTag + ' div');\n for (var j = replacableElem.length - 1; j >= 0; j--) {\n var parentElem = replacableElem[j].parentNode;\n while (replacableElem[j].firstChild) {\n parentElem.insertBefore(replacableElem[j].firstChild, replacableElem[j]);\n }\n var closestListElem = this.findClosestListElem(replacableElem[j]);\n if (closestListElem) {\n this.insertAfter(replacableElem[j], closestListElem);\n }\n }\n };\n MsWordPaste.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n MsWordPaste.prototype.findClosestListElem = function (listElem) {\n var closestListElem;\n while (!isNOU(listElem)) {\n listElem = !isNOU(listElem.closest('ul')) && listElem.tagName !== 'UL' ?\n listElem.closest('ul') : (listElem.tagName !== 'OL' ? listElem.closest('ol') : null);\n closestListElem = !isNOU(listElem) ? listElem : closestListElem;\n }\n return closestListElem;\n };\n MsWordPaste.prototype.addListClass = function (elm) {\n var allNodes = elm.querySelectorAll('*');\n for (var index = 0; index < allNodes.length; index++) {\n if (!isNOU(allNodes[index].getAttribute('style')) && allNodes[index].getAttribute('style').replace(/ /g, '').replace('\\n', '').indexOf('mso-list:l') >= 0 &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') === -1 &&\n allNodes[index].tagName.charAt(0) !== 'H' && allNodes[index].tagName !== 'LI' &&\n allNodes[index].tagName !== 'OL' && allNodes[index].tagName !== 'UL') {\n allNodes[index].classList.add('msolistparagraph');\n }\n }\n };\n MsWordPaste.prototype.addTableBorderClass = function (elm) {\n var allTableElm = elm.querySelectorAll('table');\n var hasTableBorder = false;\n for (var i = 0; i < allTableElm.length; i++) {\n for (var j = 0; j < this.borderStyle.length; j++) {\n if (allTableElm[i].innerHTML.indexOf(this.borderStyle[j]) >= 0) {\n hasTableBorder = true;\n break;\n }\n }\n if (hasTableBorder) {\n allTableElm[i].classList.add('e-rte-table-border');\n hasTableBorder = false;\n }\n }\n };\n MsWordPaste.prototype.imageConversion = function (elm, rtfData) {\n this.checkVShape(elm);\n var imgElem = elm.querySelectorAll('img');\n for (var i = 0; i < imgElem.length; i++) {\n if (!isNOU(imgElem[i].getAttribute('v:shapes')) &&\n imgElem[i].getAttribute('v:shapes').indexOf('Picture') < 0 &&\n imgElem[i].getAttribute('v:shapes').indexOf('圖片') < 0 &&\n imgElem[i].getAttribute('v:shapes').indexOf('Grafik') < 0 &&\n imgElem[i].getAttribute('v:shapes').toLowerCase().indexOf('image') < 0 &&\n imgElem[i].getAttribute('v:shapes').indexOf('Graphic') < 0 &&\n imgElem[i].getAttribute('v:shapes').indexOf('_x0000_s') < 0) {\n detach(imgElem[i]);\n }\n }\n imgElem = elm.querySelectorAll('img');\n var imgSrc = [];\n var base64Src = [];\n var imgName = [];\n // eslint-disable-next-line\n var linkRegex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (imgElem.length > 0) {\n for (var i = 0; i < imgElem.length; i++) {\n imgSrc.push(imgElem[i].getAttribute('src'));\n imgName.push(imgElem[i].getAttribute('src').split('/')[imgElem[i].getAttribute('src').split('/').length - 1].split('.')[0]);\n }\n var hexValue = this.hexConversion(rtfData);\n for (var i = 0; i < hexValue.length; i++) {\n base64Src.push(this.convertToBase64(hexValue[i]));\n }\n for (var i = 0; i < imgElem.length; i++) {\n if (imgSrc[i].match(linkRegex)) {\n imgElem[i].setAttribute('src', imgSrc[i]);\n }\n else {\n imgElem[i].setAttribute('src', base64Src[i]);\n }\n imgElem[i].setAttribute('id', 'msWordImg-' + imgName[i]);\n }\n }\n };\n MsWordPaste.prototype.checkVShape = function (elm) {\n var allNodes = elm.querySelectorAll('*');\n for (var i = 0; i < allNodes.length; i++) {\n switch (allNodes[i].nodeName) {\n case 'V:SHAPETYPE':\n detach(allNodes[i]);\n break;\n case 'V:SHAPE':\n if (allNodes[i].firstElementChild.nodeName === 'V:IMAGEDATA') {\n var src = allNodes[i].firstElementChild.getAttribute('src');\n var imgElement = createElement('img');\n imgElement.setAttribute('src', src);\n allNodes[i].parentElement.insertBefore(imgElement, allNodes[i]);\n detach(allNodes[i]);\n }\n break;\n }\n }\n };\n MsWordPaste.prototype.convertToBase64 = function (hexValue) {\n var byteArr = this.conHexStringToBytes(hexValue.hex);\n var base64String = this.conBytesToBase64(byteArr);\n var base64 = hexValue.type ? 'data:' + hexValue.type + ';base64,' + base64String : null;\n return base64;\n };\n MsWordPaste.prototype.conBytesToBase64 = function (byteArr) {\n var base64Str = '';\n var base64Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n var byteArrLen = byteArr.length;\n for (var i = 0; i < byteArrLen; i += 3) {\n var array3 = byteArr.slice(i, i + 3);\n var array3length = array3.length;\n var array4 = [];\n if (array3length < 3) {\n for (var j = array3length; j < 3; j++) {\n array3[j] = 0;\n }\n }\n array4[0] = (array3[0] & 0xFC) >> 2;\n array4[1] = ((array3[0] & 0x03) << 4) | (array3[1] >> 4);\n array4[2] = ((array3[1] & 0x0F) << 2) | ((array3[2] & 0xC0) >> 6);\n array4[3] = array3[2] & 0x3F;\n for (var j = 0; j < 4; j++) {\n if (j <= array3length) {\n base64Str += base64Char.charAt(array4[j]);\n }\n else {\n base64Str += '=';\n }\n }\n }\n return base64Str;\n };\n MsWordPaste.prototype.conHexStringToBytes = function (hex) {\n var byteArr = [];\n var byteArrLen = hex.length / 2;\n for (var i = 0; i < byteArrLen; i++) {\n byteArr.push(parseInt(hex.substr(i * 2, 2), 16));\n }\n return byteArr;\n };\n MsWordPaste.prototype.hexConversion = function (rtfData) {\n // eslint-disable-next-line\n var picHead = /\\{\\\\pict[\\s\\S]+?\\\\bliptag\\-?\\d+(\\\\blipupi\\-?\\d+)?(\\{\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s\\}]*?/;\n // eslint-disable-next-line security/detect-non-literal-regexp\n var pic = new RegExp('(?:(' + picHead.source + '))([\\\\da-fA-F\\\\s]+)\\\\}', 'g');\n var fullImg = rtfData.match(pic);\n var imgType;\n var result = [];\n if (!isNOU(fullImg)) {\n for (var i = 0; i < fullImg.length; i++) {\n if (picHead.test(fullImg[i])) {\n if (fullImg[i].indexOf('\\\\pngblip') !== -1) {\n imgType = 'image/png';\n }\n else if (fullImg[i].indexOf('\\\\jpegblip') !== -1) {\n imgType = 'image/jpeg';\n }\n else {\n continue;\n }\n result.push({\n hex: imgType ? fullImg[i].replace(picHead, '').replace(/[^\\da-fA-F]/g, '') : null,\n type: imgType\n });\n }\n }\n }\n return result;\n };\n MsWordPaste.prototype.removeClassName = function (elm) {\n var elmWithClass = elm.querySelectorAll('*[class]');\n for (var i = 0; i < elmWithClass.length; i++) {\n elmWithClass[i].removeAttribute('class');\n }\n };\n MsWordPaste.prototype.breakLineAddition = function (elm) {\n var allElements = elm.querySelectorAll('*');\n for (var i = 0; i < allElements.length; i++) {\n if (allElements[i].children.length === 0 && allElements[i].innerHTML === ' ' &&\n (allElements[i].innerHTML === ' ' && !allElements[i].closest('li')) &&\n !allElements[i].closest('td') && (allElements[i].nodeName !== 'SPAN' ||\n allElements[i].nodeName === 'SPAN' && (isNOU(allElements[i].previousElementSibling) &&\n isNOU(allElements[i].nextElementSibling)))) {\n var detachableElement = this.findDetachElem(allElements[i]);\n var brElement = createElement('br');\n if (!isNOU(detachableElement.parentElement)) {\n detachableElement.parentElement.insertBefore(brElement, detachableElement);\n detach(detachableElement);\n }\n }\n }\n };\n MsWordPaste.prototype.findDetachElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement) &&\n element.parentElement.textContent.trim() === '' && element.parentElement.tagName !== 'TD' &&\n isNOU(element.parentElement.querySelector('img'))) {\n removableElement = this.findDetachElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n return removableElement;\n };\n MsWordPaste.prototype.removeUnwantedElements = function (elm) {\n var innerElement = elm.innerHTML;\n for (var i = 0; i < this.removableElements.length; i++) {\n // eslint-disable-next-line security/detect-non-literal-regexp\n var regExpStartElem = new RegExp('<' + this.removableElements[i] + '>', 'g');\n // eslint-disable-next-line security/detect-non-literal-regexp\n var regExpEndElem = new RegExp('', 'g');\n innerElement = innerElement.replace(regExpStartElem, '');\n innerElement = innerElement.replace(regExpEndElem, '');\n }\n elm.innerHTML = innerElement;\n elm.querySelectorAll(':empty');\n };\n MsWordPaste.prototype.findDetachEmptyElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement)) {\n if (element.parentElement.textContent.trim() === '' &&\n element.parentElement.getAttribute('id') !== 'MSWord-Content' &&\n !(this.hasParentWithClass(element, 'MsoListParagraph')) &&\n isNOU(element.parentElement.querySelector('img'))) {\n removableElement = this.findDetachEmptyElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n }\n else {\n removableElement = null;\n }\n return removableElement;\n };\n MsWordPaste.prototype.hasParentWithClass = function (element, className) {\n var currentParentElem = element.parentElement;\n while (!isNOU(currentParentElem)) {\n if (currentParentElem.classList.contains(className)) {\n return true;\n }\n currentParentElem = currentParentElem.parentElement;\n }\n return false;\n };\n MsWordPaste.prototype.removeEmptyElements = function (element) {\n var emptyElements = element.querySelectorAll(':empty');\n for (var i = 0; i < emptyElements.length; i++) {\n if (!isNOU(emptyElements[i].closest('td')) &&\n !isNOU(emptyElements[i].closest('td').querySelector('.MsoNormal'))) {\n emptyElements[i].innerHTML = '-';\n }\n var lineWithDiv = true;\n if (emptyElements[i].tagName === 'DIV') {\n lineWithDiv = emptyElements[i].style.borderBottom === 'none' ||\n emptyElements[i].style.borderBottom === '' ? true : false;\n }\n if (emptyElements[i].tagName !== 'IMG' && emptyElements[i].tagName !== 'BR' &&\n emptyElements[i].tagName !== 'IFRAME' && emptyElements[i].tagName !== 'TD' &&\n emptyElements[i].tagName !== 'HR' && lineWithDiv) {\n var detachableElement = this.findDetachEmptyElem(emptyElements[i]);\n if (!isNOU(detachableElement)) {\n detach(detachableElement);\n }\n }\n }\n };\n MsWordPaste.prototype.styleCorrection = function (elm, wordPasteStyleConfig) {\n var styleElement = elm.querySelectorAll('style');\n if (styleElement.length > 0) {\n var styles = styleElement[0].innerHTML.match(/[\\S ]+\\s+{[\\s\\S]+?}/gi);\n var styleClassObject_1 = !isNOU(styles) ? this.findStyleObject(styles) : null;\n var keys = Object.keys(styleClassObject_1);\n var values = keys.map(function (key) {\n return styleClassObject_1[\"\" + key];\n });\n values = this.removeUnwantedStyle(values, wordPasteStyleConfig);\n this.filterStyles(elm, wordPasteStyleConfig);\n var resultElem = void 0;\n var fromClass = false;\n for (var i = 0; i < keys.length; i++) {\n if (keys[i].split('.')[0] === '') {\n resultElem = elm.getElementsByClassName(keys[i].split('.')[1]);\n fromClass = true;\n }\n else if (keys[i].split('.').length === 1 && keys[i].split('.')[0].indexOf('@') >= 0) {\n continue;\n }\n else if (keys[i].split('.').length === 1 && keys[i].split('.')[0].indexOf('@') < 0) {\n resultElem = elm.getElementsByTagName(keys[i]);\n }\n else {\n resultElem = elm.querySelectorAll(keys[i]);\n }\n for (var j = 0; j < resultElem.length; j++) {\n var styleProperty = resultElem[j].getAttribute('style');\n if (!isNOU(styleProperty) && styleProperty.trim() !== '') {\n var valueSplit = values[i].split(';');\n if (!fromClass) {\n for (var k = 0; k < valueSplit.length; k++) {\n if (styleProperty.indexOf(valueSplit[k].split(':')[0]) >= 0) {\n valueSplit.splice(k, 1);\n k--;\n }\n }\n }\n var changedValue = styleProperty + valueSplit.join(';') + ';';\n resultElem[j].setAttribute('style', changedValue);\n }\n else {\n values[i] = values[i].replace(/text-indent:-(.*?)(?=;|$)/gm, '');\n resultElem[j].setAttribute('style', values[i]);\n }\n }\n fromClass = false;\n }\n var listClass = ['MsoListParagraphCxSpFirst', 'MsoListParagraphCxSpMiddle', 'MsoListParagraphCxSpLast'];\n for (var i = 0; i < listClass.length; i++) {\n if (keys.indexOf('li.' + listClass[i]) > -1) {\n var olULElems = elm.querySelectorAll('ol.' + listClass[i] + ', ul.' + listClass[i]);\n for (var j = 0; j < olULElems.length; j++) {\n var styleProperty = olULElems[j].getAttribute('style');\n if (!isNOU(styleProperty) && styleProperty.trim() !== '' && olULElems[j].style.marginLeft !== '') {\n var valueSplit = values[keys.indexOf('li.' + listClass[i])].split(';');\n for (var k = 0; k < valueSplit.length; k++) {\n if ('margin-left'.indexOf(valueSplit[k].split(':')[0]) >= 0) {\n if (!isNOU(valueSplit[k].split(':')[1]) &&\n valueSplit[k].split(':')[1].indexOf('in') >= 0 &&\n olULElems[j].style.marginLeft.indexOf('in') >= 0) {\n var classStyle = parseFloat(valueSplit[k].split(':')[1].split('in')[0]);\n var inlineStyle = parseFloat(olULElems[j].style.marginLeft.split('in')[0]);\n olULElems[j].style.marginLeft = (inlineStyle - classStyle) + 'in';\n }\n }\n }\n }\n }\n }\n }\n }\n };\n MsWordPaste.prototype.filterStyles = function (elm, wordPasteStyleConfig) {\n var elmWithStyles = elm.querySelectorAll('*[style]');\n for (var i = 0; i < elmWithStyles.length; i++) {\n var elemStyleProperty = elmWithStyles[i].getAttribute('style').split(';');\n var styleValue = '';\n for (var j = 0; j < elemStyleProperty.length; j++) {\n if (wordPasteStyleConfig.indexOf(elemStyleProperty[j].split(':')[0].trim()) >= 0) {\n styleValue += elemStyleProperty[j] + ';';\n }\n }\n elmWithStyles[i].setAttribute('style', styleValue);\n }\n };\n MsWordPaste.prototype.removeUnwantedStyle = function (values, wordPasteStyleConfig) {\n for (var i = 0; i < values.length; i++) {\n var styleValues = values[i].split(';');\n values[i] = '';\n for (var j = 0; j < styleValues.length; j++) {\n if (wordPasteStyleConfig.indexOf(styleValues[j].split(':')[0]) >= 0) {\n values[i] += styleValues[j] + ';';\n }\n }\n }\n return values;\n };\n MsWordPaste.prototype.findStyleObject = function (styles) {\n var styleClassObject = {};\n for (var i = 0; i < styles.length; i++) {\n var tempStyle = styles[i];\n var classNameCollection = tempStyle.replace(/([\\S ]+\\s+){[\\s\\S]+?}/gi, '$1');\n var stylesCollection = tempStyle.replace(/[\\S ]+\\s+{([\\s\\S]+?)}/gi, '$1');\n classNameCollection = classNameCollection.replace(/^[\\s]|[\\s]$/gm, '');\n stylesCollection = stylesCollection.replace(/^[\\s]|[\\s]$/gm, '');\n classNameCollection = classNameCollection.replace(/\\n|\\r|\\n\\r/g, '');\n stylesCollection = stylesCollection.replace(/\\n|\\r|\\n\\r/g, '');\n for (var classNames = classNameCollection.split(', '), j = 0; j < classNames.length; j++) {\n styleClassObject[classNames[j]] = stylesCollection;\n }\n }\n return styleClassObject;\n };\n MsWordPaste.prototype.removingComments = function (elm) {\n var innerElement = elm.innerHTML;\n innerElement = innerElement.replace(//g, '');\n elm.innerHTML = innerElement;\n };\n MsWordPaste.prototype.cleanUp = function (node, listNodes) {\n var tempCleaner = [];\n var prevflagState;\n var allNodes = node.querySelectorAll('*');\n for (var index = 0; index < allNodes.length; index++) {\n if (this.ignorableNodes.indexOf(allNodes[index].nodeName) === -1 ||\n (allNodes[index].nodeType === 3 && allNodes[index].textContent.trim() === '')) {\n tempCleaner.push(allNodes[index]);\n continue;\n }\n else if (allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1 &&\n !isNOU(allNodes[index].getAttribute('style')) &&\n allNodes[index].getAttribute('style').indexOf('mso-list:') >= 0) {\n if (allNodes[index].className.indexOf('MsoListParagraphCxSpFirst') >= 0 && listNodes.length > 0 &&\n listNodes[listNodes.length - 1] !== null) {\n listNodes.push(null);\n }\n listNodes.push(allNodes[index]);\n }\n if (prevflagState && (this.blockNode.indexOf(allNodes[index].nodeName.toLowerCase()) !== -1) &&\n !(allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1 && !isNOU(allNodes[index].getAttribute('style')) &&\n allNodes[index].getAttribute('style').indexOf('mso-list:') >= 0)) {\n listNodes.push(null);\n }\n if (this.blockNode.indexOf(allNodes[index].nodeName.toLowerCase()) !== -1) {\n if (allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1 && !isNOU(allNodes[index].getAttribute('style')) &&\n allNodes[index].getAttribute('style').indexOf('mso-list:') >= 0) {\n prevflagState = true;\n }\n else {\n prevflagState = false;\n }\n }\n }\n if (listNodes.length && (listNodes[listNodes.length - 1] !== null)) {\n listNodes.push(null);\n }\n return listNodes;\n };\n MsWordPaste.prototype.listConverter = function (listNodes) {\n var level;\n var data = [];\n var collection = [];\n var content = '';\n var stNode;\n var currentListStyle = '';\n for (var i = 0; i < listNodes.length; i++) {\n if (listNodes[i] === null) {\n data.push({ content: this.makeConversion(collection), node: listNodes[i - 1] });\n collection = [];\n continue;\n }\n if (listNodes[i].getAttribute('style') && listNodes[i].getAttribute('style').indexOf('mso-outline-level') !== -1) {\n listNodes[i].setAttribute('style', listNodes[i].getAttribute('style').replace('mso-outline-level', 'mso-outline'));\n }\n content = listNodes[i].getAttribute('style');\n if (content && content.indexOf('level') !== -1) {\n // eslint-disable-next-line\n level = parseInt(content.charAt(content.indexOf('level') + 5), null);\n }\n else {\n level = 1;\n }\n this.listContents = [];\n this.getListContent(listNodes[i]);\n var type = void 0;\n var listStyleType = void 0;\n var startAttr = void 0;\n var styleMarginLeft = void 0;\n if (!isNOU(this.listContents[0])) {\n type = this.listContents[0].trim().length > 1 ? 'ol' : 'ul';\n listStyleType = this.getlistStyleType(this.listContents[0], type);\n if (type === 'ol' && (i === 0 || listNodes[i - 1] === null)) {\n var startString = this.listContents[0].split('.')[0];\n var listTypes = ['A', 'a', 'I', 'i', 'α', '1', '1-']; // Add '1-' for rare list type.\n if (listTypes.indexOf(startString) === -1) {\n if (listStyleType === 'decimal') {\n // Bug in getlistStyleType() list style stype is returned as decimal for nested list with start attribute\n if (!isNaN(parseInt(startString, 10))) {\n startAttr = parseInt(startString, 10);\n }\n }\n else if (listStyleType === 'upper-alpha') {\n startAttr = (startString.split('.')[0].charCodeAt(0) - 64);\n }\n else if (listStyleType === 'lower-alpha') {\n startAttr = (startString.split('.')[0].charCodeAt(0) - 96);\n }\n else if (listStyleType === 'upper-roman') {\n startAttr = this.upperRomanNumber.indexOf(this.listContents[0].split('.')[0]) + 1;\n }\n else if (listStyleType === 'lower-roman') {\n startAttr = this.lowerRomanNumber.indexOf(this.listContents[0].split('.')[0]) + 1;\n }\n else if (listStyleType === 'lower-greek') {\n startAttr = this.lowerGreekNumber.indexOf(this.listContents[0].split('.')[0]) + 1;\n }\n }\n if (listNodes[i].style.marginLeft !== '') {\n styleMarginLeft = listNodes[i].style.marginLeft;\n }\n }\n var tempNode = [];\n for (var j = 1; j < this.listContents.length; j++) {\n tempNode.push(this.listContents[j]);\n }\n var currentClassName = void 0;\n if (!isNOU(listNodes[i].className)) {\n currentClassName = listNodes[i].className;\n }\n if (!isNOU(listNodes[i].getAttribute('style'))) {\n listNodes[i].setAttribute('style', listNodes[i].getAttribute('style').replace('text-align:start;', ''));\n if (listNodes[i].style.textAlign !== '') {\n listNodes[i].setAttribute('style', 'text-align:' + listNodes[i].style.textAlign);\n currentListStyle = listNodes[i].getAttribute('style');\n }\n }\n collection.push({ listType: type, content: tempNode, nestedLevel: level, class: currentClassName,\n listStyle: currentListStyle, listStyleTypeName: listStyleType, start: startAttr, styleMarginLeft: styleMarginLeft });\n }\n }\n stNode = listNodes.shift();\n while (stNode) {\n var elemColl = [];\n for (var temp1 = 0; temp1 < data.length; temp1++) {\n if (data[temp1].node === stNode) {\n for (var index = 0; index < data[temp1].content.childNodes.length; index++) {\n elemColl.push(data[temp1].content.childNodes[index]);\n }\n for (var index = 0; index < elemColl.length; index++) {\n stNode.parentElement.insertBefore(elemColl[index], stNode);\n }\n break;\n }\n }\n stNode.remove();\n stNode = listNodes.shift();\n if (!stNode) {\n stNode = listNodes.shift();\n }\n }\n };\n MsWordPaste.prototype.getlistStyleType = function (listContent, type) {\n var currentListClass;\n if (type === 'ol') {\n var charCode = listContent.split('.')[0].charCodeAt(0);\n switch (true) {\n case this.upperRomanNumber.indexOf(listContent.split('.')[0]) > -1:\n currentListClass = 'upper-roman';\n break;\n case this.lowerRomanNumber.indexOf(listContent.split('.')[0]) > -1:\n currentListClass = 'lower-roman';\n break;\n case this.lowerGreekNumber.indexOf(listContent.split('.')[0]) > -1:\n currentListClass = 'lower-greek';\n break;\n case (charCode > 64 && charCode < 91):\n currentListClass = 'upper-alpha';\n break;\n case (charCode > 96 && charCode < 123):\n currentListClass = 'lower-alpha';\n break;\n default:\n currentListClass = 'decimal';\n break;\n }\n }\n else {\n switch (listContent.split('.')[0]) {\n case 'o':\n currentListClass = 'circle';\n break;\n case '§':\n currentListClass = 'square';\n break;\n default:\n currentListClass = 'disc';\n break;\n }\n }\n return currentListClass;\n };\n MsWordPaste.prototype.makeConversion = function (collection) {\n var root = createElement('div');\n var temp;\n var pLevel = 1;\n var prevList;\n var listCount = 0;\n var elem;\n for (var index = 0; index < collection.length; index++) {\n var listClass = ['MsoListParagraphCxSpFirst', 'MsoListParagraphCxSpMiddle', 'MsoListParagraphCxSpLast'];\n var isNormalList = false;\n for (var i = 0; i < listClass.length; i++) {\n if (listClass[i].indexOf(collection[index].class) >= 0) {\n isNormalList = true;\n break;\n }\n }\n if (!isNOU(prevList) && index !== 0 &&\n collection[index - 1].listType !== collection[index].listType &&\n !isNormalList) {\n prevList = null;\n }\n var pElement = createElement('p');\n pElement.innerHTML = collection[index].content.join(' ');\n if ((collection[index].nestedLevel === 1) && listCount === 0 && collection[index].content) {\n root.appendChild(temp = createElement(collection[index].listType, { className: collection[index].class }));\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.marginLeft = collection[index].styleMarginLeft;\n temp.style.listStyleType = collection[index].listStyleTypeName;\n }\n else if (collection[index].nestedLevel === pLevel) {\n if (prevList.parentElement.tagName.toLowerCase() === collection[index].listType) {\n prevList.parentElement.appendChild(prevList = createElement('li'));\n prevList.appendChild(pElement);\n }\n else {\n temp = createElement(collection[index].listType);\n temp.style.listStyleType = collection[index].listStyleTypeName;\n prevList.parentElement.parentElement.appendChild(temp);\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n }\n }\n else if (collection[index].nestedLevel > pLevel) {\n if (!isNOU(prevList)) {\n for (var j = 0; j < collection[index].nestedLevel - pLevel; j++) {\n prevList.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n if (j !== collection[index].nestedLevel - pLevel - 1 &&\n collection[index].nestedLevel - pLevel > 1) {\n prevList.style.listStyleType = 'none';\n }\n temp.appendChild(prevList);\n }\n prevList.appendChild(pElement);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyleType = collection[index].listStyleTypeName;\n }\n else {\n if (collection[index].nestedLevel > pLevel && isNormalList) {\n var initialNode = void 0;\n initialNode = createElement(collection[index].listType);\n prevList = createElement('li');\n initialNode.appendChild(prevList);\n initialNode.style.listStyleType = 'none';\n for (var j = 0; j < collection[index].nestedLevel - 1; j++) {\n prevList.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n temp.appendChild(prevList);\n temp.style.listStyleType = 'none';\n }\n prevList.appendChild(pElement);\n root.appendChild(initialNode);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyleType = collection[index].listStyleTypeName;\n }\n else {\n root.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyleType = collection[index].listStyleTypeName;\n }\n }\n }\n else if (collection[index].nestedLevel === 1) {\n if (root.lastChild.tagName.toLowerCase() === collection[index].listType) {\n temp = root.lastChild;\n }\n else {\n root.appendChild(temp = createElement(collection[index].listType));\n temp.style.listStyleType = collection[index].listStyleTypeName;\n }\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n }\n else {\n elem = prevList;\n while (elem.parentElement) {\n elem = elem.parentElement;\n if (elem.attributes.getNamedItem('level')) {\n // eslint-disable-next-line\n if (parseInt(elem.attributes.getNamedItem('level').textContent, null) === collection[index].nestedLevel) {\n prevList = createElement('li');\n prevList.appendChild(pElement);\n elem.appendChild(prevList);\n break;\n // eslint-disable-next-line\n }\n else if (collection[index].nestedLevel > parseInt(elem.attributes.getNamedItem('level').textContent, null)) {\n elem.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyleType = collection[index].listStyleTypeName;\n break;\n }\n }\n continue;\n }\n }\n prevList.setAttribute('class', collection[index].class);\n var currentStyle = prevList.getAttribute('style');\n prevList.setAttribute('style', (!isNOU(currentStyle) ? currentStyle : ''));\n pLevel = collection[index].nestedLevel;\n listCount++;\n if (!isNOU(collection[index].start)) {\n temp.setAttribute('start', collection[index].start.toString());\n }\n }\n return root;\n };\n MsWordPaste.prototype.getListContent = function (elem) {\n var pushContent = '';\n var firstChild = elem.firstElementChild;\n if (firstChild.textContent.trim() === '' && !isNOU(firstChild.firstElementChild) &&\n firstChild.firstElementChild.nodeName === 'IMG') {\n pushContent = elem.innerHTML.trim();\n this.listContents.push('');\n this.listContents.push(pushContent);\n }\n else {\n //Add to support separate list which looks like same list and also to add all tags as it is inside list\n if (firstChild.childNodes.length > 0) {\n var listIgnoreTag = firstChild.querySelectorAll('[style*=\"mso-list\"]');\n for (var i = 0; i < listIgnoreTag.length; i++) {\n listIgnoreTag[i].setAttribute('style', listIgnoreTag[i].getAttribute('style').replace(/\\n/g, \"\"));\n }\n var listOrder = firstChild.querySelector('span[style=\"mso-list:Ignore\"]');\n if (!isNOU(listOrder)) {\n this.listContents.push(listOrder.textContent.trim());\n detach(listOrder);\n this.removingComments(elem);\n this.removeUnwantedElements(elem);\n }\n }\n }\n this.listContents.push(elem.innerHTML);\n };\n MsWordPaste.prototype.removeEmptyAnchorTag = function (element) {\n var removableElement = element.querySelectorAll('a:not([href])');\n for (var j = removableElement.length - 1; j >= 0; j--) {\n var parentElem = removableElement[j].parentNode;\n while (removableElement[j].firstChild) {\n parentElem.insertBefore(removableElement[j].firstChild, removableElement[j]);\n }\n parentElem.removeChild(removableElement[j]);\n }\n };\n return MsWordPaste;\n}());\nexport { MsWordPaste };\n","import * as CONSTANT from '../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Insert a Text Node or Text\n *\n * @hidden\n\n */\nvar InsertTextExec = /** @class */ (function () {\n /**\n * Constructor for creating the InsertText plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function InsertTextExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertTextExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERT_TEXT_TYPE, this.insertText, this);\n };\n InsertTextExec.prototype.insertText = function (e) {\n var node = document.createTextNode(e.value);\n InsertHtml.Insert(this.parent.currentDocument, node, this.parent.editableElement);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return InsertTextExec;\n}());\nexport { InsertTextExec };\n","import { closest, createElement, detach, isNullOrUndefined as isNOU, removeClass } from '@syncfusion/ej2-base';\nimport * as EVENTS from '../../common/constant';\nimport { SelectionCommands } from '../plugin';\nvar FormatPainterActions = /** @class */ (function () {\n function FormatPainterActions(parent, options) {\n this.INVALID_TAGS = ['A', 'AUDIO', 'IMG', 'VIDEO', 'IFRAME'];\n this.parent = parent;\n this.settings = options;\n this.addEventListener();\n this.setDeniedFormats();\n }\n FormatPainterActions.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_PAINTER_ACTIONS, this.actionHandler, this);\n this.parent.observer.on(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged, this);\n };\n FormatPainterActions.prototype.onPropertyChanged = function (prop) {\n if (prop && prop.module === 'formatPainter') {\n if (!isNOU(prop.newProp.formatPainterSettings.allowedFormats)) {\n this.settings.allowedFormats = prop.newProp.formatPainterSettings.allowedFormats;\n }\n if (!isNOU(prop.newProp.formatPainterSettings.deniedFormats)) {\n this.settings.deniedFormats = prop.newProp.formatPainterSettings.deniedFormats;\n this.setDeniedFormats();\n }\n }\n };\n FormatPainterActions.prototype.removeEventListener = function () {\n this.parent.observer.off(EVENTS.FORMAT_PAINTER_ACTIONS, this.actionHandler);\n this.parent.observer.off(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged);\n };\n /**\n * Destroys the format painter.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n FormatPainterActions.prototype.destroy = function () {\n this.removeEventListener();\n this.INVALID_TAGS = null;\n this.copyCollection = null;\n this.deniedFormatsCollection = null;\n this.newElem = null;\n this.newElemLastChild = null;\n this.settings = null;\n this.parent = null;\n };\n FormatPainterActions.prototype.actionHandler = function (args) {\n this.settings.allowedContext = ['Text', 'List', 'Table'];\n if (!isNOU(args) && !isNOU(args.item) && !isNOU(args.item.formatPainterAction)) {\n switch (args.item.formatPainterAction) {\n case 'format-copy':\n this.copyAction();\n break;\n case 'format-paste':\n this.pasteAction();\n break;\n case 'escape':\n this.escapeAction();\n break;\n }\n this.callBack(args);\n }\n };\n FormatPainterActions.prototype.callBack = function (event) {\n if (event.callBack) {\n event.callBack({\n requestType: 'FormatPainter',\n action: event.item.formatPainterAction,\n event: event.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n FormatPainterActions.prototype.generateElement = function () {\n var copyCollection = this.copyCollection.slice(); // To clone without reversing the collcection array\n copyCollection.reverse();\n var length = copyCollection.length;\n var elemCollection = createElement('div', { className: 'e-format-paste-wrapper' });\n var lastAppendChild;\n for (var i = 0; i < length; i++) {\n var _a = copyCollection[i], attrs = _a.attrs, className = _a.className, styles = _a.styles, tagName = _a.tagName;\n var elem = createElement(tagName);\n if (className !== '') {\n elem.className = className;\n }\n for (var i_1 = 0; i_1 < attrs.length; i_1++) {\n var property = attrs[i_1].name;\n var value = attrs[i_1].value;\n elem.setAttribute(property, value);\n }\n for (var i_2 = 0; i_2 < styles.length; i_2++) {\n var property = styles[i_2].property;\n var value = styles[i_2].value;\n var priority = styles[i_2].priority;\n elem.style.setProperty(property, value, priority);\n }\n if (elemCollection.childElementCount === 0) {\n elemCollection.append(elem);\n lastAppendChild = elem;\n }\n else {\n lastAppendChild.append(elem);\n lastAppendChild = elem;\n }\n }\n var elemChild = this.removeDeniedFormats(elemCollection);\n var currentElem = elemChild;\n while (currentElem) {\n if (currentElem.firstChild === null) {\n lastAppendChild = currentElem;\n currentElem = undefined;\n }\n else {\n currentElem = currentElem.firstChild;\n }\n }\n this.newElem = elemChild;\n this.newElemLastChild = lastAppendChild;\n };\n FormatPainterActions.prototype.pasteAction = function () {\n if (isNOU(this.copyCollection) || this.copyCollection.length === 0) {\n this.paintPlainTextFormat();\n return;\n }\n this.insertFormatNode(this.newElem, this.newElemLastChild);\n };\n FormatPainterActions.prototype.removeDeniedFormats = function (parentElement) {\n if (!isNOU(this.deniedFormatsCollection) && this.deniedFormatsCollection.length > 0) {\n var deniedPropArray = this.deniedFormatsCollection;\n var length_1 = deniedPropArray.length;\n for (var i = 0; i < length_1; i++) {\n var tag = deniedPropArray[i].tag;\n if (deniedPropArray[i].tag) {\n var elementsList = parentElement.querySelectorAll(tag);\n for (var j = 0; j < elementsList.length; j++) {\n if (deniedPropArray[i].classes.length > 0) {\n var classes = deniedPropArray[i].classes;\n var classLength = classes.length;\n for (var k = 0; k < classLength; k++) {\n if (elementsList[j].classList.contains(classes[k])) {\n removeClass([elementsList[j]], classes[k].trim());\n }\n }\n if (elementsList[j].classList.length === 0) {\n elementsList[j].removeAttribute('class');\n }\n }\n if (deniedPropArray[i].styles.length > 0) {\n var styles = deniedPropArray[i].styles;\n var styleLength = styles.length;\n for (var k = 0; k < styleLength; k++) {\n elementsList[j].style.removeProperty(styles[k].trim());\n }\n if (elementsList[j].style.length === 0) {\n elementsList[j].removeAttribute('style');\n }\n }\n if (deniedPropArray[i].attributes.length > 0) {\n var attributes = deniedPropArray[i].attributes;\n var attributeLength = attributes.length;\n for (var k = 0; k < attributeLength; k++) {\n elementsList[j].removeAttribute(attributes[k].trim());\n }\n }\n }\n }\n }\n }\n return parentElement.firstElementChild;\n };\n FormatPainterActions.prototype.copyAction = function () {\n var copyCollection = [];\n var range = this.parent.nodeSelection.getRange(document);\n var domSelection = this.parent.nodeSelection;\n var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :\n domSelection.getSelectionNodeCollectionBr(range);\n if (nodes.length === 0 && domSelection.getSelectionNodeCollectionBr(range).length === 0) {\n return;\n }\n else {\n nodes = nodes.length === 0 ? domSelection.getSelectionNodeCollectionBr(range) : nodes;\n }\n var parentElem = nodes[0].parentElement;\n var currentContext = this.findCurrentContext(parentElem);\n var allowedRulesArray = this.settings.allowedFormats.indexOf(';') > -1 ? this.settings.allowedFormats.split(';') :\n [this.settings.allowedFormats];\n for (var i = 0; i < allowedRulesArray.length; i++) {\n allowedRulesArray[i] = allowedRulesArray[i].trim();\n }\n var _a = this.getRangeParentElem(currentContext, parentElem), rangeParentElem = _a[0], context = _a[1];\n if (currentContext === null) {\n currentContext = context;\n }\n if (!isNOU(currentContext) && this.settings.allowedContext.indexOf(currentContext) > -1) {\n if (range.startContainer.nodeName === '#text') {\n parentElem = range.startContainer.parentElement;\n }\n var lastElement = parentElem;\n do {\n if (allowedRulesArray.indexOf(parentElem.nodeName.toLowerCase()) > -1) {\n var allAttributes = parentElem.attributes;\n var attribute = [];\n for (var i = 0; i < allAttributes.length; i++) {\n if (allAttributes[i].name !== 'class' && allAttributes[i].name !== 'style') {\n attribute.push(allAttributes[i]);\n }\n }\n var classes = parentElem.className;\n var allStyles = parentElem.style;\n var styleProp = [];\n for (var i = 0; i < allStyles.length; i++) {\n var property = allStyles[i];\n var value = allStyles.getPropertyValue(property);\n var priority = allStyles.getPropertyPriority(property);\n styleProp.push({ property: property, value: value, priority: priority });\n }\n copyCollection.push({\n attrs: attribute, className: classes, styles: styleProp, tagName: parentElem.nodeName\n });\n }\n if (rangeParentElem === parentElem) {\n parentElem = undefined;\n }\n else if (!isNOU(parentElem.parentElement)) {\n parentElem = parentElem.parentElement;\n }\n if (lastElement === parentElem) {\n break;\n }\n } while (!isNOU(parentElem) || parentElem === this.parent.editableElement);\n this.copyCollection = copyCollection;\n }\n this.generateElement();\n };\n FormatPainterActions.prototype.getRangeParentElem = function (currentContext, rangeParent) {\n var startContainer = rangeParent;\n var rangeParentELem;\n if (startContainer.nodeType === 3) {\n startContainer = startContainer.parentElement;\n }\n switch (currentContext) {\n case 'Table':\n rangeParentELem = closest(startContainer, 'td');\n if (isNOU(rangeParentELem)) {\n rangeParentELem = closest(startContainer, 'th');\n }\n break;\n case 'List':\n rangeParentELem = closest(startContainer, 'li');\n break;\n case 'Text':\n rangeParentELem = closest(startContainer, 'p');\n break;\n }\n if (isNOU(rangeParentELem)) {\n var nearBlockParentName = this.getNearestBlockParentElement(rangeParent);\n if (!isNOU(nearBlockParentName) && nearBlockParentName !== 'UL' &&\n nearBlockParentName !== 'OL' && nearBlockParentName !== 'LI') {\n rangeParentELem = closest(startContainer, nearBlockParentName);\n currentContext = 'Text';\n }\n }\n if (currentContext === 'List') {\n rangeParentELem = rangeParentELem.parentElement;\n }\n return [rangeParentELem, currentContext];\n };\n FormatPainterActions.prototype.getNearestBlockParentElement = function (rangeParent) {\n var node = rangeParent;\n if (node.nodeType === 3) {\n node = node.parentNode;\n }\n // iterate untill the content editable div\n while (node && node !== this.parent.editableElement) {\n // If true return the block node name.\n if (!isNOU(node) && this.isBlockElement(node)) {\n return node.nodeName;\n }\n // if false re assign node to parent node\n node = node.parentNode;\n }\n return null;\n };\n FormatPainterActions.prototype.isBlockElement = function (node) {\n var blockTags = ['P', 'DIV', 'UL', 'OL', 'LI', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6',\n 'ADDRESS', 'ARTICLE', 'ASIDE', 'BLOCKQUOTE', 'FIGCAPTION', 'FIGURE', 'FOOTER', 'HEADER',\n 'HR', 'MAIN', 'NAV', 'SECTION', 'SUMMARY', 'PRE'];\n return blockTags.indexOf(node.nodeName) > -1;\n };\n FormatPainterActions.prototype.escapeAction = function () {\n this.copyCollection = [];\n };\n FormatPainterActions.prototype.paintPlainTextFormat = function () {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var domSelection = this.parent.nodeSelection;\n var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :\n domSelection.getSelectionNodeCollectionBr(range);\n var isInValid;\n if (nodes.length > 1) {\n for (var i = 0; i < nodes.length; i++) {\n isInValid = this.validateELementTag(nodes[i]);\n }\n }\n else {\n isInValid = this.validateELementTag(range.startContainer) && this.validateELementTag(range.endContainer);\n }\n if (!isInValid) {\n this.parent.execCommand('Clear', 'ClearFormat', null, null);\n }\n };\n FormatPainterActions.prototype.validateELementTag = function (node) {\n if (node.nodeType === 3) {\n node = node.parentElement;\n }\n return this.INVALID_TAGS.indexOf(node.tagName) > -1;\n };\n FormatPainterActions.prototype.findCurrentContext = function (parentElem) {\n if (closest(parentElem, 'p')) {\n return 'Text';\n }\n else if (closest(parentElem, 'li')) {\n return 'List';\n }\n else if (closest(parentElem, 'td') || closest(parentElem, 'tr') || closest(parentElem, 'th')) {\n return 'Table';\n }\n return null;\n };\n FormatPainterActions.prototype.insertFormatNode = function (elem, lastChild) {\n var clonedElem = elem.cloneNode(true);\n if (!this.isBlockElement(elem)) {\n var newBlockElem = createElement('P');\n newBlockElem.appendChild(elem);\n clonedElem = newBlockElem.cloneNode(true);\n }\n var endNode = this.parent.editableElement;\n var docElement = this.parent.currentDocument;\n var childElem = clonedElem.firstChild;\n var inlineElement;\n while (childElem) {\n if (this.isBlockElement(childElem)) {\n childElem = childElem.firstChild;\n }\n else {\n inlineElement = childElem.parentNode.removeChild(childElem);\n break;\n }\n }\n var formatValues = {\n element: inlineElement,\n lastChild: lastChild\n };\n SelectionCommands.applyFormat(docElement, null, endNode, 'P', 'formatPainter', null, formatValues);\n var range = this.parent.nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var blockNodes = this.parent.domNode.blockNodes();\n var isFullNodeSelected = false;\n if (blockNodes.length === 1) {\n isFullNodeSelected = blockNodes[0].textContent.trim() === range.toString().trim();\n }\n if (this.isBlockElement(clonedElem) && isCollapsed || blockNodes.length > 1 || isFullNodeSelected) {\n this.insertBlockNode(clonedElem, range, docElement, blockNodes);\n }\n };\n FormatPainterActions.prototype.insertBlockNode = function (element, range, docElement, nodes) {\n var domSelection = this.parent.nodeSelection;\n var saveSelection = domSelection.save(range, docElement);\n this.parent.domNode.setMarker(saveSelection);\n var listElement; // To clone to multiple list elements\n var cloneListParentNode;\n var sameListType = false;\n if (element.nodeName === 'UL' || element.nodeName === 'OL') {\n cloneListParentNode = element.cloneNode(true);\n listElement = cloneListParentNode.firstChild;\n }\n var cloneElementNode = isNOU(cloneListParentNode) ? element : element.firstChild;\n for (var index = 0; index < nodes.length; index++) {\n if (this.INVALID_TAGS.indexOf(nodes[index].nodeName) > -1 ||\n nodes[index].querySelectorAll('a,img,audio,video,iframe').length > 0) {\n continue;\n }\n var cloneParentNode = cloneElementNode.cloneNode(false);\n // Appending all the child elements\n while (nodes[index].firstChild) {\n if (nodes[index].textContent.trim().length !== 0) {\n cloneParentNode.appendChild(nodes[index].firstChild);\n }\n else {\n nodes[index].removeChild(nodes[index].firstChild);\n }\n }\n if (nodes[index].nodeName === 'TD' || nodes[index].nodeName === 'TH') {\n if (isNOU(cloneListParentNode)) {\n nodes[index].appendChild(cloneParentNode);\n continue;\n }\n else if (index === 0 && !isNOU(cloneListParentNode)) {\n nodes[index].appendChild(cloneListParentNode);\n cloneListParentNode.appendChild(cloneParentNode);\n continue;\n }\n else {\n nodes[index].appendChild(cloneParentNode);\n continue;\n }\n }\n if (!isNOU(cloneListParentNode)) {\n sameListType = this.isSameListType(element, nodes[index]);\n }\n if (cloneParentNode.nodeName === 'LI' && !sameListType) {\n this.insertNewList(range, nodes, index, cloneListParentNode, cloneParentNode);\n }\n else if (sameListType) {\n this.insertSameList(nodes, index, cloneListParentNode, cloneParentNode);\n }\n else {\n nodes[index].parentNode.replaceChild(cloneParentNode, nodes[index]);\n }\n /**Removing the inserted block node in list and appending to previous element sibling */\n if (cloneParentNode.nodeName !== 'LI' && (cloneParentNode.parentElement.nodeName === 'OL' ||\n cloneParentNode.parentElement.nodeName === 'UL')) {\n var parent_1 = cloneParentNode.parentElement;\n // Cutting single ul or ol to two ul or ol based on the range\n this.parent.nodeCutter.SplitNode(range, parent_1, true);\n if (!isNOU(parent_1.previousElementSibling)) {\n parent_1.previousElementSibling.after(cloneParentNode);\n // To remove the nested list items out of the block element\n if (cloneParentNode.childNodes.length > 1) {\n for (var j = 0; j < cloneParentNode.childNodes.length; j++) {\n var currentChild = cloneParentNode.childNodes[j];\n if (currentChild.nodeName === 'OL' || currentChild.nodeName === 'UL') {\n cloneParentNode.after(currentChild);\n }\n }\n }\n }\n else {\n parent_1.parentElement.prepend(cloneParentNode);\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n !isNOU(listElement) ? detach(listElement) : false;\n this.cleanEmptyLists();\n var save = this.parent.domNode.saveMarker(saveSelection, null);\n save.restore();\n };\n FormatPainterActions.prototype.insertNewList = function (range, nodes, index, cloneListParentNode, cloneParentNode) {\n // Appending the li nodes to the ol or ul node\n if (index === 0) {\n var nodeName = nodes[index].nodeName;\n nodes[index] = nodes[index].parentNode.replaceChild(cloneListParentNode, nodes[index]);\n var parent_2 = nodeName === 'LI' ? cloneListParentNode.parentElement\n : cloneListParentNode;\n // Splicing and then inserting the node to previous element sibling of the Listparent.parent\n this.parent.nodeCutter.SplitNode(range, parent_2, true);\n if (nodes[index].nodeName === 'LI' && !isNOU(parent_2)) {\n cloneListParentNode.append(cloneParentNode);\n if (!isNOU(parent_2.parentNode)) {\n parent_2.parentNode.insertBefore(cloneListParentNode, parent_2);\n }\n }\n else {\n if (!isNOU(parent_2)) {\n if (!isNOU(parent_2.previousElementSibling) && parent_2.previousElementSibling.nodeName === cloneListParentNode.nodeName) {\n var currentParent = parent_2.previousElementSibling;\n currentParent.append(cloneParentNode);\n while (currentParent.firstChild) {\n cloneListParentNode.append(currentParent.firstChild);\n }\n }\n else if (!isNOU(parent_2.nextElementSibling) && parent_2.nextElementSibling.nodeName === cloneListParentNode.nodeName) {\n var currentParent = parent_2.nextElementSibling;\n currentParent.prepend(cloneParentNode);\n while (currentParent.firstChild) {\n cloneListParentNode.append(currentParent.firstChild);\n }\n }\n else {\n cloneListParentNode.append(cloneParentNode);\n }\n }\n else {\n cloneListParentNode.append(cloneParentNode);\n }\n }\n }\n else {\n cloneListParentNode.append(cloneParentNode);\n }\n this.detachEmptyBlockNodes(nodes[index]);\n };\n FormatPainterActions.prototype.insertSameList = function (nodes, index, cloneListParentNode, cloneParentNode) {\n if (index === 0) {\n if (!isNOU(nodes[index].parentNode) && (nodes[index].parentNode.nodeName === 'UL' || nodes[index].parentNode.nodeName === 'OL')) {\n // append the nodes[index].parentNode.childNodes to the clonelistparentnode\n if (nodes.length === 1) {\n // When clicked with cursor in the single list item\n while (cloneParentNode.firstChild) {\n nodes[index].append(cloneParentNode.firstChild);\n }\n for (var i = 0; i < nodes[index].parentNode.childNodes.length; i++) {\n var currentChild = nodes[index].parentNode.childNodes[i];\n cloneListParentNode.append(currentChild.cloneNode(true));\n }\n }\n else {\n cloneListParentNode.append(cloneParentNode);\n }\n // replace the older ol and ul with new ol and ul of clonelistparentnode\n nodes[index].parentNode.parentNode.replaceChild(cloneListParentNode, nodes[index].parentNode);\n }\n }\n else {\n cloneListParentNode.append(cloneParentNode);\n }\n this.detachEmptyBlockNodes(nodes[index]);\n };\n FormatPainterActions.prototype.isSameListType = function (element, node) {\n var isSameListType = false;\n var nearestListNode = closest(node, 'ol, ul');\n if (!isNOU(nearestListNode) && nearestListNode.querySelectorAll('li').length > 0) {\n if (nearestListNode.nodeName === element.nodeName) {\n isSameListType = true;\n }\n else {\n isSameListType = false;\n }\n }\n return isSameListType;\n };\n FormatPainterActions.prototype.cleanEmptyLists = function () {\n var listElem = this.parent.editableElement.querySelectorAll('ol, ul');\n for (var i = 0; i < listElem.length; i++) {\n if (listElem[i].textContent.trim() === '') {\n detach(listElem[i]);\n }\n }\n };\n FormatPainterActions.prototype.setDeniedFormats = function () {\n var deniedFormatsCollection = [];\n if (isNOU(this.settings) || isNOU(this.settings.deniedFormats)) {\n return;\n }\n var deniedFormats = this.settings.deniedFormats.indexOf(';') > -1 ? this.settings.deniedFormats.split(';') :\n [this.settings.deniedFormats];\n var length = deniedFormats.length;\n for (var i = 0; i < length; i++) {\n var formatString = deniedFormats[i];\n if (formatString !== '') {\n formatString.trim();\n var collection = this.makeDeniedFormatsCollection(formatString);\n if (!isNOU(collection)) {\n deniedFormatsCollection.push(collection);\n }\n }\n }\n this.deniedFormatsCollection = deniedFormatsCollection;\n };\n FormatPainterActions.prototype.detachEmptyBlockNodes = function (node) {\n if (!isNOU(node) && node.textContent.trim() === '') {\n detach(node);\n }\n };\n FormatPainterActions.prototype.makeDeniedFormatsCollection = function (value) {\n var openParenIndex = value.indexOf('(');\n var closeParenIndex = value.indexOf(')');\n var openBracketIndex = value.indexOf('[');\n var closeBracketIndex = value.indexOf(']');\n var openBraceIndex = value.indexOf('{');\n var closeBraceIndex = value.indexOf('}');\n var classes = [];\n var attributes = '';\n var styles = '';\n var tagName = '';\n var classList = [];\n var attributesList = [];\n var stylesList = [];\n if (openParenIndex > -1 && closeParenIndex > -1) {\n classes = value.substring(openParenIndex + 1, closeParenIndex).split(' ');\n classList = classes[0].split(')')[0].split(',');\n }\n if (openBracketIndex > -1 && closeBracketIndex > -1) {\n attributes = value.substring(openBracketIndex + 1, closeBracketIndex);\n attributesList = attributes.split(',');\n }\n if (openBraceIndex > -1 && closeBraceIndex > -1) {\n styles = value.substring(openBraceIndex + 1, closeBraceIndex);\n stylesList = styles.split(',');\n }\n var openIndexArray = [openParenIndex, openBracketIndex, openBraceIndex];\n openIndexArray = openIndexArray.filter(function (index) { return index > -1; });\n var len = openIndexArray.length;\n var min;\n if (len === 1) {\n min = openIndexArray[0];\n }\n else if (len === 2) {\n min = Math.min(openIndexArray[0], openIndexArray[1]);\n }\n else if (len === 3) {\n min = Math.min(openIndexArray[0], openIndexArray[1], openIndexArray[2]);\n }\n tagName = value.substring(0, min);\n tagName = tagName.trim();\n return ({\n tag: tagName, styles: stylesList, classes: classList,\n attributes: attributesList\n });\n };\n return FormatPainterActions;\n}());\nexport { FormatPainterActions };\n","import * as EVENTS from './../../common/constant';\nimport { InsertHtml } from './inserthtml';\nvar EmojiPickerAction = /** @class */ (function () {\n function EmojiPickerAction(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n EmojiPickerAction.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.EMOJI_PICKER_ACTIONS, this.emojiInsert, this);\n };\n EmojiPickerAction.prototype.emojiInsert = function (args) {\n var node = document.createTextNode(args.value);\n var selection = window.getSelection();\n var range = selection.getRangeAt(0);\n var cursorPos = range.startOffset;\n for (var i = cursorPos - 1; i >= cursorPos - 15; i--) {\n var prevChar_1 = selection.focusNode.textContent.substring(i - 1, i);\n var isPrevSpace_1 = /:$/.test(prevChar_1);\n if (isPrevSpace_1) {\n this.beforeApplyFormat(true);\n break;\n }\n }\n var colon = /:$/.test(selection.focusNode.textContent.charAt(cursorPos - 1));\n var prevChar = selection.focusNode.textContent.charAt(cursorPos - 2);\n var isPrevSpace = /\\s/.test(prevChar);\n if (colon && (isPrevSpace || selection.focusOffset === 1)) {\n this.beforeApplyFormat(true);\n }\n InsertHtml.Insert(this.parent.currentDocument, node, this.parent.editableElement);\n if (args.callBack) {\n args.callBack({\n requestType: args.subCommand,\n editorMode: 'HTML',\n event: args.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n EmojiPickerAction.prototype.beforeApplyFormat = function (isBlockFormat) {\n var range1 = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var node = this.parent.nodeSelection.getNodeCollection(range1)[0];\n var blockNewLine = !(node.parentElement.innerHTML.replace(/ |
    /g, '').trim() === ':' || node.textContent.trim().indexOf('/') === 0);\n var startNode = node;\n if (blockNewLine && isBlockFormat) {\n while (startNode !== this.parent.editableElement) {\n startNode = startNode.parentElement;\n }\n }\n var startPoint = range1.startOffset;\n while (this.parent.nodeSelection.getRange(document).toString().indexOf(':') === -1) {\n this.parent.nodeSelection.setSelectionText(document, node, node, startPoint, range1.endOffset);\n startPoint--;\n }\n var range2 = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var node2 = this.parent.nodeCutter.GetSpliceNode(range2, node);\n node2.parentNode.removeChild(node2);\n };\n return EmojiPickerAction;\n}());\nexport { EmojiPickerAction };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { Lists } from './../plugin/lists';\nimport { NodeSelection } from './../../selection/index';\nimport { DOMNode } from './../plugin/dom-node';\nimport { Formats } from './../plugin/formats';\nimport { LinkCommand } from './../plugin/link';\nimport { Alignments } from './../plugin/alignments';\nimport { Indents } from './../plugin/indents';\nimport { ImageCommand } from './../plugin/image';\nimport { AudioCommand } from './../plugin/audio';\nimport { VideoCommand } from './../plugin/video';\nimport { TableCommand } from './../plugin/table';\nimport { SelectionBasedExec } from './../plugin/selection-exec';\nimport { InsertHtmlExec } from './../plugin/inserthtml-exec';\nimport { ClearFormatExec } from './../plugin/clearformat-exec';\nimport { UndoRedoManager } from './../plugin/undo';\nimport { MsWordPaste } from '../plugin/ms-word-clean-up';\nimport * as EVENTS from './../../common/constant';\nimport { InsertTextExec } from '../plugin/insert-text';\nimport { NodeCutter } from '../plugin/nodecutter';\nimport { FormatPainterActions } from '../plugin/format-painter-actions';\nimport { EmojiPickerAction } from '../plugin/emoji-picker-action';\n/**\n * EditorManager internal component\n *\n * @hidden\n\n */\nvar EditorManager = /** @class */ (function () {\n /**\n * Constructor for creating the component\n *\n * @hidden\n\n * @param {ICommandModel} options - specifies the command Model\n */\n function EditorManager(options) {\n this.currentDocument = options.document;\n this.editableElement = options.editableElement;\n this.nodeSelection = new NodeSelection();\n this.nodeCutter = new NodeCutter();\n this.domNode = new DOMNode(this.editableElement, this.currentDocument);\n this.observer = new Observer(this);\n this.listObj = new Lists(this);\n this.formatObj = new Formats(this);\n this.alignmentObj = new Alignments(this);\n this.indentsObj = new Indents(this);\n this.linkObj = new LinkCommand(this);\n this.imgObj = new ImageCommand(this);\n this.audioObj = new AudioCommand(this);\n this.videoObj = new VideoCommand(this);\n this.selectionObj = new SelectionBasedExec(this);\n this.inserthtmlObj = new InsertHtmlExec(this);\n this.insertTextObj = new InsertTextExec(this);\n this.clearObj = new ClearFormatExec(this);\n this.tableObj = new TableCommand(this);\n this.undoRedoManager = new UndoRedoManager(this, options.options);\n this.msWordPaste = new MsWordPaste(this);\n this.formatPainterEditor = new FormatPainterActions(this, options.formatPainterSettings);\n this.emojiPickerObj = new EmojiPickerAction(this);\n this.wireEvents();\n }\n EditorManager.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n this.observer.on(EVENTS.MODEL_CHANGED, this.onPropertyChanged, this);\n this.observer.on(EVENTS.MS_WORD_CLEANUP, this.onWordPaste, this);\n this.observer.on(EVENTS.ON_BEGIN, this.onBegin, this);\n };\n EditorManager.prototype.onWordPaste = function (e) {\n this.observer.notify(EVENTS.MS_WORD_CLEANUP_PLUGIN, e);\n };\n EditorManager.prototype.onPropertyChanged = function (props) {\n this.observer.notify(EVENTS.MODEL_CHANGED_PLUGIN, props);\n };\n EditorManager.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n EditorManager.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n EditorManager.prototype.onBegin = function (e) {\n this.observer.notify(EVENTS.SPACE_ACTION, e);\n };\n /* eslint-disable */\n /**\n * execCommand\n *\n * @param {ExecCommand} command - specifies the execution command\n * @param {T} value - specifes the value.\n * @param {Event} event - specifies the call back event\n * @param {Function} callBack - specifies the function\n * @param {string} text - specifies the string value\n * @param {T} exeValue - specifies the values to be executed\n * @param {string} selector - specifies the selector values\n * @returns {void}\n * @hidden\n\n */\n /* eslint-enable */\n EditorManager.prototype.execCommand = function (command, value, event, callBack, text, exeValue, selector, enterAction) {\n switch (command.toLowerCase()) {\n case 'lists':\n this.observer.notify(EVENTS.LIST_TYPE, { subCommand: value, event: event, callBack: callBack,\n selector: selector, item: exeValue, enterAction: enterAction });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack,\n selector: selector, exeValue: exeValue, enterAction: enterAction\n });\n break;\n case 'alignments':\n this.observer.notify(CONSTANT.ALIGNMENT_TYPE, {\n subCommand: value, event: event, callBack: callBack,\n selector: selector,\n value: exeValue\n });\n break;\n case 'indents':\n this.observer.notify(CONSTANT.INDENT_TYPE, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n case 'links':\n this.observer.notify(CONSTANT.LINK, { command: command, value: value, item: exeValue, event: event, callBack: callBack });\n break;\n case 'files':\n this.observer.notify(CONSTANT.IMAGE, {\n command: command, value: 'Image', item: exeValue, event: event, callBack: callBack, selector: selector\n });\n break;\n case 'images':\n this.observer.notify(CONSTANT.IMAGE, {\n command: command, value: value, item: exeValue, event: event, callBack: callBack, selector: selector\n });\n break;\n case 'audios':\n this.observer.notify(CONSTANT.AUDIO, {\n command: command, value: value, item: exeValue, event: event, callBack: callBack, selector: selector\n });\n break;\n case 'videos':\n this.observer.notify(CONSTANT.VIDEO, {\n command: command, value: value, item: exeValue, event: event, callBack: callBack, selector: selector\n });\n break;\n case 'table':\n switch (value.toString().toLocaleLowerCase()) {\n case 'createtable':\n this.observer.notify(CONSTANT.TABLE, { item: exeValue, event: event, callBack: callBack, enterAction: enterAction });\n break;\n case 'insertrowbefore':\n case 'insertrowafter':\n this.observer.notify(CONSTANT.INSERT_ROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'insertcolumnleft':\n case 'insertcolumnright':\n this.observer.notify(CONSTANT.INSERT_COLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deleterow':\n this.observer.notify(CONSTANT.DELETEROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deletecolumn':\n this.observer.notify(CONSTANT.DELETECOLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableremove':\n this.observer.notify(CONSTANT.REMOVETABLE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableheader':\n this.observer.notify(CONSTANT.TABLEHEADER, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'aligntop':\n case 'alignmiddle':\n case 'alignbottom':\n this.observer.notify(CONSTANT.TABLE_VERTICAL_ALIGN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'merge':\n this.observer.notify(CONSTANT.TABLE_MERGE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'horizontalsplit':\n this.observer.notify(CONSTANT.TABLE_HORIZONTAL_SPLIT, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'verticalsplit':\n this.observer.notify(CONSTANT.TABLE_VERTICAL_SPLIT, { item: exeValue, event: event, callBack: callBack });\n break;\n }\n break;\n case 'font':\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.SELECTION_TYPE, { subCommand: value, event: event, callBack: callBack, value: text, selector: selector, enterAction: enterAction });\n break;\n case 'inserthtml':\n this.observer.notify(CONSTANT.INSERTHTML_TYPE, { subCommand: value, callBack: callBack, value: text, enterAction: enterAction });\n break;\n case 'inserttext':\n this.observer.notify(CONSTANT.INSERT_TEXT_TYPE, { subCommand: value, callBack: callBack, value: text });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_TYPE, { subCommand: value, event: event, callBack: callBack, selector: selector, enterAction: enterAction });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n case 'formatpainter':\n this.observer.notify(EVENTS.FORMAT_PAINTER_ACTIONS, { item: exeValue, subCommand: value, event: event, callBack: callBack });\n break;\n case 'emojipicker':\n this.observer.notify(EVENTS.EMOJI_PICKER_ACTIONS, { item: exeValue, subCommand: value, value: text,\n event: event, callBack: callBack });\n }\n };\n return EditorManager;\n}());\nexport { EditorManager };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Formatter } from './formatter';\nimport { EditorManager } from './../../editor-manager/base/editor-manager';\nimport { extend } from '@syncfusion/ej2-base';\nimport { htmlKeyConfig } from './../../common/config';\n/**\n * HTML adapter\n *\n * @hidden\n\n */\nvar HTMLFormatter = /** @class */ (function (_super) {\n __extends(HTMLFormatter, _super);\n function HTMLFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (_this.currentDocument && _this.element) {\n _this.updateFormatter(_this.element, _this.currentDocument, options.options, options.formatPainterSettings);\n }\n return _this;\n }\n HTMLFormatter.prototype.initialize = function () {\n this.keyConfig = htmlKeyConfig;\n };\n /**\n * Update the formatter of RichTextEditor\n *\n * @param {Element} editElement - specifies the edit element.\n * @param {Document} doc - specifies the doucment\n * @param {number} options - specifies the options\n * @param {FormatPainterSettingsModel} formatPainterSettings - specifies the format painter settings\n * @returns {void}\n * @hidden\n\n */\n HTMLFormatter.prototype.updateFormatter = function (editElement, doc, options, formatPainterSettings) {\n if (editElement && doc) {\n this.editorManager = new EditorManager({\n document: doc,\n editableElement: editElement,\n options: options,\n formatPainterSettings: formatPainterSettings\n });\n }\n };\n return HTMLFormatter;\n}(Formatter));\nexport { HTMLFormatter };\n","import { IsFormatted } from './isformatted';\nimport * as CONSTANT from './../base/constant';\nimport { NodeSelection } from './../../selection/index';\nimport { getDefaultHtmlTbStatus } from './../../common/util';\n/**\n * Update Toolbar Status\n *\n * @hidden\n\n */\nexport var statusCollection = getDefaultHtmlTbStatus();\nvar ToolbarStatus = /** @class */ (function () {\n function ToolbarStatus() {\n }\n /**\n * get method\n *\n * @param {Document} docElement - specifies the document element\n * @param {Node} targetNode - specifies the target node\n * @param {string[]} formatNode - specifies the format node\n * @param {string[]} fontSize - specifies the font size\n * @param {string[]} fontName - specifies the font name.\n * @param {Node} documentNode - specifies the document node.\n * @returns {IToolbarStatus} - returns the toolbar status\n * @hidden\n\n */\n ToolbarStatus.get = function (docElement, targetNode, formatNode, fontSize, fontName, documentNode) {\n var formatCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeSelection = new NodeSelection();\n var range = nodeSelection.getRange(docElement);\n var nodes = documentNode ? [documentNode] : range.collapsed ? nodeSelection.getNodeCollection(range) :\n nodeSelection.getSelectionNodeCollectionBr(range);\n var nodesLength = nodes.length;\n var isNodeChanged = false;\n for (var index = 0; index < nodes.length; index++) {\n while (nodes[index].nodeType === 3 && range.startContainer.nodeType === 3 && nodes[index].parentNode &&\n nodes[index].parentNode.lastElementChild && nodes[index].parentNode.lastElementChild.nodeName !== 'BR' &&\n (this.getImmediateBlockNode(nodes[index].parentNode)).textContent.replace(/\\u200B/g, '').length === 0 &&\n range.startContainer.textContent.replace(/\\u200B/g, '').length === 0 &&\n nodeSelection.get(docElement).toString().replace(/\\u200B/g, '').length === 0) {\n nodes[index] = nodes[index].parentNode.lastElementChild.firstChild;\n isNodeChanged = true;\n }\n if (isNodeChanged && nodes[index]) {\n nodeSelection.setCursorPoint(docElement, nodes[index], nodes[index].textContent.length);\n isNodeChanged = false;\n }\n if ((nodes[index].nodeName !== 'BR' && nodes[index].nodeType !== 3) ||\n (nodesLength > 1 && nodes[index].nodeType === 3 && nodes[index].textContent.trim() === '')) {\n nodes.splice(index, 1);\n index--;\n }\n }\n for (var index = 0; index < nodes.length; index++) {\n // eslint-disable-next-line max-len\n formatCollection = this.getFormatParent(docElement, formatCollection, nodes[index], targetNode, formatNode, fontSize, fontName);\n if ((index === 0 && formatCollection.bold) || !formatCollection.bold) {\n nodeCollection.bold = formatCollection.bold;\n }\n if ((index === 0 && formatCollection.insertcode) || !formatCollection.insertcode) {\n nodeCollection.insertcode = formatCollection.insertcode;\n }\n if ((index === 0 && formatCollection.italic) || !formatCollection.italic) {\n nodeCollection.italic = formatCollection.italic;\n }\n if ((index === 0 && formatCollection.underline) || !formatCollection.underline) {\n nodeCollection.underline = formatCollection.underline;\n }\n if ((index === 0 && formatCollection.strikethrough) || !formatCollection.strikethrough) {\n nodeCollection.strikethrough = formatCollection.strikethrough;\n }\n if ((index === 0 && formatCollection.superscript) || !formatCollection.superscript) {\n nodeCollection.superscript = formatCollection.superscript;\n }\n if ((index === 0 && formatCollection.subscript) || !formatCollection.subscript) {\n nodeCollection.subscript = formatCollection.subscript;\n }\n if ((index === 0 && formatCollection.fontcolor) || !formatCollection.fontcolor) {\n nodeCollection.fontcolor = formatCollection.fontcolor;\n }\n if ((index === 0 && formatCollection.fontname) || !formatCollection.fontname) {\n nodeCollection.fontname = formatCollection.fontname;\n }\n if ((index === 0 && formatCollection.fontsize) || !formatCollection.fontsize) {\n nodeCollection.fontsize = formatCollection.fontsize;\n }\n if ((index === 0 && formatCollection.backgroundcolor) || !formatCollection.backgroundcolor) {\n nodeCollection.backgroundcolor = formatCollection.backgroundcolor;\n }\n if ((index === 0 && formatCollection.orderedlist) || !formatCollection.orderedlist) {\n nodeCollection.orderedlist = formatCollection.orderedlist;\n }\n if ((index === 0 && formatCollection.unorderedlist) || !formatCollection.unorderedlist) {\n nodeCollection.unorderedlist = formatCollection.unorderedlist;\n }\n if ((index === 0 && formatCollection.alignments) || !formatCollection.alignments) {\n nodeCollection.alignments = formatCollection.alignments;\n }\n if ((index === 0 && formatCollection.formats) || !formatCollection.formats) {\n nodeCollection.formats = formatCollection.formats;\n }\n if ((index === 0 && formatCollection.createlink) || !formatCollection.createlink) {\n nodeCollection.createlink = formatCollection.createlink;\n }\n if ((index === 0 && formatCollection.numberFormatList) || !formatCollection.numberFormatList) {\n nodeCollection.numberFormatList = formatCollection.numberFormatList;\n }\n if ((index === 0 && formatCollection.bulletFormatList) || !formatCollection.bulletFormatList) {\n nodeCollection.bulletFormatList = formatCollection.bulletFormatList;\n }\n formatCollection = JSON.parse(JSON.stringify(statusCollection));\n }\n return nodeCollection;\n };\n ToolbarStatus.getImmediateBlockNode = function (node) {\n do {\n node = node.parentNode;\n } while (node && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) < 0);\n return node;\n };\n ToolbarStatus.getFormatParent = function (docElement, formatCollection, node, targetNode, formatNode, fontSize, fontName) {\n if (targetNode.contains(node) ||\n (node.nodeType === 3 && targetNode.nodeType !== 3 && targetNode.contains(node.parentNode))) {\n do {\n formatCollection = this.isFormattedNode(docElement, formatCollection, node, formatNode, fontSize, fontName);\n node = node.parentNode;\n } while (node && (node !== targetNode));\n }\n return formatCollection;\n };\n ToolbarStatus.isFormattedNode = function (docElement, formatCollection, node, formatNode, fontSize, fontName) {\n if (!formatCollection.bold) {\n formatCollection.bold = IsFormatted.isBold(node);\n }\n if (!formatCollection.italic) {\n formatCollection.italic = IsFormatted.isItalic(node);\n }\n if (!formatCollection.underline) {\n formatCollection.underline = IsFormatted.isUnderline(node);\n }\n if (!formatCollection.strikethrough) {\n formatCollection.strikethrough = IsFormatted.isStrikethrough(node);\n }\n if (!formatCollection.superscript) {\n formatCollection.superscript = IsFormatted.isSuperscript(node);\n }\n if (!formatCollection.subscript) {\n formatCollection.subscript = IsFormatted.isSubscript(node);\n }\n if (!formatCollection.fontcolor) {\n formatCollection.fontcolor = this.isFontColor(docElement, node);\n }\n if (!formatCollection.fontname) {\n formatCollection.fontname = this.isFontName(docElement, node, fontName);\n }\n if (!formatCollection.fontsize) {\n formatCollection.fontsize = this.isFontSize(docElement, node, fontSize);\n }\n if (!formatCollection.backgroundcolor) {\n formatCollection.backgroundcolor = this.isBackgroundColor(node);\n }\n if (!formatCollection.orderedlist) {\n formatCollection.orderedlist = this.isOrderedList(node);\n }\n if (!formatCollection.unorderedlist) {\n formatCollection.unorderedlist = this.isUnorderedList(node);\n }\n if (!formatCollection.alignments) {\n formatCollection.alignments = this.isAlignment(node);\n }\n if (!formatCollection.formats) {\n formatCollection.formats = this.isFormats(node, formatNode);\n if (formatCollection.formats === 'pre') {\n formatCollection.insertcode = true;\n }\n }\n if (!formatCollection.createlink) {\n formatCollection.createlink = this.isLink(node);\n }\n if (!formatCollection.numberFormatList) {\n formatCollection.numberFormatList = this.isNumberFormatList(node);\n }\n if (!formatCollection.bulletFormatList) {\n formatCollection.bulletFormatList = this.isBulletFormatList(node);\n }\n return formatCollection;\n };\n ToolbarStatus.isFontColor = function (docElement, node) {\n var color = node.style && node.style.color;\n if ((color === null || color === undefined || color === '') && node.nodeType !== 3) {\n color = this.getComputedStyle(docElement, node, 'color');\n }\n if (color !== null && color !== '' && color !== undefined) {\n return color;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isLink = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'a') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (backColor !== null && backColor !== '' && backColor !== undefined) {\n return backColor;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontSize = function (docElement, node, fontSize) {\n var size = node.style && node.style.fontSize;\n if ((size === null || size === undefined || size === '') && node.nodeType !== 3 &&\n node.parentElement.classList.contains('e-content')) {\n size = this.getComputedStyle(docElement, node, 'font-size');\n }\n if ((size !== null && size !== '' && size !== undefined)\n && (fontSize === null || fontSize === undefined || (fontSize.indexOf(size) > -1))) {\n return size;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontName = function (docElement, node, fontName) {\n var name = node.style && node.style.fontFamily;\n if ((name === null || name === undefined || name === '') && node.nodeType !== 3) {\n name = this.getComputedStyle(docElement, node, 'font-family');\n }\n var index = null;\n if ((name !== null && name !== '' && name !== undefined)\n && (fontName === null || fontName === undefined || (fontName.filter(function (value, pos) {\n // eslint-disable-next-line\n var pattern = new RegExp(name, 'i');\n if ((value.replace(/\"/g, '').replace(/ /g, '').toLowerCase() === name.replace(/\"/g, '').replace(/ /g, '').toLowerCase()) ||\n (value.split(',')[0] && value.split(',')[0].search(pattern) > -1)) {\n index = pos;\n }\n }) && (index !== null)))) {\n // eslint-disable-next-line\n return (index !== null) ? fontName[index] : name.replace(/\"/g, '');\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isOrderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ol') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isUnorderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ul') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isAlignment = function (node) {\n var align = node.style && node.style.textAlign;\n if (align === 'left') {\n return 'justifyleft';\n }\n else if (align === 'center') {\n return 'justifycenter';\n }\n else if (align === 'right') {\n return 'justifyright';\n }\n else if (align === 'justify') {\n return 'justifyfull';\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFormats = function (node, formatNode) {\n if (((formatNode === undefined || formatNode === null)\n && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) > -1)\n || (formatNode !== null && formatNode !== undefined\n && formatNode.indexOf(node.nodeName.toLocaleLowerCase()) > -1)) {\n return node.nodeName.toLocaleLowerCase();\n }\n else {\n return null;\n }\n };\n ToolbarStatus.getComputedStyle = function (docElement, node, prop) {\n return docElement.defaultView.getComputedStyle(node, null).getPropertyValue(prop);\n };\n ToolbarStatus.isNumberFormatList = function (node) {\n var list = node.style && node.style.listStyleType;\n if (list === 'lower-alpha') {\n return 'Lower Alpha';\n }\n else if (list === 'number') {\n return 'Number';\n }\n else if (list === 'upper-alpha') {\n return 'Upper Alpha';\n }\n else if (list === 'lower-roman') {\n return 'Lower Roman';\n }\n else if (list === 'upper-roman') {\n return 'Upper Roman';\n }\n else if (list === 'lower-greek') {\n return 'Lower Greek';\n }\n else if (list === 'none') {\n return 'None';\n }\n else if (this.isOrderedList(node)) {\n return true;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isBulletFormatList = function (node) {\n var list = node.style && node.style.listStyleType;\n if (list === 'circle') {\n return 'Circle';\n }\n else if (list === 'square') {\n return 'Square';\n }\n else if (list === 'none') {\n return 'None';\n }\n else if (list === 'disc') {\n return 'Disc';\n }\n else if (this.isUnorderedList(node)) {\n return true;\n }\n else {\n return null;\n }\n };\n return ToolbarStatus;\n}());\nexport { ToolbarStatus };\n","import * as events from '../base/constant';\nimport { ToolbarStatus } from '../../editor-manager/plugin/toolbar-status';\nimport { getDefaultHtmlTbStatus } from '../../common/util';\n/**\n * HtmlToolbarStatus module for refresh the toolbar status\n */\nvar HtmlToolbarStatus = /** @class */ (function () {\n function HtmlToolbarStatus(parent) {\n this.parent = parent;\n this.toolbarStatus = this.prevToolbarStatus = getDefaultHtmlTbStatus();\n this.addEventListener();\n }\n HtmlToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n HtmlToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n HtmlToolbarStatus.prototype.onRefreshHandler = function (args) {\n if (this.parent.readonly) {\n return;\n }\n var fontsize = [];\n var fontName = [];\n var formats = [];\n this.parent.fontSize.items.forEach(function (item) {\n fontsize.push(item.value);\n });\n this.parent.fontFamily.items.forEach(function (item) {\n fontName.push(item.value);\n });\n this.parent.format.types.forEach(function (item) {\n formats.push(item.value.toLocaleLowerCase());\n });\n this.toolbarStatus = ToolbarStatus.get(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel(), formats, fontsize, fontName, args.documentNode);\n var tbStatusString = JSON.stringify(this.toolbarStatus);\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n if (JSON.stringify(this.prevToolbarStatus) !== tbStatusString) {\n this.parent.notify(events.updateTbItemsStatus, { html: JSON.parse(tbStatusString), markdown: null });\n this.prevToolbarStatus = JSON.parse(tbStatusString);\n }\n };\n return HtmlToolbarStatus;\n}());\nexport { HtmlToolbarStatus };\n","import { getEditValue } from '../base/util';\n/**\n * Content module is used to render Rich Text Editor content\n *\n * @hidden\n\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n *\n * @param {IRichTextEditor} parent - specifies the parent element.\n * @param {ServiceLocator} serviceLocator - specifies the service.\n * @returns {void}\n */\n function ContentRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n /**\n * The function is used to render Rich Text Editor content div\n *\n * @returns {void}\n * @hidden\n\n */\n ContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { className: 'e-rte-content', id: this.parent.getID() + 'rte-view' });\n var rteContent = getEditValue(rteObj.value, rteObj);\n this.editableElement = this.parent.createElement('div', {\n className: 'e-content',\n id: this.parent.getID() + '_rte-edit-view',\n attrs: {\n 'contenteditable': 'true'\n },\n innerHTML: rteContent\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n *\n * @returns {Element} - specifies the element.\n * @hidden\n\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n *\n * @returns {Element} - specifies the return element.\n * @hidden\n\n */\n ContentRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n *\n * @returns {string} - specifies the string element.\n */\n ContentRender.prototype.getText = function () {\n var textString = this.getEditPanel().innerText;\n return textString === '\\n' ? '' : textString;\n };\n /**\n * Set the content div element of RichTextEditor\n *\n * @param {Element} panel - specifies the panel element.\n * @returns {void}\n * @hidden\n\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n *\n * @returns {Document} - specifies the document.\n * @hidden\n\n */\n ContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ContentRender } from '../renderer/content-renderer';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getEditValue } from '../base/util';\nvar IFRAMEHEADER = \"\\n \\n \\n \\n \\n \\n \";\n/**\n * Content module is used to render Rich Text Editor content\n *\n * @hidden\n\n */\nvar IframeContentRender = /** @class */ (function (_super) {\n __extends(IframeContentRender, _super);\n function IframeContentRender() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * The function is used to render Rich Text Editor iframe\n *\n * @hidden\n\n */\n IframeContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var rteContent = getEditValue(rteObj.value, rteObj);\n var iFrameBodyContent = '' +\n rteContent + '';\n var iFrameContent = IFRAMEHEADER + iFrameBodyContent;\n var iframe = this.parent.createElement('iframe', {\n id: this.parent.getID() + '_rte-view',\n className: 'e-rte-content',\n styles: 'display:block;',\n attrs: { 'srcdoc': iFrameContent }\n });\n this.setPanel(iframe);\n rteObj.element.appendChild(iframe);\n iframe.contentDocument.body.id = this.parent.getID() + '_rte-edit-view';\n iframe.contentDocument.body.setAttribute('aria-owns', this.parent.getID());\n iframe.contentDocument.open();\n iFrameContent = this.setThemeColor(iFrameContent, { color: '#333' });\n iframe.contentDocument.write(iFrameContent);\n iframe.contentDocument.close();\n if (rteObj.enableRtl) {\n this.contentPanel.contentDocument.body.setAttribute('class', 'e-rtl');\n }\n };\n IframeContentRender.prototype.setThemeColor = function (content, styles) {\n var fontColor = getComputedStyle(this.parent.element, '.e-richtexteditor').getPropertyValue('color');\n return content.replace(styles.color, fontColor);\n };\n /**\n * Get the editable element of RichTextEditor\n *\n * @returns {Element} - specifies the element.\n * @hidden\n\n */\n IframeContentRender.prototype.getEditPanel = function () {\n var editNode;\n if (!isNullOrUndefined(this.contentPanel.contentDocument)) {\n editNode = this.contentPanel.contentDocument.body;\n }\n else {\n editNode = this.parent.inputElement;\n }\n return editNode;\n };\n /**\n * Get the document of RichTextEditor\n *\n * @returns {void}\n * @hidden\n\n */\n IframeContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return IframeContentRender;\n}(ContentRender));\nexport { IframeContentRender };\n","import { select, detach, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getIndex, toObjectLowerCase } from '../base/util';\nimport { templateItems, tools } from '../models/items';\n/**\n * `Color Picker` module is used to handle ColorPicker actions.\n */\nvar ColorPickerInput = /** @class */ (function () {\n function ColorPickerInput(parent, serviceLocator) {\n this.tools = {};\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = tools;\n }\n }\n ColorPickerInput.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n /**\n * renderColorPickerInput method\n *\n * @param {IColorPickerRenderArgs} args - specify the arguments.\n * @returns {void}\n * @hidden\n\n */\n ColorPickerInput.prototype.renderColorPickerInput = function (args) {\n var _this = this;\n this.initializeInstance();\n var suffixID = args.containerType;\n var tbElement = args.container;\n var targetID;\n var options;\n templateItems.forEach(function (item) {\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'fontcolor': {\n targetID = _this.parent.getID() + '_' + suffixID + '_FontColor_Target';\n var fontNode = _this.parent.createElement('input');\n fontNode.id = targetID;\n fontNode.classList.add(classes.CLS_FONT_COLOR_TARGET);\n if (!isNullOrUndefined(_this.parent.cssClass)) {\n var allClassName = _this.parent.cssClass.split(' ');\n for (var i = 0; i < allClassName.length; i++) {\n if (allClassName[i].trim() !== '') {\n fontNode.classList.add(allClassName[i]);\n }\n }\n }\n document.body.appendChild(fontNode);\n options = {\n cssClass: _this.tools[item.toLocaleLowerCase()].icon\n + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS + ' ' + _this.parent.cssClass,\n value: _this.tools[item.toLocaleLowerCase()].value,\n command: _this.tools[item.toLocaleLowerCase()].command,\n subCommand: _this.tools[item.toLocaleLowerCase()].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_FontColor', tbElement),\n target: (targetID)\n };\n _this.fontColorPicker = _this.toolbarRenderer.renderColorPicker(options, 'fontcolor');\n _this.fontColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(options, 'fontcolor', _this.fontColorPicker);\n break;\n }\n case 'backgroundcolor': {\n targetID = _this.parent.getID() + '_' + suffixID + '_BackgroundColor_Target';\n var backNode = _this.parent.createElement('input');\n backNode.id = targetID;\n backNode.classList.add(classes.CLS_BACKGROUND_COLOR_TARGET);\n if (!isNullOrUndefined(_this.parent.cssClass)) {\n var allClassName = _this.parent.cssClass.split(' ');\n for (var i = 0; i < allClassName.length; i++) {\n if (allClassName[i].trim() !== '') {\n backNode.classList.add(allClassName[i]);\n }\n }\n }\n document.body.appendChild(backNode);\n options = {\n cssClass: _this.tools[item.toLocaleLowerCase()].icon\n + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS + ' ' + _this.parent.cssClass,\n value: _this.tools[item.toLocaleLowerCase()].value,\n command: _this.tools[item.toLocaleLowerCase()].command,\n subCommand: _this.tools[item.toLocaleLowerCase()].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_BackgroundColor', tbElement),\n target: (targetID)\n };\n _this.backgroundColorPicker = _this.toolbarRenderer.renderColorPicker(options, 'backgroundcolor');\n _this.backgroundColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(options, 'backgroundcolor', _this.backgroundColorPicker, _this.defaultColorPicker);\n break;\n }\n }\n }\n });\n if (this.parent.inlineMode.enable) {\n this.setCssClass({ cssClass: this.parent.cssClass });\n }\n };\n ColorPickerInput.prototype.destroy = function () {\n this.removeEventListener();\n this.destroyColorPicker();\n };\n /**\n * destroyColorPicker method\n *\n * @returns {void}\n * @hidden\n\n */\n ColorPickerInput.prototype.destroyColorPicker = function () {\n if (this.fontColorPicker && !this.fontColorPicker.isDestroyed) {\n this.fontColorPicker.destroy();\n }\n if (this.backgroundColorPicker && !this.backgroundColorPicker.isDestroyed) {\n this.backgroundColorPicker.destroy();\n }\n if (this.fontColorDropDown && !this.fontColorDropDown.isDestroyed) {\n var innerEle = this.fontColorDropDown.element.querySelector('.e-rte-color-content');\n if (innerEle) {\n detach(innerEle);\n }\n this.fontColorDropDown.destroy();\n }\n if (this.backgroundColorDropDown && !this.backgroundColorDropDown.isDestroyed) {\n var innerEle = this.backgroundColorDropDown.element.querySelector('.e-rte-color-content');\n if (innerEle) {\n this.defaultColorPicker = innerEle.children[0].style.borderBottomColor;\n detach(innerEle);\n }\n this.backgroundColorDropDown.destroy();\n }\n };\n ColorPickerInput.prototype.setRtl = function (args) {\n if (this.fontColorPicker) {\n this.fontColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.fontColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.backgroundColorPicker) {\n this.backgroundColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.backgroundColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n ColorPickerInput.prototype.setCssClass = function (e) {\n this.updateCss(this.fontColorPicker, this.fontColorDropDown, e);\n this.updateCss(this.backgroundColorPicker, this.backgroundColorDropDown, e);\n };\n ColorPickerInput.prototype.updateCss = function (colorPickerObj, dropDownObj, e) {\n if (colorPickerObj && e.cssClass) {\n if (isNullOrUndefined(e.oldCssClass)) {\n colorPickerObj.setProperties({ cssClass: (colorPickerObj.cssClass + ' ' + e.cssClass).trim() });\n dropDownObj.setProperties({ cssClass: (dropDownObj.cssClass + ' ' + e.cssClass).trim() });\n }\n else {\n colorPickerObj.setProperties({ cssClass: (colorPickerObj.cssClass.replace(e.oldCssClass, '').replace(' ', ' ').trim() + ' ' + e.cssClass).trim() });\n dropDownObj.setProperties({ cssClass: (dropDownObj.cssClass.replace(e.oldCssClass, '').replace(' ', ' ').trim() + ' ' + e.cssClass).trim() });\n }\n }\n };\n ColorPickerInput.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRenderComplete, this.renderColorPickerInput, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.destroyColorPicker, this.destroyColorPicker, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.bindCssClass, this.setCssClass, this);\n };\n ColorPickerInput.prototype.onPropertyChanged = function (model) {\n var newProp = model.newProp;\n var element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'fontColor':\n if (this.fontColorPicker) {\n for (var _b = 0, _c = Object.keys(newProp.fontColor); _b < _c.length; _b++) {\n var font = _c[_b];\n switch (font) {\n case 'default': {\n this.fontColorPicker.setProperties({ value: newProp.fontColor.default });\n element = this.fontColorDropDown.element;\n var fontBorder = element.querySelector('.' + this.tools['fontcolor'].icon);\n fontBorder.style.borderBottomColor = newProp.fontColor.default;\n break;\n }\n case 'mode':\n this.fontColorPicker.setProperties({ mode: newProp.fontColor.mode });\n break;\n case 'columns':\n this.fontColorPicker.setProperties({ columns: newProp.fontColor.columns });\n break;\n case 'colorCode':\n this.fontColorPicker.setProperties({ presetColors: newProp.fontColor.colorCode });\n break;\n case 'modeSwitcher':\n this.fontColorPicker.setProperties({ modeSwitcher: newProp.fontColor.modeSwitcher });\n break;\n }\n }\n }\n break;\n case 'backgroundColor':\n if (this.backgroundColorPicker) {\n for (var _d = 0, _e = Object.keys(newProp.backgroundColor); _d < _e.length; _d++) {\n var background = _e[_d];\n switch (background) {\n case 'default': {\n this.backgroundColorPicker.setProperties({ value: newProp.backgroundColor.default });\n element = this.backgroundColorDropDown.element;\n var backgroundBorder = element.querySelector('.' + this.tools['backgroundcolor'].icon);\n backgroundBorder.style.borderBottomColor = newProp.backgroundColor.default;\n break;\n }\n case 'mode':\n this.backgroundColorPicker.setProperties({ mode: newProp.backgroundColor.mode });\n break;\n case 'columns':\n this.backgroundColorPicker.setProperties({ columns: newProp.backgroundColor.columns });\n break;\n case 'colorCode':\n this.backgroundColorPicker.setProperties({ presetColors: newProp.backgroundColor.colorCode });\n break;\n case 'modeSwitcher':\n this.backgroundColorPicker.setProperties({ modeSwitcher: newProp.backgroundColor.modeSwitcher });\n break;\n }\n }\n }\n break;\n }\n }\n };\n ColorPickerInput.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRenderComplete, this.renderColorPickerInput);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroyColorPicker, this.destroyColorPicker);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.bindCssClass, this.setCssClass);\n };\n return ColorPickerInput;\n}());\nexport { ColorPickerInput };\n","import * as events from '../base/constant';\nimport { detach, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * XhtmlValidation module called when set enableXhtml as true\n */\nvar XhtmlValidation = /** @class */ (function () {\n function XhtmlValidation(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n XhtmlValidation.prototype.addEventListener = function () {\n this.parent.on(events.xhtmlValidation, this.enableXhtmlValidation, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n XhtmlValidation.prototype.removeEventListener = function () {\n this.parent.off(events.xhtmlValidation, this.enableXhtmlValidation);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n XhtmlValidation.prototype.enableXhtmlValidation = function () {\n if (this.parent.enableXhtml) {\n if (isNullOrUndefined(this.parent.inputElement)) {\n this.currentElement = this.parent.element;\n }\n else {\n this.currentElement = this.parent.inputElement;\n }\n this.clean(this.currentElement);\n this.ImageTags();\n this.removeTags();\n this.RemoveUnsupported();\n this.currentElement.innerHTML = this.selfEncloseValidation(this.currentElement.innerHTML, this.currentElement.innerText === '\\n' ?\n this.currentElement.innerText.length : this.currentElement.innerText.trim().length);\n this.parent.setProperties({ value: this.currentElement.innerHTML }, true);\n }\n };\n /**\n * @param {string} currentValue - specifies the string value.\n * @param {number} valueLength - specifies the length of the current value.\n * @returns {void}\n\n */\n XhtmlValidation.prototype.selfEncloseValidation = function (currentValue, valueLength) {\n if (valueLength === 0 && currentValue.indexOf('table') < 0 && currentValue.indexOf('img') < 0 &&\n currentValue !== '


    ' && currentValue !== '

    ' && currentValue !== '
    ') {\n var arrayValue = currentValue.split(' ');\n arrayValue[arrayValue.length - 1] = '​' + arrayValue[arrayValue.length - 1];\n currentValue = arrayValue.join('');\n }\n currentValue = currentValue.replace(/
    /g, '
    ').replace(/
    /g, '
    ').replace(/ /g, ' ');\n var valueTemp;\n var valueDupe = [];\n var valueOriginal = [];\n var imgRegexp = [//gi, //gi, //gi, //gi, //gi,\n //gi, //gi, //gi, //gi, //gi,\n //gi, //gi];\n for (var j = 0; j < imgRegexp.length; j++) {\n valueTemp = imgRegexp[j].exec(currentValue);\n while ((valueTemp) !== null) {\n valueDupe.push(valueTemp[0].toString());\n valueTemp = imgRegexp[j].exec(currentValue);\n }\n valueOriginal = valueDupe.slice(0);\n for (var i = 0; i < valueDupe.length; i++) {\n if (valueDupe[i].indexOf('/') === -1 || valueDupe[i].lastIndexOf('/') !== valueDupe[i].length - 2) {\n valueDupe[i] = valueDupe[i].substr(0, valueDupe[i].length - 1) + ' /' +\n valueDupe[i].substr(valueDupe[i].length - 1, valueDupe[i].length);\n }\n }\n for (var g = 0; g <= valueDupe.length - 1; g++) {\n currentValue = currentValue.replace(valueOriginal[g], valueDupe[g]);\n }\n }\n return currentValue;\n };\n XhtmlValidation.prototype.clean = function (node) {\n for (var n = 0; n < node.childNodes.length; n++) {\n var child = node.childNodes[n];\n if (child.nodeType === 8 || child.nodeName === 'V:IMAGE') {\n node.removeChild(child);\n n--;\n }\n else if (child.nodeType === 1) {\n this.clean(child);\n }\n }\n return this.currentElement.innerHTML;\n };\n XhtmlValidation.prototype.ImageTags = function () {\n var imgNodes = this.currentElement.querySelectorAll('IMG');\n for (var i = imgNodes.length - 1; i >= 0; i--) {\n if (!imgNodes[i].hasAttribute('alt')) {\n var img = imgNodes[i];\n img.setAttribute('alt', '');\n }\n }\n };\n XhtmlValidation.prototype.removeTags = function () {\n var removeAttribute = [['br', 'ul'], ['br', 'ol'], ['table', 'span'], ['div', 'span'], ['p', 'span']];\n for (var i = 0; i < removeAttribute.length; i++) {\n this.RemoveElementNode(removeAttribute[i][0], removeAttribute[i][1]);\n }\n };\n XhtmlValidation.prototype.RemoveElementNode = function (rmvNode, parentNode) {\n var parentArray = this.currentElement.querySelectorAll(parentNode);\n for (var i = 0; i < parentArray.length; i++) {\n var rmvArray = parentArray[i].querySelectorAll(rmvNode);\n for (var j = rmvArray.length; j > 0; j--) {\n detach(rmvArray[j - 1]);\n }\n }\n };\n XhtmlValidation.prototype.RemoveUnsupported = function () {\n var underlineEle = this.currentElement.querySelectorAll('u');\n for (var i = underlineEle.length - 1; i >= 0; i--) {\n var spanEle = this.parent.createElement('span');\n spanEle.style.textDecoration = 'underline';\n spanEle.innerHTML = underlineEle[i].innerHTML;\n underlineEle[i].parentNode.insertBefore(spanEle, underlineEle[i]);\n detach(underlineEle[i]);\n }\n var strongEle = this.currentElement.querySelectorAll('strong');\n for (var i = strongEle.length - 1; i >= 0; i--) {\n var boldEle = this.parent.createElement('b');\n boldEle.innerHTML = strongEle[i].innerHTML;\n strongEle[i].parentNode.insertBefore(boldEle, strongEle[i]);\n detach(strongEle[i]);\n }\n var attrArray = ['language', 'role', 'target', 'contenteditable', 'cellspacing',\n 'cellpadding', 'border', 'valign', 'colspan'];\n for (var i = 0; i <= attrArray.length; i++) {\n this.RemoveAttributeByName(attrArray[i]);\n }\n };\n XhtmlValidation.prototype.RemoveAttributeByName = function (attrName) {\n if (this.currentElement.firstChild !== null) {\n if (this.currentElement.firstChild.nodeType !== 3) {\n for (var i = 0; i < this.currentElement.childNodes.length; i++) {\n var ele = this.currentElement.childNodes[i];\n if (ele.nodeType !== 3 && ele.nodeName !== 'TABLE' && ele.nodeName !== 'TBODY' && ele.nodeName !== 'THEAD' &&\n ele.nodeName !== 'TH' && ele.nodeName !== 'TR' && ele.nodeName !== 'TD') {\n if (ele.hasAttribute(attrName)) {\n ele.removeAttribute(attrName);\n }\n if (ele.hasChildNodes()) {\n for (var j = 0; j < ele.childNodes.length; j++) {\n var childEle = ele.childNodes[j];\n if (childEle.nodeType !== 3 && childEle.nodeName !== 'TABLE' && childEle.nodeName !== 'TBODY' &&\n childEle.nodeName !== 'THEAD' && childEle.nodeName !== 'TH' && childEle.nodeName !== 'TR' &&\n childEle.nodeName !== 'TD' && childEle.hasAttribute(attrName) &&\n !childEle.classList.contains('e-mention-chip')) {\n childEle.removeAttribute(attrName);\n }\n if (childEle.hasChildNodes()) {\n for (var k = 0; k < childEle.childNodes.length; k++) {\n if (childEle.childNodes[k].nodeType !== 3 && childEle.childNodes[k].nodeName !== 'TABLE' &&\n childEle.childNodes[k].nodeName !== 'TBODY' && childEle.childNodes[k].nodeName !== 'THEAD' &&\n childEle.childNodes[k].nodeName !== 'TH' && childEle.childNodes[k].nodeName !== 'TR'\n && childEle.childNodes[k].nodeName !== 'TD'\n && childEle.childNodes[k].hasAttribute(attrName)) {\n childEle.childNodes[k].removeAttribute(attrName);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n };\n return XhtmlValidation;\n}());\nexport { XhtmlValidation };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, closest, attributes, removeClass, addClass, Browser, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { HTMLFormatter } from '../formatter/html-formatter';\nimport { RenderType } from '../base/enum';\nimport * as classes from '../base/classes';\nimport { HtmlToolbarStatus } from './html-toolbar-status';\nimport { IframeContentRender } from '../renderer/iframe-content-renderer';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { ColorPickerInput } from './color-picker';\nimport { NodeSelection } from '../../selection/selection';\nimport { InsertHtml } from '../../editor-manager/plugin/inserthtml';\nimport { getTextNodesUnder, sanitizeHelper, getDefaultValue } from '../base/util';\nimport { isIDevice } from '../../common/util';\nimport { XhtmlValidation } from './xhtml-validation';\nimport { ON_BEGIN } from './../../common/constant';\n/**\n * `HtmlEditor` module is used to HTML editor\n */\nvar HtmlEditor = /** @class */ (function () {\n function HtmlEditor(parent, serviceLocator) {\n this.rangeCollection = [];\n this.isImageDelete = false;\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.xhtmlValidation = new XhtmlValidation(parent);\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n HtmlEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {string} value - specifies the string value\n * @returns {void}\n * @hidden\n\n */\n HtmlEditor.prototype.sanitizeHelper = function (value) {\n value = sanitizeHelper(value, this.parent);\n return value;\n };\n HtmlEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.nodeSelectionObj = new NodeSelection();\n this.colorPickerModule = new ColorPickerInput(this.parent, this.locator);\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.htmlToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.keyUp, this.onKeyUp, this);\n this.parent.on(events.renderColorPicker, this.renderColorPicker, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.selectRange, this.selectRange, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n this.parent.on(events.readOnlyMode, this.updateReadOnly, this);\n this.parent.on(events.paste, this.onPaste, this);\n this.parent.on(events.tableclass, this.isTableClassAdded, this);\n };\n HtmlEditor.prototype.updateReadOnly = function () {\n if (this.parent.readonly) {\n attributes(this.parent.contentModule.getEditPanel(), { contenteditable: 'false' });\n addClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n else {\n attributes(this.parent.contentModule.getEditPanel(), { contenteditable: 'true' });\n removeClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n };\n HtmlEditor.prototype.onSelectionSave = function () {\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n };\n HtmlEditor.prototype.onSelectionRestore = function (e) {\n this.parent.isBlur = false;\n this.contentRenderer.getEditPanel().focus();\n if (isNullOrUndefined(e.items) || e.items) {\n this.saveSelection.restore();\n }\n };\n HtmlEditor.prototype.isTableClassAdded = function () {\n var tableElement = this.parent.inputElement.querySelectorAll('table');\n for (var i = 0; i < tableElement.length; i++) {\n if (!tableElement[i].classList.contains('e-rte-table')) {\n tableElement[i].classList.add('e-rte-table');\n }\n }\n };\n HtmlEditor.prototype.onKeyUp = function (e) {\n var args = e.args;\n var restrictKeys = [8, 9, 13, 16, 17, 18, 20, 27, 37, 38, 39, 40, 44, 45, 46, 91,\n 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123];\n var range = this.parent.getRange();\n // eslint-disable-next-line\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var pointer;\n var isRootParent = false;\n if (restrictKeys.indexOf(args.keyCode) < 0 && !args.shiftKey && !args.ctrlKey && !args.altKey) {\n pointer = range.startOffset;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n range.startContainer.nodeName === '#text' ? range.startContainer.parentElement !== this.parent.inputElement ? range.startContainer.parentElement.classList.add('currentStartMark')\n : isRootParent = true : range.startContainer.classList.add('currentStartMark');\n if (range.startContainer.textContent.charCodeAt(0) === 8203) {\n var previousLength_1 = range.startContainer.textContent.length;\n var previousRange = range.startOffset;\n range.startContainer.textContent = range.startContainer.textContent.replace(regEx, '');\n pointer = previousRange === 0 ? previousRange : previousRange - (previousLength_1 - range.startContainer.textContent.length);\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), range.startContainer, pointer);\n }\n var previousLength = this.parent.inputElement.innerHTML.length;\n var currentLength = this.parent.inputElement.innerHTML.replace(regEx, '').length;\n var focusNode = range.startContainer;\n if (previousLength > currentLength && !isRootParent) {\n var currentChild = this.parent.inputElement.firstChild;\n while (!isNOU(currentChild) && currentChild.textContent.replace(regEx, '').trim().length > 0) {\n currentChild.innerHTML = currentChild.innerHTML.replace(regEx, '');\n currentChild = currentChild.nextElementSibling;\n }\n var currentChildNode = this.parent.inputElement.querySelector('.currentStartMark').childNodes;\n if (currentChildNode.length > 1) {\n for (var i = 0; i < currentChildNode.length; i++) {\n if (currentChildNode[i].nodeName === '#text' && currentChildNode[i].textContent.length === 0) {\n detach(currentChildNode[i]);\n i--;\n }\n if (focusNode.textContent.replace(regEx, '') === currentChildNode[i].textContent) {\n pointer = focusNode.textContent.length > 1 ?\n (focusNode.textContent === currentChildNode[i].textContent ? pointer :\n pointer - (focusNode.textContent.length - focusNode.textContent.replace(regEx, '').length)) :\n focusNode.textContent.length;\n focusNode = currentChildNode[i];\n }\n }\n }\n else if (currentChildNode.length === 1) {\n if (focusNode.textContent.replace(regEx, '') === currentChildNode[0].textContent) {\n focusNode = currentChildNode[0];\n }\n }\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), focusNode, pointer);\n }\n var currentElem = this.parent.inputElement.querySelector('.currentStartMark');\n if (!isNOU(currentElem)) {\n currentElem.classList.remove('currentStartMark');\n if (currentElem.getAttribute('class').trim() === '') {\n currentElem.removeAttribute('class');\n }\n }\n if (!isNOU(range.startContainer.previousSibling) && !isNOU(range.startContainer.previousSibling.parentElement) &&\n range.startContainer.parentElement === range.startContainer.previousSibling.parentElement &&\n range.startContainer.previousSibling.textContent.charCodeAt(0) === 8203 &&\n range.startContainer.previousSibling.textContent.length <= 1) {\n range.startContainer.previousSibling.textContent = range.startContainer.previousSibling.textContent.replace(regEx, '');\n }\n if (range.endContainer.textContent.charCodeAt(range.endOffset) === 8203) {\n pointer = range.startOffset;\n range.endContainer.textContent = range.endContainer.textContent.replace(regEx, '');\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), range.startContainer, pointer);\n }\n }\n };\n HtmlEditor.prototype.onKeyDown = function (e) {\n var _this = this;\n var currentRange;\n var args = e.args;\n if (Browser.info.name === 'chrome') {\n currentRange = this.parent.getRange();\n this.backSpaceCleanup(e, currentRange);\n this.deleteCleanup(e, currentRange);\n }\n if (args.keyCode === 9 && this.parent.enableTabKey) {\n if (!isNOU(args.target) && isNullOrUndefined(closest(args.target, '.e-rte-toolbar'))) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var parentNode = this.nodeSelectionObj.getParentNodeCollection(range);\n if (!((parentNode[0].nodeName === 'LI' || closest(parentNode[0], 'li') ||\n closest(parentNode[0], 'table')) && range.startOffset === 0)) {\n args.preventDefault();\n if (!args.shiftKey) {\n InsertHtml.Insert(this.contentRenderer.getDocument(), '    ');\n this.rangeCollection.push(this.nodeSelectionObj.getRange(this.contentRenderer.getDocument()));\n }\n else if (this.rangeCollection.length > 0 &&\n this.rangeCollection[this.rangeCollection.length - 1].startContainer.textContent.length === 4) {\n var textCont = this.rangeCollection[this.rangeCollection.length - 1].startContainer;\n this.nodeSelectionObj.setSelectionText(this.contentRenderer.getDocument(), textCont, textCont, 0, textCont.textContent.length);\n InsertHtml.Insert(this.contentRenderer.getDocument(), document.createTextNode(''));\n this.rangeCollection.pop();\n }\n }\n }\n }\n if (e.args.action === 'space' ||\n e.args.action === 'enter' ||\n e.args.keyCode === 13) {\n this.spaceLink(e.args);\n if (this.parent.editorMode === 'HTML' && !this.parent.readonly) {\n var currentLength = this.parent.getText().trim().length;\n var selectionLength = this.parent.getSelection().length;\n var totalLength = (currentLength - selectionLength) + 1;\n if (!(this.parent.maxLength === -1 || totalLength <= this.parent.maxLength) &&\n e.args.keyCode === 13) {\n e.args.preventDefault();\n return;\n }\n else {\n this.parent.notify(events.enterHandler, { args: e.args });\n }\n }\n }\n if (e.args.action === 'space') {\n var currentRange_1 = this.parent.getRange();\n var editorValue = currentRange_1.startContainer.textContent.slice(0, currentRange_1.startOffset);\n var orderedList_1 = this.isOrderedList(editorValue);\n var unOrderedList = this.isUnOrderedList(editorValue);\n if (orderedList_1 && !unOrderedList || unOrderedList && !orderedList_1) {\n var eventArgs_1 = {\n callBack: null,\n event: e.args,\n name: 'keydown-handler'\n };\n var actionBeginArgs = {\n cancel: false,\n item: { command: 'Lists', subCommand: orderedList_1 ? 'OL' : 'UL' },\n name: 'actionBegin',\n originalEvent: e.args,\n requestType: orderedList_1 ? 'OL' : 'UL'\n };\n this.parent.trigger(events.actionBegin, actionBeginArgs, function (actionBeginArgs) {\n if (!actionBeginArgs.cancel) {\n _this.parent.formatter.editorManager.observer.notify(ON_BEGIN, eventArgs_1);\n _this.parent.trigger(events.actionComplete, {\n editorMode: _this.parent.editorMode,\n elements: _this.parent.formatter.editorManager.domNode.blockNodes(),\n event: e.args,\n name: events.actionComplete,\n range: _this.parent.getRange(),\n requestType: orderedList_1 ? 'OL' : 'UL'\n });\n }\n });\n }\n }\n if (Browser.info.name === 'chrome' && (!isNullOrUndefined(this.rangeElement) && !isNullOrUndefined(this.oldRangeElement) ||\n !isNullOrUndefined(this.deleteRangeElement) && !isNullOrUndefined(this.deleteOldRangeElement)) &&\n currentRange.startContainer.parentElement.tagName !== 'TD' && currentRange.startContainer.parentElement.tagName !== 'TH') {\n this.rangeElement = null;\n this.oldRangeElement = null;\n this.deleteRangeElement = null;\n this.deleteOldRangeElement = null;\n if (!this.isImageDelete) {\n args.preventDefault();\n }\n args.preventDefault();\n }\n };\n HtmlEditor.prototype.isOrderedList = function (editorValue) {\n editorValue = editorValue.replace(/\\u200B/g, '');\n var olListStartRegex = [/^[1]+[.]+$/, /^[i]+[.]+$/, /^[a]+[.]+$/];\n if (!isNullOrUndefined(editorValue)) {\n for (var i = 0; i < olListStartRegex.length; i++) {\n if (olListStartRegex[i].test(editorValue)) {\n return true;\n }\n }\n }\n return false;\n };\n HtmlEditor.prototype.isUnOrderedList = function (editorValue) {\n editorValue = editorValue.replace(/\\u200B/g, '');\n var ulListStartRegex = [/^[*]$/, /^[-]$/];\n if (!isNullOrUndefined(editorValue)) {\n for (var i = 0; i < ulListStartRegex.length; i++) {\n if (ulListStartRegex[i].test(editorValue)) {\n return true;\n }\n }\n }\n return false;\n };\n HtmlEditor.prototype.backSpaceCleanup = function (e, currentRange) {\n var isLiElement = false;\n var isPreviousNotContentEditable = true;\n if (!isNOU(currentRange.startContainer.previousSibling) &&\n currentRange.startContainer.previousSibling.nodeName === 'SPAN') {\n isPreviousNotContentEditable = currentRange.startContainer.previousSibling.contentEditable === 'false' ? false : true;\n }\n if (e.args.code === 'Backspace' && e.args.keyCode === 8 && currentRange.startOffset === 0 &&\n currentRange.endOffset === 0 && this.parent.getSelection().length === 0 && currentRange.startContainer.textContent.length > 0 &&\n currentRange.startContainer.parentElement.tagName !== 'TD' && currentRange.startContainer.parentElement.tagName !== 'TH' &&\n isPreviousNotContentEditable) {\n var checkNode = currentRange.startContainer.nodeName === '#text' ? currentRange.startContainer.parentElement : currentRange.startContainer;\n if ((!this.parent.formatter.editorManager.domNode.isBlockNode(checkNode) &&\n !isNOU(checkNode.previousSibling) && checkNode.previousSibling.nodeName === 'BR') ||\n (!isNOU(currentRange.startContainer.previousSibling) && currentRange.startContainer.previousSibling.nodeName === 'BR')) {\n return;\n }\n this.rangeElement = this.getRootBlockNode(currentRange.startContainer);\n if (this.rangeElement.tagName === 'OL' || this.rangeElement.tagName === 'UL') {\n var liElement = this.getRangeLiNode(currentRange.startContainer);\n if (liElement.previousElementSibling && liElement.previousElementSibling.childElementCount > 0) {\n this.oldRangeElement = liElement.previousElementSibling.lastElementChild.nodeName === 'BR' ?\n liElement.previousElementSibling : liElement.previousElementSibling.lastElementChild;\n if (!isNullOrUndefined(liElement.lastElementChild) && liElement.lastElementChild.nodeName !== 'BR') {\n this.rangeElement = liElement.lastElementChild;\n isLiElement = true;\n }\n else {\n this.rangeElement = liElement;\n }\n }\n }\n else if (this.rangeElement === this.parent.inputElement || this.rangeElement.tagName === 'TABLE' ||\n (!isNullOrUndefined(this.rangeElement.previousElementSibling) && this.rangeElement.previousElementSibling.tagName === 'TABLE')) {\n return;\n }\n else {\n this.oldRangeElement = this.rangeElement.previousElementSibling;\n }\n if (isNullOrUndefined(this.oldRangeElement)) {\n return;\n }\n else {\n if (this.oldRangeElement.tagName === 'OL' || this.oldRangeElement.tagName === 'UL') {\n this.oldRangeElement = this.oldRangeElement.lastElementChild.lastElementChild\n ? this.oldRangeElement.lastElementChild.lastElementChild :\n this.oldRangeElement.lastElementChild;\n }\n var lastNode = this.oldRangeElement.lastChild;\n while (lastNode.nodeType !== 3 && lastNode.nodeName !== '#text' &&\n lastNode.nodeName !== 'BR') {\n lastNode = lastNode.lastChild;\n }\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), \n // eslint-disable-next-line\n lastNode, lastNode.textContent.length);\n if (this.oldRangeElement.querySelectorAll('BR').length === 1) {\n detach(this.oldRangeElement.querySelector('BR'));\n }\n if (!isNullOrUndefined(this.rangeElement) && this.oldRangeElement !== this.rangeElement) {\n while (this.rangeElement.firstChild) {\n this.oldRangeElement.appendChild(this.rangeElement.childNodes[0]);\n }\n // eslint-disable-next-line\n !isLiElement ? detach(this.rangeElement) : detach(this.rangeElement.parentElement);\n this.oldRangeElement.normalize();\n }\n }\n }\n };\n HtmlEditor.prototype.deleteCleanup = function (e, currentRange) {\n var isLiElement = false;\n var liElement;\n var rootElement;\n if (e.args.code === 'Delete' && e.args.keyCode === 46 &&\n this.parent.contentModule.getText().trim().length !== 0 && this.parent.getSelection().length === 0 && currentRange.startContainer.parentElement.tagName !== 'TD' &&\n currentRange.startContainer.parentElement.tagName !== 'TH') {\n this.deleteRangeElement = rootElement = this.getRootBlockNode(currentRange.startContainer);\n if (this.deleteRangeElement.tagName === 'OL' || this.deleteRangeElement.tagName === 'UL') {\n liElement = this.getRangeLiNode(currentRange.startContainer);\n if (liElement.nextElementSibling && liElement.nextElementSibling.childElementCount > 0\n && !liElement.nextElementSibling.querySelector('BR')) {\n if (!isNullOrUndefined(liElement.lastElementChild)) {\n this.deleteRangeElement = liElement.lastElementChild;\n isLiElement = true;\n }\n else {\n this.deleteRangeElement = liElement;\n }\n }\n else {\n this.deleteRangeElement = this.getRangeElement(liElement);\n }\n }\n else if (this.deleteRangeElement.nodeType === 3 || (this.deleteRangeElement.tagName === 'TABLE' ||\n (!isNullOrUndefined(this.deleteRangeElement.nextElementSibling) && this.deleteRangeElement.nextElementSibling.tagName === 'TABLE'))) {\n return;\n }\n if (this.getCaretIndex(currentRange, this.deleteRangeElement) === this.deleteRangeElement.textContent.length) {\n if (!isNullOrUndefined(liElement)) {\n if (isLiElement || !isNullOrUndefined(liElement.nextElementSibling)) {\n this.deleteOldRangeElement = this.getRangeElement(liElement.nextElementSibling);\n }\n else {\n this.deleteOldRangeElement = rootElement.nextElementSibling;\n }\n }\n else {\n this.deleteOldRangeElement = this.deleteRangeElement.nextElementSibling;\n }\n if (isNullOrUndefined(this.deleteOldRangeElement)) {\n return;\n }\n else {\n if (currentRange.startOffset === 0 && currentRange.endOffset === 1 &&\n this.deleteRangeElement.childNodes[0].nodeName === 'IMG') {\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.parent.contentModule.getDocument(), this.deleteRangeElement, this.deleteRangeElement, 0, 1);\n this.isImageDelete = true;\n }\n else {\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), this.deleteRangeElement, this.deleteRangeElement.childNodes.length);\n this.isImageDelete = false;\n }\n if (this.deleteRangeElement.querySelector('BR')) {\n detach(this.deleteRangeElement.querySelector('BR'));\n }\n if (!isNullOrUndefined(this.deleteRangeElement) && (this.deleteOldRangeElement.tagName !== 'OL' && this.deleteOldRangeElement.tagName !== 'UL')\n && this.deleteOldRangeElement !== this.deleteRangeElement) {\n while (this.deleteOldRangeElement.firstChild) {\n this.deleteRangeElement.appendChild(this.deleteOldRangeElement.childNodes[0]);\n }\n if (!isLiElement) {\n detach(this.deleteOldRangeElement);\n }\n else {\n detach(this.deleteOldRangeElement.parentElement);\n }\n this.deleteRangeElement.normalize();\n }\n else {\n this.deleteRangeElement = null;\n this.deleteOldRangeElement = null;\n }\n }\n }\n else {\n this.deleteRangeElement = null;\n }\n }\n };\n HtmlEditor.prototype.getCaretIndex = function (currentRange, element) {\n var position = 0;\n if (this.parent.contentModule.getDocument().getSelection().rangeCount !== 0) {\n var preCaretRange = currentRange.cloneRange();\n preCaretRange.selectNodeContents(element);\n preCaretRange.setEnd(currentRange.endContainer, currentRange.endOffset);\n position = preCaretRange.toString().length;\n }\n return position;\n };\n HtmlEditor.prototype.getRangeElement = function (element) {\n var rangeElement = element.lastElementChild ? element.lastElementChild.tagName === 'BR' ?\n element.lastElementChild.previousElementSibling ? element.lastElementChild.previousElementSibling\n : element : element.lastElementChild : element;\n return rangeElement;\n };\n HtmlEditor.prototype.getRootBlockNode = function (rangeBlockNode) {\n // eslint-disable-next-line\n for (; rangeBlockNode && this.parent && this.parent.inputElement !== rangeBlockNode; rangeBlockNode = rangeBlockNode) {\n if (rangeBlockNode.parentElement === this.parent.inputElement) {\n break;\n }\n else {\n rangeBlockNode = rangeBlockNode.parentElement;\n }\n }\n return rangeBlockNode;\n };\n HtmlEditor.prototype.getRangeLiNode = function (rangeLiNode) {\n var node = rangeLiNode.parentElement;\n while (node !== this.parent.inputElement) {\n if (node.nodeType === 1 && node.tagName === 'LI') {\n break;\n }\n node = node.parentElement;\n }\n return node;\n };\n HtmlEditor.prototype.onPaste = function (e) {\n // eslint-disable-next-line\n var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (e.text.match(regex)) {\n if (e.isWordPaste) {\n return;\n }\n e.args.preventDefault();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n // eslint-disable-next-line\n var saveSelection = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n // eslint-disable-next-line\n var httpRegex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)))/gi);\n var wwwRegex = new RegExp(/([^\\S]|^)(((www\\.))(\\S+))/gi);\n var enterSplitText = e.text.split('\\n');\n var contentInnerElem = '';\n for (var i = 0; i < enterSplitText.length; i++) {\n if (enterSplitText[i].trim() === '') {\n contentInnerElem += getDefaultValue(this.parent);\n }\n else {\n var contentWithSpace = '';\n var spaceBetweenContent = true;\n var spaceSplit = enterSplitText[i].split(' ');\n for (var j = 0; j < spaceSplit.length; j++) {\n if (spaceSplit[j].trim() === '') {\n contentWithSpace += spaceBetweenContent ? ' ' : ' ';\n }\n else {\n spaceBetweenContent = false;\n contentWithSpace += spaceSplit[j] + ' ';\n }\n }\n if (i === 0) {\n contentInnerElem += '' + contentWithSpace.trim() + '';\n }\n else {\n contentInnerElem += '

    ' + contentWithSpace.trim() + '

    ';\n }\n }\n }\n var divElement = this.parent.createElement('div');\n divElement.setAttribute('class', 'pasteContent');\n divElement.style.display = 'inline';\n divElement.innerHTML = contentInnerElem.replace('¶', '&para');\n var paraElem = divElement.querySelectorAll('span, p');\n for (var i = 0; i < paraElem.length; i++) {\n var splitTextContent = paraElem[i].innerHTML.split(' ');\n var resultSplitContent = '';\n for (var j = 0; j < splitTextContent.length; j++) {\n if (splitTextContent[j].match(httpRegex) || splitTextContent[j].match(wwwRegex)) {\n resultSplitContent += '' + splitTextContent[j] + ' ';\n }\n else {\n resultSplitContent += splitTextContent[j] + ' ';\n }\n }\n paraElem[i].innerHTML = resultSplitContent.trim();\n }\n if (!isNullOrUndefined(this.parent.pasteCleanupModule)) {\n e.callBack(divElement.innerHTML);\n }\n else {\n this.parent.formatter.editorManager.execCommand('insertHTML', null, null, null, divElement);\n }\n }\n };\n HtmlEditor.prototype.spaceLink = function (e) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var selectNodeEle = this.nodeSelectionObj.getParentNodeCollection(range);\n var text = range.startContainer.textContent.substr(0, range.endOffset);\n var splitText = text.split(' ');\n var urlText = splitText[splitText.length - 1];\n var urlTextRange = range.startOffset - (text.length - splitText[splitText.length - 1].length);\n urlText = urlText.slice(0, urlTextRange);\n // eslint-disable-next-line\n var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (selectNodeEle[0].nodeName !== 'A' && urlText.match(regex)) {\n var selection = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n var url = urlText.indexOf('http') > -1 ? urlText : 'http://' + urlText;\n var selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var value = {\n url: url,\n selection: selection, selectParent: selectParent,\n text: urlText,\n title: '',\n target: '_blank'\n };\n this.parent.formatter.process(this.parent, {\n item: {\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n }\n }, e, value);\n }\n };\n HtmlEditor.prototype.onToolbarClick = function (args) {\n var _this = this;\n var save;\n var selectNodeEle;\n var selectParentEle;\n var item = args.item;\n var closestElement = closest(args.originalEvent.target, '.e-rte-quick-popup');\n if (item.command !== 'FormatPainter') {\n if (closestElement && !closestElement.classList.contains('e-rte-inline-popup')) {\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||\n item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {\n if (isIDevice() && item.command === 'Images') {\n this.nodeSelectionObj.restore();\n }\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n if (item.command === 'Images') {\n this.parent.notify(events.imageToolbarAction, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Audios') {\n this.parent.notify(events.audioToolbarAction, {\n member: 'audio', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Videos') {\n this.parent.notify(events.videoToolbarAction, {\n member: 'video', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Links') {\n this.parent.notify(events.linkToolbarAction, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Table') {\n this.parent.notify(events.tableToolbarAction, {\n member: 'table', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n }\n else {\n var linkDialog = document.getElementById(this.parent.getID() + '_rtelink');\n var imageDialog = document.getElementById(this.parent.getID() + '_image');\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||\n item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n if (isNullOrUndefined(linkDialog) && isNullOrUndefined(imageDialog)) {\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n }\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'RemoveLink':\n this.parent.notify(events.unLink, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'Print':\n this.parent.print();\n break;\n case 'Image':\n this.parent.notify(events.insertImage, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'Audio':\n this.parent.notify(events.insertAudio, {\n member: 'audio', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'Video':\n this.parent.notify(events.insertVideo, {\n member: 'video', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'CreateTable':\n this.parent.notify(events.createTable, {\n member: 'table', args: args, selection: save\n });\n break;\n case 'SourceCode':\n this.parent.notify(events.sourceCode, { member: 'viewSource', args: args });\n break;\n case 'Preview':\n this.parent.notify(events.updateSource, { member: 'updateSource', args: args });\n break;\n case 'FontColor':\n case 'BackgroundColor':\n break;\n case 'File':\n this.parent.notify(events.renderFileManager, {\n member: 'fileManager', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'EmojiPicker':\n this.parent.notify(events.emojiPicker, { member: 'emojiPicker', args: args });\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n }\n }\n else {\n if (args.originalEvent.detail === 1) {\n clearTimeout(this.clickTimeout);\n this.clickTimeout = setTimeout(function () {\n _this.parent.notify(events.formatPainterClick, {\n member: 'formatPainter', args: args\n });\n }, 200);\n }\n else {\n clearTimeout(this.clickTimeout);\n this.parent.notify(events.formatPainterDoubleClick, {\n member: 'formatPainter', args: args\n });\n }\n }\n };\n HtmlEditor.prototype.renderColorPicker = function (args) {\n this.colorPickerModule.renderColorPickerInput(args);\n };\n HtmlEditor.prototype.instantiateRenderer = function () {\n if (this.parent.iframeSettings.enable) {\n this.renderFactory.addRenderer(RenderType.Content, new IframeContentRender(this.parent, this.locator));\n }\n else {\n this.renderFactory.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n }\n };\n HtmlEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.htmlToolbarClick, this.onToolbarClick);\n this.parent.off(events.renderColorPicker, this.renderColorPicker);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.selectRange, this.selectRange);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n this.parent.off(events.readOnlyMode, this.updateReadOnly);\n this.parent.off(events.paste, this.onPaste);\n this.parent.off(events.tableclass, this.isTableClassAdded);\n };\n HtmlEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n var formatterClass = new HTMLFormatter({\n currentDocument: this.contentRenderer.getDocument(),\n element: editElement,\n options: option,\n formatPainterSettings: this.parent.formatPainterSettings\n });\n this.parent.setProperties({ formatter: formatterClass }, true);\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.enableXhtml) {\n this.parent.notify(events.xhtmlValidation, {});\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new HtmlToolbarStatus(this.parent);\n }\n if (this.parent.inlineMode.enable) {\n if (!isNullOrUndefined(this.parent.fontFamily.default)) {\n editElement.style.fontFamily = this.parent.fontFamily.default;\n }\n if (!isNullOrUndefined(this.parent.fontSize.default)) {\n editElement.style.fontSize = this.parent.fontSize.default;\n }\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} e - specifies the editor model\n * @returns {void}\n * @hidden\n\n */\n HtmlEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n if (!isNullOrUndefined(e.newProp.formatter)) {\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps,\n undoRedoTimer: this.parent.undoRedoTimer };\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the string value\n * @hidden\n */\n HtmlEditor.prototype.getModuleName = function () {\n return 'htmlEditor';\n };\n /**\n * For selecting all content in RTE\n *\n * @returns {void}\n * @private\n * @hidden\n */\n HtmlEditor.prototype.selectAll = function () {\n var nodes = getTextNodesUnder(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel());\n if (nodes.length > 0) {\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.parent.contentModule.getDocument(), nodes[0], nodes[nodes.length - 1], 0, nodes[nodes.length - 1].textContent.length);\n }\n };\n /**\n * For selecting all content in RTE\n *\n * @param {NotifyArgs} e - specifies the notified arguments\n * @returns {void}\n * @private\n * @hidden\n */\n HtmlEditor.prototype.selectRange = function (e) {\n this.parent.formatter.editorManager.nodeSelection.setRange(this.parent.contentModule.getDocument(), e.range);\n };\n /**\n * For get a selected text in RTE\n *\n * @param {NotifyArgs} e - specifies the notified arguments\n * @returns {void}\n * @hidden\n */\n HtmlEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument()).toString());\n };\n return HtmlEditor;\n}());\nexport { HtmlEditor };\n","import { detach, getUniqueID, append, closest, selectAll, select, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, Browser, isNullOrUndefined, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isCollide, Tooltip } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, isIDevice } from '../base/util';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ColorPickerInput } from './color-picker';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar BaseQuickToolbar = /** @class */ (function () {\n function BaseQuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.isDOMElement = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.popupRenderer = this.renderFactory.getRenderer(RenderType.Popup);\n this.dropDownButtons = new DropDownButtons(this.parent, this.locator);\n this.colorPickerObj = new ColorPickerInput(this.parent, this.locator);\n }\n BaseQuickToolbar.prototype.appendPopupContent = function () {\n this.toolbarElement = this.parent.createElement('div', { className: classes.CLS_QUICK_TB });\n this.element.appendChild(this.toolbarElement);\n };\n /**\n * render method\n *\n * @param {IQuickToolbarOptions} args - specifies the arguments\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.render = function (args) {\n var className;\n if (args.popupType === 'Image') {\n className = classes.CLS_IMAGE_POP;\n }\n else if (args.popupType === 'Inline') {\n className = classes.CLS_INLINE_POP;\n }\n else {\n className = '';\n }\n var popupId = getUniqueID(args.popupType + '_Quick_Popup');\n this.stringItems = args.toolbarItems;\n this.element = this.parent.createElement('div', { id: popupId, className: className + ' ' + classes.CLS_RTE_ELEMENTS });\n this.element.setAttribute('aria-owns', this.parent.getID());\n this.appendPopupContent();\n this.createToolbar(args.toolbarItems, args.mode, args.cssClass);\n this.popupRenderer.renderPopup(this);\n this.addEventListener();\n };\n BaseQuickToolbar.prototype.createToolbar = function (items, mode, cssClass) {\n this.quickTBarObj = new BaseToolbar(this.parent, this.locator);\n this.quickTBarObj.render({\n container: 'quick',\n target: this.toolbarElement,\n items: items,\n mode: mode,\n cssClass: cssClass\n });\n this.quickTBarObj.toolbarObj.refresh();\n };\n BaseQuickToolbar.prototype.setPosition = function (e) {\n var x;\n var y;\n var imgWrapper = closest(e.target, '.e-img-caption');\n var isAligned = (e.target.classList.contains('e-imginline') ||\n e.target.classList.contains('e-imgbreak')) ? false : true;\n var target = !isNOU(imgWrapper) ? imgWrapper : e.target;\n addClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n var targetOffsetTop = target.offsetTop;\n var parentOffsetTop = window.pageYOffset + e.parentData.top;\n if ((targetOffsetTop - e.editTop) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) - e.popHeight - 5;\n }\n else if (((e.editTop + e.editHeight) - (targetOffsetTop + target.offsetHeight)) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) + target.offsetHeight + 5;\n }\n else {\n y = e.y;\n }\n target = isAligned ? e.target : target;\n if (target.offsetWidth > e.popWidth) {\n x = (target.offsetWidth / 2) - (e.popWidth / 2) + e.parentData.left + target.offsetLeft;\n }\n else {\n x = e.parentData.left + target.offsetLeft;\n }\n this.popupObj.position.X = ((x + e.popWidth) > e.parentData.right) ? e.parentData.right - e.popWidth : x;\n this.popupObj.position.Y = (y >= 0) ? y : e.y + 5;\n this.popupObj.dataBind();\n removeClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n };\n BaseQuickToolbar.prototype.checkCollision = function (e, viewPort, type) {\n var x;\n var y;\n var parentTop = e.parentData.top;\n var contentTop = e.windowY + parentTop + e.tBarElementHeight;\n var collision = [];\n if (viewPort === 'document') {\n collision = isCollide(e.popup);\n }\n else {\n collision = isCollide(e.popup, e.parentElement);\n }\n for (var i = 0; i < collision.length; i++) {\n switch (collision[i]) {\n case 'top':\n if (viewPort === 'document') {\n y = e.windowY;\n }\n else {\n y = (window.pageYOffset + parentTop) + e.tBarElementHeight;\n }\n break;\n case 'bottom': {\n var posY = void 0;\n if (viewPort === 'document') {\n if (type === 'inline') {\n posY = (e.y - e.popHeight - 10);\n }\n else {\n if ((e.windowHeight - (parentTop + e.tBarElementHeight)) > e.popHeight) {\n if ((contentTop - e.windowHeight) > e.popHeight) {\n posY = (contentTop + (e.windowHeight - parentTop)) - e.popHeight;\n }\n else {\n posY = contentTop;\n }\n }\n else {\n posY = e.windowY + (parentTop + e.tBarElementHeight);\n }\n }\n }\n else {\n if (e.target.tagName !== 'IMG') {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 10;\n }\n else {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 5;\n }\n }\n y = posY;\n break;\n }\n case 'right':\n if (type === 'inline') {\n x = window.pageXOffset + (e.windowWidth - (e.popWidth + e.bodyRightSpace + 10));\n }\n else {\n x = e.x - e.popWidth;\n }\n break;\n case 'left':\n if (type === 'inline') {\n x = 0;\n }\n else {\n x = e.parentData.left;\n }\n break;\n }\n }\n this.popupObj.position.X = (x) ? x : this.popupObj.position.X;\n this.popupObj.position.Y = (y) ? y : this.popupObj.position.Y;\n this.popupObj.dataBind();\n };\n /**\n * showPopup method\n *\n * @param {number} x - specifies the x value\n * @param {number} y - specifies the y value\n * @param {Element} target - specifies the element\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.showPopup = function (x, y, target) {\n var _this = this;\n var eventArgs = { popup: this.popupObj, cancel: false, targetElement: target,\n positionX: x, positionY: y };\n this.parent.trigger(events.beforeQuickToolbarOpen, eventArgs, function (beforeQuickToolbarArgs) {\n if (!beforeQuickToolbarArgs.cancel) {\n var editPanelTop = void 0;\n var editPanelHeight = void 0;\n var bodyStyle = window.getComputedStyle(document.body);\n var bodyRight = parseFloat(bodyStyle.marginRight.split('px')[0]) + parseFloat(bodyStyle.paddingRight.split('px')[0]);\n var windowHeight = window.innerHeight;\n var windowWidth = window.innerWidth;\n var parent_1 = _this.parent.element;\n var toolbarAvail = !isNullOrUndefined(_this.parent.getToolbar());\n var tbHeight = toolbarAvail && _this.parent.toolbarModule.getToolbarHeight();\n var expTBHeight = toolbarAvail && _this.parent.toolbarModule.getExpandTBarPopHeight();\n var tBarHeight = (toolbarAvail) ? (tbHeight + expTBHeight) : 0;\n addClass([_this.element], [classes.CLS_HIDE]);\n if (Browser.isDevice && !isIDevice()) {\n addClass([_this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (_this.parent.iframeSettings.enable) {\n var cntEle = _this.contentRenderer.getPanel().contentWindow;\n editPanelTop = cntEle.pageYOffset;\n editPanelHeight = cntEle.innerHeight;\n }\n else {\n var cntEle = closest(target, '.' + classes.CLS_RTE_CONTENT);\n editPanelTop = (cntEle) ? cntEle.scrollTop : 0;\n editPanelHeight = (cntEle) ? cntEle.offsetHeight : 0;\n }\n if (!_this.parent.inlineMode.enable && !closest(target, 'table')) {\n _this.parent.disableToolbarItem(_this.parent.toolbarSettings.items);\n _this.parent.enableToolbarItem(['Undo', 'Redo']);\n }\n append([_this.element], document.body);\n if (_this.parent.showTooltip) {\n _this.tooltip = new Tooltip({\n target: '#' + _this.element.id + ' [title]',\n openDelay: 400,\n showTipPointer: true,\n windowCollision: true,\n position: 'BottomCenter'\n });\n _this.tooltip.appendTo(_this.element);\n }\n _this.popupObj.position.X = beforeQuickToolbarArgs.positionX + 20;\n _this.popupObj.position.Y = beforeQuickToolbarArgs.positionY + 20;\n _this.popupObj.dataBind();\n _this.popupObj.element.classList.add('e-popup-open');\n _this.dropDownButtons.renderDropDowns({\n container: _this.toolbarElement,\n containerType: 'quick',\n items: _this.stringItems\n });\n _this.colorPickerObj.renderColorPickerInput({\n container: _this.toolbarElement,\n containerType: 'quick',\n items: _this.stringItems\n });\n var showPopupData = {\n x: x, y: y,\n target: target,\n editTop: editPanelTop,\n editHeight: editPanelHeight,\n popup: _this.popupObj.element,\n popHeight: _this.popupObj.element.offsetHeight,\n popWidth: _this.popupObj.element.offsetWidth,\n parentElement: parent_1,\n bodyRightSpace: bodyRight,\n windowY: window.pageYOffset,\n windowHeight: windowHeight,\n windowWidth: windowWidth,\n parentData: parent_1.getBoundingClientRect(),\n tBarElementHeight: tBarHeight\n };\n if (target.tagName === 'IMG' || target.tagName === 'AUDIO' || target.tagName === 'VIDEO' || target.tagName === 'IFRAME' || (target.classList &&\n (target.classList.contains(classes.CLS_AUDIOWRAP) || target.classList.contains(classes.CLS_CLICKELEM) ||\n target.classList.contains(classes.CLS_VID_CLICK_ELEM)))) {\n _this.setPosition(showPopupData);\n }\n if (!_this.parent.inlineMode.enable) {\n _this.checkCollision(showPopupData, 'parent', '');\n }\n _this.checkCollision(showPopupData, 'document', ((_this.parent.inlineMode.enable) ? 'inline' : ''));\n _this.popupObj.element.classList.remove('e-popup-open');\n removeClass([_this.element], [classes.CLS_HIDE]);\n _this.popupObj.show({ name: 'ZoomIn', duration: (Browser.isIE ? 250 : 400) });\n if (_this.popupObj && _this.parent.cssClass) {\n removeClass([_this.popupObj.element], _this.parent.cssClass);\n addClass([_this.popupObj.element], _this.parent.cssClass);\n }\n setStyleAttribute(_this.element, {\n maxWidth: window.outerWidth + 'px'\n });\n addClass([_this.element], [classes.CLS_POP]);\n _this.isDOMElement = true;\n }\n });\n };\n /**\n * hidePopup method\n *\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.hidePopup = function () {\n var viewSourcePanel = this.parent.sourceCodeModule.getViewPanel();\n if (Browser.isDevice && !isIDevice()) {\n removeClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (!isNullOrUndefined(document.querySelector('.e-tooltip-wrap'))) {\n if (!isNullOrUndefined(document.querySelector('#' + this.element.id + ' [data-tooltip-id]'))) {\n var tooltipTargetEle = document.querySelector('#' + this.element.id + ' [data-tooltip-id]');\n var dataContent = tooltipTargetEle.getAttribute('data-content');\n tooltipTargetEle.removeAttribute('data-content');\n tooltipTargetEle.setAttribute('title', dataContent);\n tooltipTargetEle.removeAttribute('data-tooltip-id');\n }\n this.tooltip.destroy();\n }\n else {\n if (!isNullOrUndefined(this.tooltip)) {\n this.tooltip.destroy();\n }\n }\n if (!isNullOrUndefined(this.parent.getToolbar()) && !this.parent.inlineMode.enable) {\n if (isNullOrUndefined(viewSourcePanel) || viewSourcePanel.style.display === 'none') {\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n }\n }\n this.removeEleFromDOM();\n this.isDOMElement = false;\n };\n /**\n * @param {string} item - specifies the string value\n * @param {number} index - specifies the index value\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.addQTBarItem = function (item, index) {\n this.quickTBarObj.toolbarObj.addItems(this.quickTBarObj.getItems(item, 'toolbar'), index);\n };\n /**\n * @param {number} index - specifies the index value\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.removeQTBarItem = function (index) {\n this.quickTBarObj.toolbarObj.removeItems(index);\n };\n BaseQuickToolbar.prototype.removeEleFromDOM = function () {\n var element = this.popupObj.element;\n if (this.isDOMElement) {\n this.dropDownButtons.destroyDropDowns();\n this.colorPickerObj.destroyColorPicker();\n removeClass([this.element], [classes.CLS_POP]);\n detach(element);\n var args = this.popupObj;\n this.parent.trigger(events.quickToolbarClose, args);\n }\n };\n BaseQuickToolbar.prototype.updateStatus = function (args) {\n var options = {\n args: args,\n dropDownModule: this.dropDownButtons,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.element),\n tbItems: this.quickTBarObj.toolbarObj.items\n };\n setToolbarStatus(options, true, this.parent);\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.parent.getBaseToolbarObject(), this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * Destroys the Quick toolbar.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.destroy = function () {\n if (this.popupObj && !this.popupObj.isDestroyed) {\n this.popupObj.destroy();\n this.removeEleFromDOM();\n }\n this.removeEventListener();\n };\n /**\n * addEventListener method\n *\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} e - specifies the model element\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.inlineMode)) {\n for (var _i = 0, _a = Object.keys(e.newProp.inlineMode); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enable':\n if (e.newProp.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n else {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n break;\n }\n }\n }\n };\n /**\n * removeEventListener method\n *\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.inlineMode.enable) {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n };\n return BaseQuickToolbar;\n}());\nexport { BaseQuickToolbar };\n","import { Popup } from '@syncfusion/ej2-popups';\nimport { CLS_QUICK_POP } from '../base/classes';\nimport * as events from '../base/constant';\n/**\n * `Popup renderer` module is used to render popup in RichTextEditor.\n *\n * @hidden\n\n */\nvar PopupRenderer = /** @class */ (function () {\n /**\n * Constructor for popup renderer module\n *\n * @param {IRichTextEditor} parent - specifies the parent.\n */\n function PopupRenderer(parent) {\n this.parent = parent;\n }\n PopupRenderer.prototype.quickToolbarOpen = function () {\n var args = this.popupObj;\n this.parent.trigger(events.quickToolbarOpen, args);\n };\n /**\n * renderPopup method\n *\n * @param {BaseQuickToolbar} args - specifies the arguments.\n * @returns {void}\n * @hidden\n\n */\n PopupRenderer.prototype.renderPopup = function (args) {\n this.setPanel(args.element);\n this.renderPanel();\n args.popupObj = new Popup(args.element, {\n targetType: 'relative',\n relateTo: this.parent.element,\n open: this.quickToolbarOpen.bind(this)\n });\n this.popupObj = args.popupObj;\n args.popupObj.hide();\n };\n /**\n * The function is used to add popup class in Quick Toolbar\n *\n * @returns {void}\n * @hidden\n\n */\n PopupRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_QUICK_POP);\n };\n /**\n * Get the popup element of RichTextEditor\n *\n * @returns {Element} - specifies the element\n * @hidden\n\n */\n PopupRenderer.prototype.getPanel = function () {\n return this.popupPanel;\n };\n /**\n * Set the popup element of RichTextEditor\n *\n * @returns {void}\n * @param {Element} panel - specifies the element\n * @hidden\n\n */\n PopupRenderer.prototype.setPanel = function (panel) {\n this.popupPanel = panel;\n };\n return PopupRenderer;\n}());\nexport { PopupRenderer };\n","import { select, isNullOrUndefined, Browser, addClass, removeClass, EventHandler, closest, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport { pageYOffset, hasClass, isIDevice } from '../base/util';\nimport { BaseQuickToolbar } from './base-quick-toolbar';\nimport { PopupRenderer } from '../renderer/popup-renderer';\nimport { CLS_INLINE_POP, CLS_INLINE } from '../base/classes';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar QuickToolbar = /** @class */ (function () {\n function QuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.renderFactory.addRenderer(RenderType.Popup, new PopupRenderer(this.parent));\n this.addEventListener();\n }\n QuickToolbar.prototype.formatItems = function (items) {\n var formattedItems = [];\n items.forEach(function (item) {\n if (typeof item === 'string') {\n switch (item.toLocaleLowerCase()) {\n case 'open':\n formattedItems.push('openLink');\n break;\n case 'edit':\n formattedItems.push('editLink');\n break;\n case 'unlink':\n formattedItems.push('removeLink');\n break;\n default:\n formattedItems.push(item);\n break;\n }\n }\n else {\n formattedItems.push(item);\n }\n });\n return formattedItems;\n };\n QuickToolbar.prototype.getQTBarOptions = function (popType, mode, items, type) {\n return {\n popupType: popType,\n toolbarItems: items,\n mode: mode,\n renderType: type,\n cssClass: this.parent.cssClass\n };\n };\n /**\n * createQTBar method\n *\n * @param {string} popupType - specifies the string value\n * @param {string} mode - specifies the string value.\n * @param {string} items - specifies the string.\n * @param {RenderType} type - specifies the render type.\n * @returns {BaseQuickToolbar} - specifies the quick toolbar\n * @hidden\n\n */\n QuickToolbar.prototype.createQTBar = function (popupType, mode, items, type) {\n if (items.length < 1) {\n return null;\n }\n var qTBar = new BaseQuickToolbar(this.parent, this.locator);\n qTBar.render(this.getQTBarOptions(popupType, mode, this.formatItems(items), type));\n return qTBar;\n };\n QuickToolbar.prototype.initializeQuickToolbars = function () {\n this.parent.quickToolbarModule = this;\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n if (this.parent.inlineMode.enable && this.parent.inlineMode.onSelection && isIDevice()) {\n EventHandler.add(this.contentRenderer.getDocument(), 'selectionchange', this.selectionChangeHandler, this);\n }\n };\n // eslint-disable-next-line\n QuickToolbar.prototype.onMouseDown = function (e) {\n this.parent.isBlur = false;\n this.parent.isRTE = true;\n };\n QuickToolbar.prototype.keyUpQT = function (e) {\n if (e.which === 27) {\n this.hideQuickToolbars();\n }\n };\n QuickToolbar.prototype.renderQuickToolbars = function () {\n if (this.linkQTBar || this.imageQTBar || this.audioQTBar || this.videoQTBar || this.textQTBar || this.tableQTBar) {\n return;\n }\n this.linkQTBar = this.createQTBar('Link', 'Scrollable', this.parent.quickToolbarSettings.link, RenderType.LinkToolbar);\n this.renderFactory.addRenderer(RenderType.LinkToolbar, this.linkQTBar);\n this.textQTBar = this.createQTBar('Text', 'Scrollable', this.parent.quickToolbarSettings.text, RenderType.TextToolbar);\n this.renderFactory.addRenderer(RenderType.TextToolbar, this.textQTBar);\n this.imageQTBar = this.createQTBar('Image', 'MultiRow', this.parent.quickToolbarSettings.image, RenderType.ImageToolbar);\n this.renderFactory.addRenderer(RenderType.ImageToolbar, this.imageQTBar);\n this.audioQTBar = this.createQTBar('Audio', 'MultiRow', this.parent.quickToolbarSettings.audio, RenderType.AudioToolbar);\n this.renderFactory.addRenderer(RenderType.AudioToolbar, this.audioQTBar);\n this.videoQTBar = this.createQTBar('Video', 'MultiRow', this.parent.quickToolbarSettings.video, RenderType.VideoToolbar);\n this.renderFactory.addRenderer(RenderType.VideoToolbar, this.videoQTBar);\n this.tableQTBar = this.createQTBar('Table', 'MultiRow', this.parent.quickToolbarSettings.table, RenderType.TableToolbar);\n this.renderFactory.addRenderer(RenderType.TableToolbar, this.tableQTBar);\n if (this.linkQTBar) {\n EventHandler.add(this.linkQTBar.element, 'mousedown', this.onMouseDown, this);\n EventHandler.add(this.linkQTBar.element, 'keyup', this.keyUpQT, this);\n }\n if (this.imageQTBar) {\n EventHandler.add(this.imageQTBar.element, 'mousedown', this.onMouseDown, this);\n EventHandler.add(this.imageQTBar.element, 'keyup', this.keyUpQT, this);\n }\n if (this.audioQTBar) {\n EventHandler.add(this.audioQTBar.element, 'mousedown', this.onMouseDown, this);\n EventHandler.add(this.audioQTBar.element, 'keyup', this.keyUpQT, this);\n }\n if (this.videoQTBar) {\n EventHandler.add(this.videoQTBar.element, 'mousedown', this.onMouseDown, this);\n EventHandler.add(this.videoQTBar.element, 'keyup', this.keyUpQT, this);\n }\n if (this.textQTBar) {\n EventHandler.add(this.textQTBar.element, 'mousedown', this.onMouseDown, this);\n EventHandler.add(this.textQTBar.element, 'keyup', this.keyUpQT, this);\n }\n if (this.tableQTBar) {\n EventHandler.add(this.tableQTBar.element, 'mousedown', this.onMouseDown, this);\n EventHandler.add(this.tableQTBar.element, 'keyup', this.keyUpQT, this);\n }\n };\n QuickToolbar.prototype.renderInlineQuickToolbar = function () {\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.inlineQTBar = this.createQTBar('Inline', 'MultiRow', this.parent.toolbarSettings.items, RenderType.InlineToolbar);\n this.renderFactory.addRenderer(RenderType.InlineToolbar, this.inlineQTBar);\n EventHandler.add(this.inlineQTBar.element, 'mousedown', this.onMouseDown, this);\n EventHandler.add(this.inlineQTBar.element, 'keyup', this.keyUpQT, this);\n }\n };\n /**\n * Method for showing the inline quick toolbar\n *\n * @param {number} x -specifies the value of x.\n * @param {number} y - specifies the y valu.\n * @param {HTMLElement} target - specifies the target element.\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.showInlineQTBar = function (x, y, target) {\n if (this.parent.readonly || target.tagName.toLowerCase() === 'img') {\n return;\n }\n this.inlineQTBar.showPopup(x, y, target);\n };\n /**\n * Method for hidding the inline quick toolbar\n *\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.hideInlineQTBar = function () {\n if (this.inlineQTBar && !hasClass(this.inlineQTBar.element, 'e-popup-close')) {\n this.inlineQTBar.hidePopup();\n }\n };\n /**\n * Method for hidding the quick toolbar\n *\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.hideQuickToolbars = function () {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close') && document.body.contains(this.linkQTBar.element)) {\n this.linkQTBar.hidePopup();\n }\n if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close') && document.body.contains(this.textQTBar.element)) {\n this.textQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close') && document.body.contains(this.imageQTBar.element)) {\n this.imageQTBar.hidePopup();\n }\n if (this.audioQTBar && !hasClass(this.audioQTBar.element, 'e-popup-close') && document.body.contains(this.audioQTBar.element)) {\n this.audioQTBar.hidePopup();\n }\n if (this.videoQTBar && !hasClass(this.videoQTBar.element, 'e-popup-close') && document.body.contains(this.videoQTBar.element)) {\n this.videoQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close') && document.body.contains(this.tableQTBar.element)) {\n this.tableQTBar.hidePopup();\n }\n if (!isNOU(this.parent) && this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.deBounce = function (x, y, target) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () {\n _this.showInlineQTBar(x, y, target);\n }, 1000);\n };\n QuickToolbar.prototype.mouseUpHandler = function (e) {\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n var args = e.args.touches ?\n e.args.changedTouches[0] : e.args;\n var range = this.parent.getRange();\n var target = e.args.target;\n if (isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n if (isIDevice() && e.touchData && e.touchData.prevClientX !== e.touchData.clientX\n && e.touchData.prevClientY !== e.touchData.clientY) {\n return;\n }\n this.hideInlineQTBar();\n var parentLeft = this.parent.element.getBoundingClientRect().left;\n this.offsetX = this.parent.iframeSettings.enable ? window.pageXOffset + parentLeft + args.clientX : args.pageX;\n this.offsetY = pageYOffset(args, this.parent.element, this.parent.iframeSettings.enable);\n if (target.nodeName === 'TEXTAREA') {\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n else {\n var closestAnchor = closest(target, 'a');\n target = closestAnchor ? closestAnchor : target;\n var startNode = this.parent.getRange().startContainer.parentElement;\n var endNode = this.parent.getRange().endContainer.parentElement;\n if ((isNOU(closest(startNode, 'A')) || isNOU(closest(endNode, 'A'))) && (!closest(target, 'td,th') || !range.collapsed) &&\n (target.tagName !== 'IMG' || this.parent.getRange().startOffset !== this.parent.getRange().endOffset)) {\n if (this.parent.inlineMode.onSelection && range.collapsed) {\n return;\n }\n this.target = target;\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n }\n }\n }\n };\n QuickToolbar.prototype.keyDownHandler = function () {\n if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))\n && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.inlineQTBarMouseDownHandler = function () {\n if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))\n && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.keyUpHandler = function (e) {\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n var args = e.args;\n if (this.parent.inlineMode.onSelection) {\n if (this.parent.getSelection().length > 0) {\n if ((args.ctrlKey && args.keyCode === 65) || (args.shiftKey && (args.keyCode === 33 || args.keyCode === 34 ||\n args.keyCode === 35 || args.keyCode === 36 || args.keyCode === 37 || args.keyCode === 38 ||\n args.keyCode === 39 || args.keyCode === 40))) {\n this.showInlineQTBar(this.offsetX, this.offsetY, args.target);\n }\n }\n return;\n }\n this.deBounce(this.offsetX, this.offsetY, args.target);\n }\n };\n QuickToolbar.prototype.selectionChangeHandler = function (e) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () {\n _this.onSelectionChange(e);\n }, 1000);\n };\n QuickToolbar.prototype.onSelectionChange = function (e) {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n return;\n }\n var selection = this.contentRenderer.getDocument().getSelection();\n if (!selection.isCollapsed) {\n this.mouseUpHandler({ args: e });\n }\n };\n /**\n * getInlineBaseToolbar method\n *\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.getInlineBaseToolbar = function () {\n return this.inlineQTBar && this.inlineQTBar.quickTBarObj;\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.destroy = function () {\n if (this.linkQTBar) {\n EventHandler.remove(this.linkQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.linkQTBar.element, 'keyup', this.keyUpQT);\n this.linkQTBar.destroy();\n }\n if (this.textQTBar) {\n EventHandler.remove(this.textQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.textQTBar.element, 'keyup', this.keyUpQT);\n this.textQTBar.destroy();\n }\n if (this.imageQTBar) {\n EventHandler.remove(this.imageQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.imageQTBar.element, 'keyup', this.keyUpQT);\n this.imageQTBar.destroy();\n }\n if (this.audioQTBar) {\n EventHandler.remove(this.audioQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.audioQTBar.element, 'keyup', this.keyUpQT);\n this.audioQTBar.destroy();\n }\n if (this.videoQTBar) {\n EventHandler.remove(this.videoQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.videoQTBar.element, 'keyup', this.keyUpQT);\n this.videoQTBar.destroy();\n }\n if (this.tableQTBar) {\n EventHandler.remove(this.tableQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.tableQTBar.element, 'keyup', this.keyUpQT);\n this.tableQTBar.destroy();\n }\n if (this.inlineQTBar) {\n EventHandler.remove(this.inlineQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.inlineQTBar.element, 'keyup', this.keyUpQT);\n if (isIDevice()) {\n EventHandler.remove(document, 'selectionchange', this.selectionChangeHandler);\n }\n this.inlineQTBar.destroy();\n }\n this.removeEventListener();\n };\n QuickToolbar.prototype.moduleDestroy = function () {\n this.parent = null;\n };\n QuickToolbar.prototype.wireInlineQTBarEvents = function () {\n this.parent.on(events.mouseUp, this.mouseUpHandler, this);\n this.parent.on(events.mouseDown, this.inlineQTBarMouseDownHandler, this);\n this.parent.on(events.keyDown, this.keyDownHandler, this);\n this.parent.on(events.keyUp, this.keyUpHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseUpHandler, this);\n this.parent.on(events.renderInlineToolbar, this.renderInlineQuickToolbar, this);\n this.parent.on(events.moduleDestroy, this.moduleDestroy, this);\n };\n QuickToolbar.prototype.unWireInlineQTBarEvents = function () {\n this.parent.off(events.mouseUp, this.mouseUpHandler);\n this.parent.off(events.mouseDown, this.inlineQTBarMouseDownHandler);\n this.parent.off(events.keyDown, this.keyDownHandler);\n this.parent.off(events.keyUp, this.keyUpHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseUpHandler);\n this.parent.off(events.renderInlineToolbar, this.renderInlineQuickToolbar);\n this.parent.off(events.moduleDestroy, this.moduleDestroy);\n };\n // eslint-disable-next-line\n QuickToolbar.prototype.toolbarUpdated = function (args) {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.audioQTBar && !hasClass(this.audioQTBar.element, 'e-popup-close')) {\n this.audioQTBar.hidePopup();\n }\n if (this.videoQTBar && !hasClass(this.videoQTBar.element, 'e-popup-close')) {\n this.videoQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close')) {\n this.tableQTBar.hidePopup();\n }\n };\n /**\n * addEventListener\n *\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeQuickToolbars, this);\n this.parent.on(events.mouseDown, this.renderQuickToolbars, this);\n this.parent.on(events.toolbarUpdated, this.toolbarUpdated, this);\n this.parent.on(events.drop, this.renderQuickToolbars, this);\n this.wireInlineQTBarEvents();\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n this.parent.on(events.contentscroll, this.hideQuickToolbars, this);\n }\n this.parent.on(events.focusChange, this.hideQuickToolbars, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.bindCssClass, this.setCssClass, this);\n };\n QuickToolbar.prototype.onKeyDown = function (e) {\n var args = e.args;\n if (args.which === 8 || args.which === 46) {\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.audioQTBar && !hasClass(this.audioQTBar.element, 'e-popup-close')) {\n this.audioQTBar.hidePopup();\n }\n if (this.videoQTBar && !hasClass(this.videoQTBar.element, 'e-popup-close')) {\n this.videoQTBar.hidePopup();\n }\n }\n };\n QuickToolbar.prototype.onIframeMouseDown = function () {\n this.hideQuickToolbars();\n this.hideInlineQTBar();\n };\n QuickToolbar.prototype.updateCss = function (baseQTObj, e) {\n if (baseQTObj && e.cssClass) {\n if (isNullOrUndefined(e.oldCssClass && baseQTObj.quickTBarObj.toolbarObj.cssClass !== e.cssClass)) {\n baseQTObj.quickTBarObj.toolbarObj.setProperties({ cssClass: (baseQTObj.quickTBarObj.toolbarObj.cssClass + ' ' + e.cssClass).trim() });\n }\n else {\n baseQTObj.quickTBarObj.toolbarObj.setProperties({ cssClass: (baseQTObj.quickTBarObj.toolbarObj.cssClass.replace(e.oldCssClass, '').trim() + ' ' + e.cssClass).trim() });\n }\n }\n };\n QuickToolbar.prototype.setCssClass = function (e) {\n var baseQuickToolbarObj = [\n this.inlineQTBar, this.imageQTBar, this.linkQTBar, this.textQTBar, this.tableQTBar\n ];\n for (var i = 0; i < baseQuickToolbarObj.length; i++) {\n this.updateCss(baseQuickToolbarObj[i], e);\n }\n };\n QuickToolbar.prototype.setRtl = function (args) {\n if (this.inlineQTBar) {\n this.inlineQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.audioQTBar) {\n this.audioQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.videoQTBar) {\n this.videoQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.linkQTBar) {\n this.linkQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n /**\n * removeEventListener\n *\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeQuickToolbars);\n this.parent.off(events.mouseDown, this.renderQuickToolbars);\n this.parent.off(events.toolbarUpdated, this.toolbarUpdated);\n this.parent.off(events.drop, this.renderQuickToolbars);\n this.unWireInlineQTBarEvents();\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.off(events.scroll, this.hideQuickToolbars);\n this.parent.off(events.contentscroll, this.hideQuickToolbars);\n }\n this.parent.off(events.focusChange, this.hideQuickToolbars);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.bindCssClass, this.setCssClass);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} e - specifies the element.\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.quickToolbarSettings)) {\n for (var _i = 0, _a = Object.keys(e.newProp.quickToolbarSettings); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'actionOnScroll':\n if (e.newProp.quickToolbarSettings.actionOnScroll === 'none') {\n this.parent.off(events.scroll, this.hideQuickToolbars);\n this.parent.off(events.contentscroll, this.hideQuickToolbars);\n }\n else {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n this.parent.on(events.contentscroll, this.hideQuickToolbars, this);\n }\n break;\n }\n }\n }\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.inlineQTBar) {\n removeClass([this.parent.element], [CLS_INLINE]);\n this.unWireInlineQTBarEvents();\n this.hideInlineQTBar();\n }\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.wireInlineQTBarEvents();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\n * @hidden\n */\n QuickToolbar.prototype.getModuleName = function () {\n return 'quickToolbar';\n };\n return QuickToolbar;\n}());\nexport { QuickToolbar };\n","import { detach, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { CLS_COUNT, CLS_WARNING, CLS_ERROR } from '../base/classes';\n/**\n * `Count` module is used to handle Count actions.\n */\nvar Count = /** @class */ (function () {\n function Count(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n Count.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editPanel = this.contentRenderer.getEditPanel();\n this.addEventListener();\n };\n /**\n * renderCount method\n *\n * @returns {void}\n * @hidden\n\n */\n Count.prototype.renderCount = function () {\n this.initializeInstance();\n this.element = this.parent.createElement('span', { className: CLS_COUNT });\n this.contentRenderer.getPanel().parentElement.appendChild(this.element);\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n };\n Count.prototype.appendCount = function () {\n var htmlText = this.parent.editorMode === 'Markdown' ? this.editPanel.value :\n this.editPanel.textContent;\n if (this.parent.editorMode !== 'Markdown' && htmlText.indexOf('\\u200B') !== -1) {\n this.htmlLength = htmlText.replace(/\\u200B/g, '').length;\n }\n else {\n this.htmlLength = htmlText.length;\n }\n var string = this.parent.maxLength === -1 ? this.htmlLength : this.htmlLength + ' / ' + this.parent.maxLength;\n this.element.innerHTML = string;\n };\n Count.prototype.charCountBackground = function (htmlLength) {\n var percentage = (htmlLength / this.parent.maxLength) * 100;\n if (percentage < 85) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.remove(CLS_ERROR);\n }\n else if (percentage > 85 && percentage <= 90) {\n this.element.classList.remove(CLS_ERROR);\n this.element.classList.add(CLS_WARNING);\n }\n else if (percentage > 90) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.add(CLS_ERROR);\n }\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n Count.prototype.refresh = function () {\n if (!isNullOrUndefined(this.editPanel)) {\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n }\n };\n /**\n * Destroys the Count.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n Count.prototype.destroy = function () {\n if (this.element && !isNullOrUndefined(this.parent.element.querySelector('.' + CLS_COUNT))) {\n detach(this.element);\n }\n this.removeEventListener();\n };\n Count.prototype.toggle = function (e) {\n this.element.style.display = (e.member === 'viewSource') ? 'none' : 'block';\n };\n Count.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.renderCount, this);\n this.parent.on(events.keyUp, this.refresh, this);\n this.parent.on(events.count, this.refresh, this);\n this.parent.on(events.refreshBegin, this.refresh, this);\n this.parent.on(events.mouseDown, this.refresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sourceCode, this.toggle, this);\n this.parent.on(events.updateSource, this.toggle, this);\n };\n Count.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderCount);\n this.parent.off(events.keyUp, this.refresh);\n this.parent.off(events.refreshBegin, this.refresh);\n this.parent.off(events.count, this.refresh);\n this.parent.off(events.mouseDown, this.refresh);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sourceCode, this.toggle);\n this.parent.off(events.updateSource, this.toggle);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the string value\n */\n Count.prototype.getModuleName = function () {\n return 'count';\n };\n return Count;\n}());\nexport { Count };\n","/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser, extend } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nvar ERROR = 'e-error';\nvar INPUTGROUP = 'e-input-group';\nvar FLOATINPUT = 'e-float-input';\nvar UTILMASK = 'e-utility-mask';\nvar TOPLABEL = 'e-label-top';\nvar BOTTOMLABEL = 'e-label-bottom';\n/**\n * @hidden\n * Built-in masking elements collection.\n */\nexport var regularExpressions = {\n '0': '[0-9]',\n '9': '[0-9 ]',\n '#': '[0-9 +-]',\n 'L': '[A-Za-z]',\n '?': '[A-Za-z ]',\n '&': '[^\\x7f ]+',\n 'C': '[^\\x7f]+',\n 'A': '[A-Za-z0-9]',\n 'a': '[A-Za-z0-9 ]'\n};\n/**\n * Generate required masking elements to the MaskedTextBox from user mask input.\n *\n * @hidden\n */\nexport function createMask() {\n attributes(this.element, {\n 'role': 'textbox', 'autocomplete': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive'\n });\n if (this.mask) {\n var splitMask = this.mask.split(']');\n for (var i = 0; i < splitMask.length; i++) {\n if (splitMask[i][splitMask[i].length - 1] === '\\\\') {\n splitMask[i] = splitMask[i] + ']';\n var splitInnerMask = splitMask[i].split('[');\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j][splitInnerMask[j].length - 1] === '\\\\') {\n splitInnerMask[j] = splitInnerMask[j] + '[';\n }\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n else {\n var splitInnerMask = splitMask[i].split('[');\n if (splitInnerMask.length > 1) {\n var chkSpace = false;\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j] === '\\\\') {\n this.customRegExpCollec.push('[');\n this.hiddenMask += splitInnerMask[j] + '[';\n }\n else if (splitInnerMask[j] === '') {\n chkSpace = true;\n }\n else if ((splitInnerMask[j] !== '' && chkSpace) || j === splitInnerMask.length - 1) {\n this.customRegExpCollec.push('[' + splitInnerMask[j] + ']');\n this.hiddenMask += this.promptChar;\n chkSpace = false;\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[0]);\n }\n }\n }\n this.escapeMaskValue = this.hiddenMask;\n this.promptMask = this.hiddenMask.replace(/[09?LCAa#&]/g, this.promptChar);\n if (!isNullOrUndefined(this.customCharacters)) {\n for (var i = 0; i < this.promptMask.length; i++) {\n if (!isNullOrUndefined(this.customCharacters[this.promptMask[i]])) {\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n this.promptMask = this.promptMask.replace(new RegExp(this.promptMask[i], 'g'), this.promptChar);\n }\n }\n }\n var escapeNumber = 0;\n if (this.hiddenMask.match(new RegExp(/\\\\/))) {\n for (var i = 0; i < this.hiddenMask.length; i++) {\n var j = 0;\n if (i >= 1) {\n j = i;\n }\n escapeNumber = this.hiddenMask.length - this.promptMask.length;\n j = j - escapeNumber;\n if ((i > 0 && this.hiddenMask[i - 1] !== '\\\\') && (this.hiddenMask[i] === '>' ||\n this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|')) {\n this.promptMask = this.promptMask.substring(0, j) +\n this.promptMask.substring((i + 1) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) +\n this.escapeMaskValue.substring((i + 1) - escapeNumber, this.escapeMaskValue.length);\n }\n if (this.hiddenMask[i] === '\\\\') {\n this.promptMask = this.promptMask.substring(0, j) + this.hiddenMask[i + 1] +\n this.promptMask.substring((i + 2) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) + this.escapeMaskValue[i + 1] +\n this.escapeMaskValue.substring((i + 2) - escapeNumber, this.escapeMaskValue.length);\n }\n }\n }\n else {\n this.promptMask = this.promptMask.replace(/[>|<]/g, '');\n this.escapeMaskValue = this.hiddenMask.replace(/[>|<]/g, '');\n }\n attributes(this.element, { 'aria-invalid': 'false' });\n }\n}\n/**\n * Apply mask ability with masking elements to the MaskedTextBox.\n *\n * @hidden\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * To wire required events to the MaskedTextBox.\n *\n * @hidden\n */\nexport function wireEvents() {\n EventHandler.add(this.element, 'keydown', maskInputKeyDownHandler, this);\n EventHandler.add(this.element, 'keypress', maskInputKeyPressHandler, this);\n EventHandler.add(this.element, 'keyup', maskInputKeyUpHandler, this);\n EventHandler.add(this.element, 'input', maskInputHandler, this);\n EventHandler.add(this.element, 'focus', maskInputFocusHandler, this);\n EventHandler.add(this.element, 'blur', maskInputBlurHandler, this);\n EventHandler.add(this.element, 'paste', maskInputPasteHandler, this);\n EventHandler.add(this.element, 'cut', maskInputCutHandler, this);\n EventHandler.add(this.element, 'drop', maskInputDropHandler, this);\n EventHandler.add(this.element, 'mousedown', maskInputMouseDownHandler, this);\n EventHandler.add(this.element, 'mouseup', maskInputMouseUpHandler, this);\n if (this.enabled) {\n bindClearEvent.call(this);\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', resetFormHandler, this);\n }\n }\n}\n/**\n * To unwire events attached to the MaskedTextBox.\n *\n * @hidden\n */\nexport function unwireEvents() {\n EventHandler.remove(this.element, 'keydown', maskInputKeyDownHandler);\n EventHandler.remove(this.element, 'keypress', maskInputKeyPressHandler);\n EventHandler.remove(this.element, 'keyup', maskInputKeyUpHandler);\n EventHandler.remove(this.element, 'input', maskInputHandler);\n EventHandler.remove(this.element, 'focus', maskInputFocusHandler);\n EventHandler.remove(this.element, 'blur', maskInputBlurHandler);\n EventHandler.remove(this.element, 'paste', maskInputPasteHandler);\n EventHandler.remove(this.element, 'cut', maskInputCutHandler);\n EventHandler.remove(this.element, 'mousedown', maskInputMouseDownHandler);\n EventHandler.remove(this.element, 'mouseup', maskInputMouseUpHandler);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', resetFormHandler);\n }\n}\n/**\n * To bind required events to the MaskedTextBox clearButton.\n *\n * @hidden\n */\nexport function bindClearEvent() {\n if (this.showClearButton) {\n EventHandler.add(this.inputObj.clearButton, 'mousedown touchstart', resetHandler, this);\n }\n}\nfunction resetHandler(e) {\n e.preventDefault();\n if (!this.inputObj.clearButton.classList.contains('e-clear-icon-hide') || (this.inputObj.container.classList.contains('e-static-clear'))) {\n clear.call(this, e);\n this.value = '';\n }\n}\nfunction clear(event) {\n var value = this.element.value;\n setElementValue.call(this, this.promptMask);\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, value);\n this.element.setSelectionRange(0, 0);\n}\nfunction resetFormHandler() {\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n setElementValue.call(this, this.promptMask);\n }\n else {\n this.value = this.initInputValue;\n }\n}\n/**\n * To get masked value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * To extract raw value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function strippedValue(element, maskValues) {\n var value = '';\n var k = 0;\n var checkMask = false;\n var maskValue = (!isNullOrUndefined(maskValues)) ? maskValues : (!isNullOrUndefined(element) &&\n !isNullOrUndefined(this)) ? element.value : maskValues;\n if (maskValue !== this.promptMask) {\n for (var i = 0; i < this.customRegExpCollec.length; i++) {\n if (checkMask) {\n checkMask = false;\n }\n if (this.customRegExpCollec[k] === '>' || this.customRegExpCollec[k] === '<' ||\n this.customRegExpCollec[k] === '|' || this.customRegExpCollec[k] === '\\\\') {\n --i;\n checkMask = true;\n }\n if (!checkMask) {\n if ((maskValue[i] !== this.promptChar) && (!isNullOrUndefined(this.customRegExpCollec[k]) &&\n ((this._callPasteHandler || !isNullOrUndefined(this.regExpCollec[this.customRegExpCollec[k]])) ||\n (this.customRegExpCollec[k].length > 2 && this.customRegExpCollec[k][0] === '[' &&\n this.customRegExpCollec[k][this.customRegExpCollec[k].length - 1] === ']') ||\n (!isNullOrUndefined(this.customCharacters) &&\n (!isNullOrUndefined(this.customCharacters[this.customRegExpCollec[k]]))))) && (maskValue !== '')) {\n value += maskValue[i];\n }\n }\n ++k;\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n value = maskValue;\n }\n return value;\n}\nfunction pushIntoRegExpCollec(value) {\n for (var k = 0; k < value.length; k++) {\n this.hiddenMask += value[k];\n if (value[k] !== '\\\\') {\n this.customRegExpCollec.push(value[k]);\n }\n }\n}\nexport function maskInputMouseDownHandler() {\n this.isClicked = true;\n}\nexport function maskInputMouseUpHandler() {\n this.isClicked = false;\n}\nexport function maskInputFocusHandler(event) {\n var _this = this;\n var inputElement = this.element;\n var startIndex = 0;\n var modelValue = strippedValue.call(this, inputElement);\n var toAllowForward = false;\n var toAllowBackward = false;\n var eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: !isNullOrUndefined(this.inputObj) ? this.inputObj.container : this.inputObj,\n selectionEnd: inputElement.selectionEnd\n };\n if (!this.isClicked) {\n triggerFocus.call(this, eventArgs, inputElement);\n }\n if (this.mask) {\n if (!(!(modelValue === null || modelValue === '') || this.floatLabelType === 'Always' ||\n this.placeholder === null || this.placeholder === '')) {\n inputElement.value = this.promptMask;\n }\n setTimeout(function () {\n if (inputElement.selectionStart === _this.promptMask.length ||\n inputElement.value[inputElement.selectionStart] === _this.promptChar) {\n toAllowForward = true;\n }\n else {\n for (var i = inputElement.selectionStart; i < _this.promptMask.length; i++) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowForward = false;\n break;\n }\n }\n else {\n toAllowForward = true;\n break;\n }\n }\n }\n });\n setTimeout(function () {\n var backSelectionStart = inputElement.selectionStart - 1;\n if (backSelectionStart === _this.promptMask.length - 1 ||\n inputElement.value[backSelectionStart] === _this.promptChar) {\n toAllowBackward = true;\n }\n else {\n for (var i = backSelectionStart; i >= 0; i--) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowBackward = false;\n break;\n }\n }\n else {\n toAllowBackward = true;\n break;\n }\n }\n }\n });\n if ((this.isClicked || (this.floatLabelType !== 'Always' &&\n ((modelValue === null || modelValue === '') &&\n (this.placeholder !== null && this.placeholder !== ''))))) {\n for (startIndex = 0; startIndex < this.promptMask.length; startIndex++) {\n if (inputElement.value[startIndex] === this.promptChar) {\n setTimeout(function () {\n if (toAllowForward || toAllowBackward) {\n inputElement.selectionEnd = startIndex;\n inputElement.selectionStart = startIndex;\n }\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: _this.value,\n maskedValue: inputElement.value,\n container: !isNullOrUndefined(_this.inputObj) ? _this.inputObj.container : _this.inputObj,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(_this, eventArgs, inputElement);\n }, 110);\n break;\n }\n }\n if (isNullOrUndefined(inputElement.value.match(escapeRegExp(this.promptChar)))) {\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: !isNullOrUndefined(this.inputObj) ? this.inputObj.container : this.inputObj,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(this, eventArgs, inputElement);\n }\n this.isClicked = false;\n }\n }\n}\nexport function triggerFocus(eventArgs, inputElement) {\n this.trigger('focus', eventArgs, function (eventArgs) {\n inputElement.selectionStart = eventArgs.selectionStart;\n inputElement.selectionEnd = eventArgs.selectionEnd;\n });\n}\nexport function escapeRegExp(text) {\n return !isNullOrUndefined(text) ? text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&') : text;\n}\nexport function maskInputBlurHandler(event) {\n this.blurEventArgs = {\n event: event,\n value: this.value,\n maskedValue: this.element.value,\n container: !isNullOrUndefined(this.inputObj) ? this.inputObj.container : this.inputObj\n };\n this.trigger('blur', this.blurEventArgs);\n if (this.mask) {\n this.isFocus = false;\n if (this.placeholder && this.element.value === this.promptMask && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.floatLabelType === 'Auto' && !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL)) {\n removeClass([labelElement], TOPLABEL);\n }\n }\n }\n}\nfunction maskInputPasteHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var sIndex_1 = this.element.selectionStart;\n var eIndex_1 = this.element.selectionEnd;\n var oldValue_1 = this.element.value;\n setElementValue.call(this, '');\n this._callPasteHandler = true;\n setTimeout(function () {\n var value = _this.element.value.replace(/ /g, '');\n if (_this.redoCollec.length > 0 && _this.redoCollec[0].value === _this.element.value) {\n value = strippedValue.call(_this, _this.element);\n }\n setElementValue.call(_this, oldValue_1);\n _this.element.selectionStart = sIndex_1;\n _this.element.selectionEnd = eIndex_1;\n var i = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i], false, null);\n ++i;\n } while (i < value.length);\n _this.maskKeyPress = false;\n _this._callPasteHandler = false;\n if (_this.element.value === oldValue_1) {\n var i_1 = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i_1], false, null);\n ++i_1;\n } while (i_1 < value.length);\n _this.maskKeyPress = false;\n }\n else {\n triggerMaskChangeEvent.call(_this, event, oldValue_1);\n }\n }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var preValue_1 = this.element.value;\n var sIndex_2 = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd });\n var value_1 = this.element.value.substring(0, sIndex_2) + this.promptMask.substring(sIndex_2, eIndex) +\n this.element.value.substring(eIndex);\n setTimeout(function () {\n setElementValue.call(_this, value_1);\n _this.element.selectionStart = _this.element.selectionEnd = sIndex_2;\n if (_this.element.value !== preValue_1) {\n triggerMaskChangeEvent.call(_this, event, null);\n }\n }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputHandler(event) {\n if (Browser.isIE === true && this.element.value === '' && this.floatLabelType === 'Never') {\n return;\n }\n var eventArgs = { ctrlKey: false, keyCode: 229 };\n extend(event, eventArgs);\n if (this.mask) {\n if (this.element.value === '') {\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (!this._callPasteHandler) {\n removeMaskInputValues.call(this, event);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var value = this.element.value.substring(startIndex - addedValues, startIndex);\n this.maskKeyPress = false;\n var i = 0;\n do {\n validateValue.call(this, value[i], event.ctrlKey, event);\n ++i;\n } while (i < value.length);\n if (this.element.value !== this.preEleVal) {\n triggerMaskChangeEvent.call(this, event, null);\n }\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (val === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(0, 0);\n }\n }\n}\nfunction maskInputKeyDownHandler(event) {\n if (this.mask && !this.readonly) {\n if (event.keyCode !== 229) {\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n event.preventDefault();\n }\n removeMaskInputValues.call(this, event);\n }\n var startValue = this.element.value;\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n var collec = void 0;\n if (event.keyCode === 90 && this.undoCollec.length > 0 && startValue !== this.undoCollec[this.undoCollec.length - 1].value) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.undoCollec.splice(this.undoCollec.length - 1, 1);\n }\n else if (event.keyCode === 89 && this.redoCollec.length > 0 && startValue !== this.redoCollec[0].value) {\n collec = this.redoCollec[0];\n this.undoCollec.push({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.redoCollec.splice(0, 1);\n }\n }\n }\n}\nexport function mobileRemoveFunction() {\n var collec;\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n collec = this.redoCollec[0];\n setElementValue.call(this, collec.value);\n if ((collec.startIndex - sIndex) === 1) {\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n }\n else {\n this.element.selectionStart = sIndex + 1;\n this.element.selectionEnd = eIndex + 1;\n }\n }\n else {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n }\n}\nfunction autoFillMaskInputValues(isRemove, oldEventVal, event) {\n if (event.type === 'input') {\n isRemove = false;\n oldEventVal = this.element.value;\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, oldEventVal);\n }\n return isRemove;\n}\nfunction removeMaskInputValues(event) {\n var isRemove = false;\n var oldEventVal;\n var isDeleted = false;\n if (this.element.value.length < this.promptMask.length) {\n isRemove = true;\n oldEventVal = this.element.value;\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n mobileRemoveFunction.call(this);\n }\n if (this.element.value.length >= this.promptMask.length && event.type === 'input') {\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n }\n var initStartIndex = this.element.selectionStart;\n var initEndIndex = this.element.selectionEnd;\n var startIndex = this.element.selectionStart;\n var endIndex = this.element.selectionEnd;\n var maskValue = this.hiddenMask.replace(/[>|\\\\<]/g, '');\n var curMask = maskValue[startIndex - 1];\n var deleteEndIndex = this.element.selectionEnd;\n if (isRemove || event.keyCode === 8 || event.keyCode === 46) {\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: endIndex });\n var multipleDel = false;\n var preValue = this.element.value;\n if (startIndex > 0 || ((event.keyCode === 8 || event.keyCode === 46) && startIndex < this.element.value.length\n && ((this.element.selectionEnd - startIndex) !== this.element.value.length))) {\n var index = startIndex;\n if (startIndex !== endIndex) {\n startIndex = endIndex;\n if (event.keyCode === 46) {\n multipleDel = true;\n }\n }\n else if (event.keyCode === 46) {\n ++index;\n }\n else {\n --index;\n }\n for (var k = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? k > index : k < index; (event.keyCode === 8 || isRemove || multipleDel) ? k-- : k++) {\n for (var i = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? i > 0 : i < this.element.value.length; (event.keyCode === 8 || isRemove || multipleDel) ? i-- : i++) {\n var sIndex = void 0;\n if (((event.keyCode === 8 || multipleDel) && ((initStartIndex !== initEndIndex && initStartIndex !== startIndex) ||\n (initStartIndex === initEndIndex))) || isRemove) {\n curMask = maskValue[i - 1];\n sIndex = startIndex - 1;\n }\n else {\n curMask = maskValue[i];\n sIndex = startIndex;\n ++startIndex;\n }\n var oldValue = this.element.value[sIndex];\n if ((isNullOrUndefined(this.regExpCollec[\"\" + curMask]) && (!isNullOrUndefined(this.customCharacters)\n && isNullOrUndefined(this.customCharacters[\"\" + curMask]))\n && ((this.hiddenMask[sIndex] !== this.promptChar && this.customRegExpCollec[sIndex][0] !== '['\n && this.customRegExpCollec[sIndex][this.customRegExpCollec[sIndex].length - 1] !== ']')))\n || (this.promptMask[sIndex] !== this.promptChar && isNullOrUndefined(this.customCharacters))) {\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n ++this.element.selectionStart;\n }\n }\n else {\n var value = this.element.value;\n var prompt_1 = this.promptChar;\n var elementValue = value.substring(0, sIndex) + prompt_1 + value.substring(startIndex, value.length);\n setElementValue.call(this, elementValue);\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n sIndex++;\n }\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n isDeleted = true;\n }\n startIndex = this.element.selectionStart;\n if ((!isDeleted && event.keyCode === 8) || multipleDel || (!isDeleted && !(event.keyCode === 46))) {\n sIndex = startIndex - 1;\n }\n else {\n sIndex = startIndex;\n isDeleted = false;\n }\n oldValue = this.element.value[sIndex];\n if (((initStartIndex !== initEndIndex) && (this.element.selectionStart === initStartIndex))\n || (this.promptMask[sIndex] === this.promptChar) || ((oldValue !== this.promptMask[sIndex]) &&\n (this.promptMask[sIndex] !== this.promptChar) && !isNullOrUndefined(this.customCharacters))) {\n break;\n }\n }\n }\n }\n if (event.keyCode === 46 && multipleDel && isDeleted) {\n this.element.selectionStart = this.element.selectionEnd = deleteEndIndex;\n }\n if (this.element.selectionStart === 0 && (this.element.selectionEnd === this.element.value.length)) {\n setElementValue.call(this, this.promptMask);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = startIndex;\n }\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n if (this.element.value !== preValue) {\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n}\nfunction maskInputKeyPressHandler(event) {\n if (this.mask && !this.readonly) {\n var oldValue = this.element.value;\n if (!(event.ctrlKey || event.metaKey) || ((event.ctrlKey || event.metaKey) && event.code !== 'KeyA' && event.code !== 'KeyY'\n && event.code !== 'KeyZ' && event.code !== 'KeyX' && event.code !== 'KeyC' && event.code !== 'KeyV')) {\n this.maskKeyPress = true;\n var key = event.key;\n if (key === 'Spacebar') {\n key = String.fromCharCode(event.keyCode);\n }\n if (!key) {\n this.isIosInvalid = true;\n validateValue.call(this, String.fromCharCode(event.keyCode), event.ctrlKey, event);\n event.preventDefault();\n this.isIosInvalid = false;\n }\n else if (key && key.length === 1) {\n validateValue.call(this, key, event.ctrlKey, event);\n event.preventDefault();\n }\n if (event.keyCode === 32 && key === ' ' && this.promptChar === ' ') {\n this.element.selectionStart = this.element.selectionEnd = this.element.selectionStart - key.length;\n }\n }\n if (this.element.value !== oldValue) {\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction triggerMaskChangeEvent(event, oldValue) {\n var prevOnChange = this.isProtectedOnChange;\n if (!isNullOrUndefined(this.changeEventArgs) && !this.isInitial) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false, isInteracted: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteracted = true;\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n this.isProtectedOnChange = true;\n this.value = this.changeEventArgs.value;\n this.isProtectedOnChange = prevOnChange;\n merge(eventArgs, this.changeEventArgs);\n /* istanbul ignore next */\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n }\n this.preEleVal = this.element.value;\n this.prevValue = strippedValue.call(this, this.element);\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask && !this.readonly) {\n var collec = void 0;\n if (!this.maskKeyPress && event.keyCode === 229) {\n var oldEventVal = void 0;\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var val_1 = this.element.value.substring(startIndex - addedValues, startIndex);\n if (this.undoCollec.length > 0) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n var startIndex_1 = this.element.selectionStart;\n oldEventVal = collec.value;\n var oldVal = collec.value.substring(startIndex_1 - addedValues, startIndex_1);\n collec = this.redoCollec[0];\n val_1 = val_1.trim();\n var isSpace = Browser.isAndroid && val_1 === '';\n if (!isSpace && oldVal !== val_1 && collec.value.substring(startIndex_1 - addedValues, startIndex_1) !== val_1) {\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n else if (isSpace) {\n preventUnsupportedValues.call(this, event, startIndex_1 - 1, this.element.selectionEnd - 1, val_1, event.ctrlKey, false);\n }\n }\n else {\n oldEventVal = this.promptMask;\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n this.maskKeyPress = false;\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n else {\n removeMaskError.call(this);\n }\n var val = strippedValue.call(this, this.element);\n if (!((this.element.selectionStart === 0) && (this.promptMask === this.element.value) && val === '')\n || (val === '' && this.value !== val)) {\n this.prevValue = val;\n this.value = val;\n }\n }\n else {\n triggerMaskChangeEvent.call(this, event);\n }\n if (this.element.selectionStart === 0 && this.element.selectionEnd === 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var temp_1 = this.element;\n setTimeout(function () {\n temp_1.setSelectionRange(0, 0);\n }, 0);\n }\n}\nfunction mobileSwipeCheck(key) {\n if (key.length > 1 && ((this.promptMask.length + key.length) < this.element.value.length)) {\n var elementValue = this.redoCollec[0].value.substring(0, this.redoCollec[0].startIndex) + key +\n this.redoCollec[0].value.substring(this.redoCollec[0].startIndex, this.redoCollec[0].value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = this.redoCollec[0].startIndex + key.length;\n }\n this.element.selectionStart = this.element.selectionStart - key.length;\n this.element.selectionEnd = this.element.selectionEnd - key.length;\n}\nfunction mobileValidation(key) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\n }\n}\nfunction validateValue(key, isCtrlKey, event) {\n mobileValidation.call(this, key);\n if (isNullOrUndefined(this) || isNullOrUndefined(key)) {\n return;\n }\n var startIndex = this.element.selectionStart;\n var initStartIndex = startIndex;\n var curMask;\n var allowText = false;\n var value = this.element.value;\n var eventOldVal;\n var prevSupport = false;\n var isEqualVal = false;\n for (var k = 0; k < key.length; k++) {\n var keyValue = key[k];\n startIndex = this.element.selectionStart;\n if (!this.maskKeyPress && initStartIndex === startIndex) {\n startIndex = startIndex + k;\n }\n if ((!this.maskKeyPress || startIndex < this.promptMask.length)) {\n for (var i = startIndex; i < this.promptMask.length; i++) {\n var maskValue = this.escapeMaskValue;\n curMask = maskValue[startIndex];\n if (this.hiddenMask[startIndex] === '\\\\' && this.hiddenMask[startIndex + 1] === key) {\n isEqualVal = true;\n }\n if ((isNullOrUndefined(this.regExpCollec[\"\" + curMask]) && (isNullOrUndefined(this.customCharacters)\n || (!isNullOrUndefined(this.customCharacters) && isNullOrUndefined(this.customCharacters[\"\" + curMask])))\n && ((this.hiddenMask[startIndex] !== this.promptChar && this.customRegExpCollec[startIndex][0] !== '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] !== ']')))\n || ((this.promptMask[startIndex] !== this.promptChar) && isNullOrUndefined(this.customCharacters))\n || (this.promptChar === curMask && this.escapeMaskValue === this.mask)) {\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n startIndex = this.element.selectionStart;\n curMask = this.hiddenMask[startIndex];\n }\n }\n if (!isNullOrUndefined(this.customCharacters) && !isNullOrUndefined(this.customCharacters[\"\" + curMask])) {\n var customValStr = this.customCharacters[\"\" + curMask];\n var customValArr = customValStr.split(',');\n for (var i = 0; i < customValArr.length; i++) {\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n }\n else if (!isNullOrUndefined(this.regExpCollec[\"\" + curMask]) && keyValue.match(new RegExp(this.regExpCollec[\"\" + curMask]))\n && this.promptMask[startIndex] === this.promptChar) {\n allowText = true;\n }\n else if (this.promptMask[startIndex] === this.promptChar && this.customRegExpCollec[startIndex][0] === '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] === ']'\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n && keyValue.match(new RegExp(this.customRegExpCollec[startIndex]))) {\n allowText = true;\n }\n if ((!this.maskKeyPress || startIndex < this.hiddenMask.length) && allowText) {\n if (k === 0) {\n if (this.maskKeyPress) {\n this.undoCollec.push({ value: value, startIndex: startIndex, endIndex: startIndex });\n }\n else {\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n eventOldVal = this.redoCollec[0].value;\n setElementValue.call(this, eventOldVal);\n this.undoCollec.push(this.redoCollec[0]);\n }\n else {\n this.undoCollec.push({ value: this.promptMask, startIndex: startIndex, endIndex: startIndex });\n eventOldVal = this.promptMask;\n setElementValue.call(this, eventOldVal);\n }\n this.element.selectionStart = sIndex;\n this.element.selectionEnd = eIndex;\n }\n }\n startIndex = this.element.selectionStart;\n applySupportedValues.call(this, event, startIndex, keyValue, eventOldVal, isEqualVal);\n prevSupport = true;\n if (k === key.length - 1) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n allowText = false;\n }\n else {\n startIndex = this.element.selectionStart;\n preventUnsupportedValues.call(this, event, startIndex, initStartIndex, key, isCtrlKey, prevSupport);\n }\n if (k === key.length - 1 && !allowText) {\n if (!Browser.isAndroid || (Browser.isAndroid && startIndex < this.promptMask.length)) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n }\n }\n else {\n if (key.length === 1 && !isCtrlKey && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n }\n }\n}\nfunction applySupportedValues(event, startIndex, keyValue, eventOldVal, isEqualVal) {\n if (this.hiddenMask.length > this.promptMask.length) {\n keyValue = changeToLowerUpperCase.call(this, keyValue, this.element.value);\n }\n if (!isEqualVal) {\n var value = this.element.value;\n var elementValue = value.substring(0, startIndex) + keyValue + value.substring(startIndex + 1, value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n }\n}\nfunction preventUnsupportedValues(event, sIdx, idx, key, ctrl, chkSupport) {\n if (!this.maskKeyPress) {\n var value = this.element.value;\n if (sIdx >= this.promptMask.length) {\n setElementValue.call(this, value.substring(0, sIdx));\n }\n else {\n if (idx === sIdx) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx + 1, value.length));\n }\n else {\n if (this.promptMask.length === this.element.value.length) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx, value.length));\n }\n else {\n setElementValue.call(this, value.substring(0, idx) + value.substring(idx + 1, value.length));\n }\n }\n this.element.selectionStart = this.element.selectionEnd = (chkSupport ||\n this.element.value[idx] !== this.promptChar) ? sIdx : idx;\n }\n addMaskErrorClass.call(this);\n }\n if (key.length === 1 && !ctrl && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n}\nfunction addMaskErrorClass() {\n var _this = this;\n var parentElement = this.element.parentNode;\n var timer = 200;\n if (parentElement.classList.contains(INPUTGROUP) || parentElement.classList.contains(FLOATINPUT)) {\n addClass([parentElement], ERROR);\n }\n else {\n addClass([this.element], ERROR);\n }\n if (this.isIosInvalid === true) {\n timer = 400;\n }\n attributes(this.element, { 'aria-invalid': 'true' });\n setTimeout(function () {\n if (!_this.maskKeyPress) {\n removeMaskError.call(_this);\n }\n }, timer);\n}\nfunction removeMaskError() {\n var parentElement = this.element.parentNode;\n if (!isNullOrUndefined(parentElement)) {\n removeClass([parentElement], ERROR);\n }\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * Validates user input using masking elements '<' , '>' and '|'.\n *\n * @hidden\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var curVal = value;\n var caseCount = 0;\n for (i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === '\\\\') {\n promptMask = curVal.substring(0, i) + '\\\\' + curVal.substring(i, curVal.length);\n }\n if (this.hiddenMask[i] === '>' || this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|') {\n if (this.hiddenMask[i] !== curVal[i]) {\n promptMask = curVal.substring(0, i) + this.hiddenMask[i] + curVal.substring(i, curVal.length);\n }\n ++caseCount;\n }\n if (promptMask) {\n if (((promptMask[i] === this.promptChar) && (i > this.element.selectionStart)) ||\n (this.element.value.indexOf(this.promptChar) < 0 && (this.element.selectionStart + caseCount) === i)) {\n caseCount = 0;\n break;\n }\n curVal = promptMask;\n }\n }\n while (i >= 0 && promptMask) {\n if (i === 0 || promptMask[i - 1] !== '\\\\') {\n if (promptMask[i] === '>') {\n key = key.toUpperCase();\n break;\n }\n else if (promptMask[i] === '<') {\n key = key.toLowerCase();\n break;\n }\n else if (promptMask[i] === '|') {\n break;\n }\n }\n --i;\n }\n return key;\n}\n/**\n * To set updated values in the MaskedTextBox.\n *\n * @hidden\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (this.prevValue === undefined || this.prevValue !== val)) {\n this.maskKeyPress = true;\n setElementValue.call(this, this.promptMask);\n if (val !== '' && !(val === null && this.floatLabelType === 'Never' && this.placeholder)) {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n if (val !== null) {\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\n }\n var newVal = strippedValue.call(this, this.element);\n this.prevValue = newVal;\n this.value = newVal;\n triggerMaskChangeEvent.call(this, null, null);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' && this.placeholder &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n}\n/**\n * To set updated values in the input element.\n *\n * @hidden\n */\nexport function setElementValue(val, element) {\n if (!this.isFocus && this.floatLabelType === 'Auto' && this.placeholder && isNullOrUndefined(this.value)) {\n val = '';\n }\n var value = strippedValue.call(this, (element ? element : this.element), val);\n if (value === null || value === '') {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, false);\n if (this.showClearButton) {\n this.inputObj.clearButton.classList.add('e-clear-icon-hide');\n }\n }\n else {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n }\n}\n/**\n * Provide mask support to input textbox through utility method.\n *\n * @hidden\n */\nexport function maskInput(args) {\n var inputEle = getMaskInput(args);\n applyMask.call(inputEle);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (args.mask) {\n unwireEvents.call(inputEle);\n wireEvents.call(inputEle);\n }\n}\nfunction getMaskInput(args) {\n addClass([args.element], UTILMASK);\n var inputEle = {\n element: args.element,\n mask: args.mask,\n promptMask: '',\n hiddenMask: '',\n escapeMaskValue: '',\n promptChar: args.promptChar ? (args.promptChar.length > 1) ? args.promptChar = args.promptChar[0]\n : args.promptChar : '_',\n value: args.value ? args.value : null,\n regExpCollec: regularExpressions,\n customRegExpCollec: [],\n customCharacters: args.customCharacters,\n undoCollec: [],\n redoCollec: [],\n maskKeyPress: false,\n prevValue: ''\n };\n createMask.call(inputEle);\n return inputEle;\n}\n/**\n * Gets raw value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * Gets masked value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * Arguments to perform undo and redo functionalities.\n *\n * @hidden\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar maskUndo = new MaskUndo();\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Event, Property, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, setValue, addClass, detach } from '@syncfusion/ej2-base';\nimport { removeClass, Browser, closest } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nimport { regularExpressions, createMask, applyMask, wireEvents, unwireEvents, unstrippedValue, strippedValue } from '../base/index';\nimport { setMaskValue, setElementValue, bindClearEvent } from '../base/index';\nvar ROOT = 'e-control-wrapper e-mask';\nvar INPUT = 'e-input';\nvar COMPONENT = 'e-maskedtextbox';\nvar CONTROL = 'e-control';\nvar MASKINPUT_FOCUS = 'e-input-focus';\nvar wrapperAttr = ['title', 'style', 'class'];\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n /**\n *\n * @param {MaskedTextBoxModel} options - Specifies the MaskedTextBox model.\n * @param {string | HTMLElement | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function MaskedTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initInputValue = '';\n _this.isAngular = false;\n _this.preventChange = false;\n _this.isClicked = false;\n _this.maskOptions = options;\n return _this;\n }\n /**\n * Gets the component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.preRender = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.regExpCollec = regularExpressions;\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n this.changeEventArgs = {};\n this.focusEventArgs = {};\n this.blurEventArgs = {};\n this.maskKeyPress = false;\n this.isFocus = false;\n this.isInitial = false;\n this.isIosInvalid = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n for (var i = 0; i < this.element.attributes.length; i++) {\n input.setAttribute(this.element.attributes[i].nodeName, this.element.attributes[i].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-maskedtextbox');\n this.element.classList.add('e-mask-container');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkHtmlAttributes(false);\n if (this.formElement) {\n this.initInputValue = this.value;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Initializes the component rendering.\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n if (this.floatLabelType === 'Never') {\n addClass([this.element], INPUT);\n }\n this.createWrapper();\n this.updateHTMLAttrToWrapper();\n if (this.element.name === '') {\n this.element.setAttribute('name', this.element.id);\n }\n this.isInitial = true;\n this.resetMaskedTextBox();\n this.isInitial = false;\n this.setMaskPlaceholder(true, false);\n this.setWidth(this.width);\n this.preEleVal = this.element.value;\n if (!Browser.isDevice && (Browser.info.version === '11.0' || Browser.info.name === 'edge')) {\n this.element.blur();\n }\n if (Browser.isDevice && Browser.isIos) {\n this.element.blur();\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n }\n if (!isNullOrUndefined(closest(this.element, \"fieldset\")) && closest(this.element, \"fieldset\").disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n }\n };\n MaskedTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n MaskedTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getValidClassList(newClass), [this.inputObj.container], this.getValidClassList(oldClass));\n };\n MaskedTextBox.prototype.getValidClassList = function (maskClassName) {\n var result = maskClassName;\n if (!isNullOrUndefined(maskClassName) && maskClassName !== '') {\n result = (maskClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n MaskedTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputObj.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var maskStyle = this.inputObj.container.getAttribute(key);\n maskStyle = !isNullOrUndefined(maskStyle) ? (maskStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputObj.container.setAttribute(key, maskStyle);\n }\n else {\n this.inputObj.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n MaskedTextBox.prototype.resetMaskedTextBox = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n if (this.promptChar.length > 1) {\n this.promptChar = this.promptChar[0];\n }\n createMask.call(this);\n applyMask.call(this);\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (!this.isInitial) {\n unwireEvents.call(this);\n }\n wireEvents.call(this);\n };\n MaskedTextBox.prototype.setMaskPlaceholder = function (setVal, dynamicPlaceholder) {\n if (dynamicPlaceholder || this.placeholder) {\n Input.setPlaceholder(this.placeholder, this.element);\n if ((this.element.value === this.promptMask && setVal && this.floatLabelType !== 'Always') ||\n this.element.value === this.promptMask && this.floatLabelType === 'Never') {\n setElementValue.call(this, '');\n }\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.inputObj.container.style.width = formatUnit(width);\n this.element.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n var elementWidth = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n this.inputObj.container.style.width = elementWidth;\n this.element.style.width = elementWidth;\n }\n }\n };\n MaskedTextBox.prototype.checkHtmlAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes)\n : ['placeholder', 'disabled', 'value', 'readonly'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'placeholder':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['enabled'] === undefined)) || isDynamic) {\n var isEnabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: isEnabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['value'] === undefined)) || isDynamic) {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['readonly'] === undefined)) || isDynamic) {\n var isReadonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: isReadonly }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = this.getValidClassList(this.cssClass);\n }\n this.inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('class', ROOT + ' ' + this.inputObj.container.getAttribute('class'));\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {MaskedTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {MaskedTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @hidden\n */\n MaskedTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n setMaskValue.call(this, this.value);\n if (this.placeholder && !this.isFocus) {\n this.setMaskPlaceholder(false, false);\n }\n if (this.value === \"\") {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.element, this.inputObj.container);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element, this.floatLabelType, this.inputObj.container);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.inputObj.container]);\n break;\n case 'customCharacters':\n this.customCharacters = newProp.customCharacters;\n this.resetMaskedTextBox();\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputObj, undefined, this.createElement);\n bindClearEvent.call(this);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputObj);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'mask':\n {\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\n }\n break;\n case 'promptChar': {\n if (newProp.promptChar.length > 1) {\n newProp.promptChar = newProp.promptChar[0];\n }\n if (newProp.promptChar) {\n this.promptChar = newProp.promptChar;\n }\n else {\n this.promptChar = '_';\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n this.promptMask = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n this.undoCollec = this.redoCollec = [];\n setElementValue.call(this, value);\n break;\n }\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.isFocus = true;\n this.element.focus();\n addClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.isFocus = false;\n this.element.blur();\n removeClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'aria-disabled', 'autocapitalize', 'spellcheck', 'aria-autocomplete', 'aria-live', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n if (this.inputObj) {\n this.inputObj.container.insertAdjacentElement('afterend', this.element);\n detach(this.inputObj.container);\n }\n this.blurEventArgs = null;\n Input.destroy();\n this.changeEventArgs = null;\n this.inputObj = null;\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], MaskedTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property({})\n ], MaskedTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], MaskedTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"mask\", void 0);\n __decorate([\n Property('_')\n ], MaskedTextBox.prototype, \"promptChar\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"customCharacters\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"blur\", void 0);\n MaskedTextBox = __decorate([\n NotifyPropertyChanges\n ], MaskedTextBox);\n return MaskedTextBox;\n}(Component));\nexport { MaskedTextBox };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? 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// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { EventHandler, Property, Event, addClass, Browser, removeClass, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, NotifyPropertyChanges, getValue, setValue } from '@syncfusion/ej2-base';\nimport { DropDownList, dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { Search } from '../common/incremental-search';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nvar SPINNER_CLASS = 'e-atc-spinner-icon';\ndropDownListClasses.root = 'e-combobox';\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The ComboBox component allows the user to type a value or choose an option from the list of predefined options.\n * ```html\n * \n * ```\n * ```typescript\n * let games:ComboBox = new ComboBox();\n * games.appendTo(\"#list\");\n * ```\n */\nvar ComboBox = /** @class */ (function (_super) {\n __extends(ComboBox, _super);\n /**\n * *Constructor for creating the component\n *\n * @param {ComboBoxModel} options - Specifies the ComboBox model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function ComboBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n ComboBox.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ComboBox.prototype.getLocaleName = function () {\n return 'combo-box';\n };\n ComboBox.prototype.wireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur, this);\n EventHandler.add(this.inputWrapper.container, 'blur', this.onBlurHandler, this);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick, this);\n }\n EventHandler.add(this.inputElement, 'focus', this.targetFocus, this);\n if (!this.readonly) {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n EventHandler.add(this.inputElement, 'paste', this.pasteHandler, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n }\n this.bindCommonEvent();\n };\n ComboBox.prototype.preventBlur = function (e) {\n if ((!this.allowFiltering && document.activeElement !== this.inputElement &&\n !document.activeElement.classList.contains(dropDownListClasses.input) && Browser.isDevice || !Browser.isDevice)) {\n e.preventDefault();\n }\n };\n ComboBox.prototype.onBlurHandler = function (e) {\n var inputValue = this.inputElement && this.inputElement.value === '' ?\n null : this.inputElement && this.inputElement.value;\n if (!isNullOrUndefined(this.listData) && !isNullOrUndefined(inputValue) && inputValue !== this.text) {\n this.customValue(e);\n }\n _super.prototype.onBlurHandler.call(this, e);\n };\n ComboBox.prototype.targetElement = function () {\n return this.inputElement;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ComboBox.prototype.setOldText = function (text) {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n this.removeSelection();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ComboBox.prototype.setOldValue = function (value) {\n if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n this.removeSelection();\n this.setHiddenValue();\n };\n ComboBox.prototype.valueMuteChange = function (value) {\n var inputValue = isNullOrUndefined(value) ? null : value.toString();\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value, text: value, index: null }, true);\n this.activeIndex = this.index;\n var fields = this.fields;\n var dataItem = {};\n dataItem[fields.text] = isNullOrUndefined(value) ? null : value.toString();\n dataItem[fields.value] = isNullOrUndefined(value) ? null : value.toString();\n this.itemData = dataItem;\n this.item = null;\n if (this.previousValue !== this.value) {\n this.detachChangeEvent(null);\n }\n };\n ComboBox.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n var li = this.getElementByValue(this.value);\n if (li) {\n this.setSelection(li, null);\n }\n else if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var li = this.getElementByText(this.text);\n if (li) {\n this.setSelection(li, null);\n }\n else {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n ComboBox.prototype.updateIconState = function () {\n if (this.showClearButton) {\n if (this.inputElement && this.inputElement.value !== '' && !this.readonly) {\n removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n else {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n };\n ComboBox.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'role': 'combobox',\n 'aria-autocomplete': 'both',\n 'aria-labelledby': this.hiddenElement.id,\n 'aria-expanded': 'false',\n 'aria-readonly': this.readonly.toString(),\n 'autocomplete': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n };\n return ariaAttributes;\n };\n ComboBox.prototype.searchLists = function (e) {\n this.isTyped = true;\n if (this.isFiltering()) {\n _super.prototype.searchLists.call(this, e);\n if (this.ulElement && this.filterInput.value.trim() === '') {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n }\n else {\n if (this.ulElement && this.inputElement.value === '' && this.preventAutoFill) {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n this.incrementalSearch(e);\n }\n };\n ComboBox.prototype.getNgDirective = function () {\n return 'EJS-COMBOBOX';\n };\n ComboBox.prototype.setSearchBox = function () {\n this.filterInput = this.inputElement;\n var searchBoxContainer = (this.isFiltering() || (this.isReact && this.getModuleName() === 'combobox')) ? this.inputWrapper : inputObject;\n return searchBoxContainer;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ComboBox.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n var _this = this;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isSelectCustom) {\n this.removeSelection();\n }\n if (!this.preventAutoFill && this.getModuleName() === 'combobox' && this.isTyped) {\n setTimeout(function () {\n _this.inlineSearch();\n });\n }\n };\n ComboBox.prototype.getFocusElement = function () {\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = !isNullOrUndefined(this.list) ? this.list.querySelector('.' + dropDownListClasses.selected) : this.list;\n var isSelected = dataItem.text === this.inputElement.value && !isNullOrUndefined(selected);\n if (isSelected) {\n return selected;\n }\n if ((Browser.isDevice && !this.isDropDownClick || !Browser.isDevice) &&\n !isNullOrUndefined(this.liCollections) && this.liCollections.length > 0) {\n var inputValue = this.inputElement.value;\n var dataSource = this.sortedData;\n var type = this.typeOfData(dataSource).typeof;\n var activeItem = Search(inputValue, this.liCollections, this.filterType, true, dataSource, this.fields, type);\n var activeElement = activeItem.item;\n if (!isNullOrUndefined(activeElement)) {\n var count = this.getIndexByValue(activeElement.getAttribute('data-value')) - 1;\n var height = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n if (!isNaN(height) && this.getModuleName() !== 'autocomplete') {\n this.removeFocus();\n var fixedHead = this.fields.groupBy ? this.liCollections[0].offsetHeight : 0;\n this.list.scrollTop = count * height + fixedHead;\n addClass([activeElement], dropDownListClasses.focus);\n }\n }\n else {\n if (this.isSelectCustom && this.inputElement.value.trim() !== '') {\n this.removeFocus();\n this.list.scrollTop = 0;\n }\n }\n return activeElement;\n }\n else {\n return null;\n }\n };\n ComboBox.prototype.setValue = function (e) {\n if (e && e.type === 'keydown' && e.action === 'enter') {\n this.removeFillSelection();\n }\n if (this.autofill && this.getModuleName() === 'combobox' && e && e.type === 'keydown' && e.action !== 'enter') {\n this.preventAutoFill = false;\n this.inlineSearch(e);\n return false;\n }\n else {\n return _super.prototype.setValue.call(this, e);\n }\n };\n ComboBox.prototype.checkCustomValue = function () {\n this.itemData = this.getDataByValue(this.value);\n var dataItem = this.getItemData();\n if (!(this.allowCustom && isNullOrUndefined(dataItem.value) && isNullOrUndefined(dataItem.text))) {\n this.setProperties({ 'value': dataItem.value }, !this.allowCustom);\n }\n };\n /**\n * Shows the spinner loader.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = (this.getModuleName() === 'autocomplete') ? (this.inputWrapper.buttons[0] ||\n this.inputWrapper.clearButton ||\n Input.appendSpan('e-input-group-icon ' + SPINNER_CLASS, this.inputWrapper.container, this.createElement)) :\n (this.inputWrapper.buttons[0] || this.inputWrapper.clearButton);\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n }, this.createElement);\n showSpinner(this.spinnerElement);\n }\n };\n /**\n * Hides the spinner loader.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n ComboBox.prototype.setAutoFill = function (activeElement, isHover) {\n if (!isHover) {\n this.setHoverList(activeElement);\n }\n if (this.autofill && !this.preventAutoFill) {\n var currentValue = this.getTextByValue(activeElement.getAttribute('data-value')).toString();\n var currentFillValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n if (this.getModuleName() === 'combobox') {\n if (!this.isSelected && this.previousValue !== currentFillValue) {\n this.updateSelectedItem(activeElement, null);\n this.isSelected = true;\n this.previousValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n }\n else {\n this.updateSelectedItem(activeElement, null, true);\n }\n }\n if (!this.isAndroidAutoFill(currentValue)) {\n this.setAutoFillSelection(currentValue, isHover);\n }\n }\n };\n ComboBox.prototype.isAndroidAutoFill = function (value) {\n if (Browser.isAndroid) {\n var currentPoints = this.getSelectionPoints();\n var prevEnd = this.prevSelectPoints.end;\n var curEnd = currentPoints.end;\n var prevStart = this.prevSelectPoints.start;\n var curStart = currentPoints.start;\n if (prevEnd !== 0 && ((prevEnd === value.length && prevStart === value.length) ||\n (prevStart > curStart && prevEnd > curEnd) || (prevEnd === curEnd && prevStart === curStart))) {\n return true;\n }\n else {\n return false;\n }\n }\n else {\n return false;\n }\n };\n ComboBox.prototype.clearAll = function (e, property) {\n if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n _super.prototype.clearAll.call(this, e);\n }\n if (this.isFiltering() && !isNullOrUndefined(e) && e.target === this.inputWrapper.clearButton) {\n this.searchLists(e);\n }\n };\n ComboBox.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n ComboBox.prototype.inlineSearch = function (e) {\n var isKeyNavigate = (e && (e.action === 'down' || e.action === 'up' ||\n e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown'));\n var activeElement = isKeyNavigate ? this.liCollections[this.activeIndex] : this.getFocusElement();\n if (!isNullOrUndefined(activeElement)) {\n if (!isKeyNavigate) {\n var value = this.getFormattedValue(activeElement.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.activeIndex = !isNullOrUndefined(this.activeIndex) ? this.activeIndex : null;\n }\n this.preventAutoFill = this.inputElement.value === '' ? false : this.preventAutoFill;\n this.setAutoFill(activeElement, isKeyNavigate);\n }\n else if (this.inputElement.value === '') {\n this.activeIndex = null;\n if (!isNullOrUndefined(this.list)) {\n this.list.scrollTop = 0;\n var focusItem = this.list.querySelector('.' + dropDownListClasses.li);\n this.setHoverList(focusItem);\n }\n }\n else {\n this.activeIndex = null;\n this.removeSelection();\n if (this.liCollections && this.liCollections.length > 0 && !this.isCustomFilter) {\n this.removeFocus();\n }\n }\n };\n ComboBox.prototype.incrementalSearch = function (e) {\n this.showPopup(e);\n if (!isNullOrUndefined(this.listData)) {\n this.inlineSearch(e);\n e.preventDefault();\n }\n };\n ComboBox.prototype.setAutoFillSelection = function (currentValue, isKeyNavigate) {\n if (isKeyNavigate === void 0) { isKeyNavigate = false; }\n var selection = this.getSelectionPoints();\n var value = this.inputElement.value.substr(0, selection.start);\n if (value && (value.toLowerCase() === currentValue.substr(0, selection.start).toLowerCase())) {\n var inputValue = value + currentValue.substr(value.length, currentValue.length);\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(selection.start, this.inputElement.value.length);\n }\n else if (isKeyNavigate) {\n Input.setValue(currentValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(0, this.inputElement.value.length);\n }\n };\n ComboBox.prototype.getValueByText = function (text) {\n return _super.prototype.getValueByText.call(this, text, true, this.ignoreAccent);\n };\n ComboBox.prototype.unWireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur);\n EventHandler.remove(this.inputWrapper.container, 'blur', this.onBlurHandler);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick);\n }\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'focus', this.targetFocus);\n if (!this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n EventHandler.remove(this.inputElement, 'paste', this.pasteHandler);\n EventHandler.remove(window, 'resize', this.windowResize);\n }\n }\n this.unBindCommonEvent();\n };\n ComboBox.prototype.setSelection = function (li, e) {\n _super.prototype.setSelection.call(this, li, e);\n if (!isNullOrUndefined(li) && !this.autofill && !this.isDropDownClick) {\n this.removeFocus();\n }\n };\n ComboBox.prototype.selectCurrentItem = function (e) {\n var li;\n if (this.isPopupOpen) {\n if (this.isSelected) {\n li = this.list.querySelector('.' + dropDownListClasses.selected);\n }\n else {\n li = this.list.querySelector('.' + dropDownListClasses.focus);\n }\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n }\n if (e.action === 'enter' && this.inputElement.value.trim() === '') {\n this.clearAll(e);\n }\n else if (this.isTyped && !this.isSelected && isNullOrUndefined(li)) {\n this.customValue(e);\n }\n this.hidePopup(e);\n };\n ComboBox.prototype.setHoverList = function (li) {\n this.removeSelection();\n if (this.isValidLI(li) && !li.classList.contains(dropDownListClasses.selected)) {\n this.removeFocus();\n li.classList.add(dropDownListClasses.focus);\n }\n };\n ComboBox.prototype.targetFocus = function (e) {\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = false;\n }\n this.onFocus(e);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n };\n ComboBox.prototype.dropDownClick = function (e) {\n e.preventDefault();\n if (Browser.isDevice && !this.isFiltering()) {\n this.preventFocus = true;\n }\n _super.prototype.dropDownClick.call(this, e);\n };\n ComboBox.prototype.customValue = function (e) {\n var _this = this;\n var value = this.getValueByText(this.inputElement.value);\n if (!this.allowCustom && this.inputElement.value !== '') {\n var previousValue = this.previousValue;\n var currentValue = this.value;\n this.setProperties({ value: value });\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n if (this.autofill && previousValue === this.value && currentValue !== this.value) {\n this.onChangeEvent(null);\n }\n }\n else if (this.inputElement.value.trim() !== '') {\n var previousValue_1 = this.value;\n if (isNullOrUndefined(value)) {\n var value_1 = this.inputElement.value === '' ? null : this.inputElement.value;\n // eslint-disable-next-line max-len\n var eventArgs = { text: value_1, item: {} };\n if (!this.initial) {\n this.trigger('customValueSpecifier', eventArgs, function (eventArgs) {\n _this.updateCustomValueCallback(value_1, eventArgs, previousValue_1, e);\n });\n }\n else {\n this.updateCustomValueCallback(value_1, eventArgs, previousValue_1);\n }\n }\n else {\n this.isSelectCustom = false;\n this.setProperties({ value: value });\n if (previousValue_1 !== this.value) {\n this.onChangeEvent(e);\n }\n }\n }\n else if (this.allowCustom) {\n this.isSelectCustom = true;\n }\n };\n ComboBox.prototype.updateCustomValueCallback = function (value, eventArgs, previousValue, e) {\n var fields = this.fields;\n var item = eventArgs.item;\n var dataItem = {};\n if (item && getValue(fields.text, item) && getValue(fields.value, item)) {\n dataItem = item;\n }\n else {\n setValue(fields.text, value, dataItem);\n setValue(fields.value, value, dataItem);\n }\n this.itemData = dataItem;\n var changeData = {\n text: getValue(fields.text, this.itemData),\n value: getValue(fields.value, this.itemData),\n index: null\n };\n this.setProperties(changeData, true);\n this.setSelection(null, null);\n this.isSelectCustom = true;\n if (previousValue !== this.value) {\n this.onChangeEvent(e);\n }\n };\n /**\n * Dynamically change the value of properties.\n *\n * @param {ComboBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {ComboBoxModel} oldProp - Returns the previous property value of the component.\n * @private\n * @returns {void}\n */\n ComboBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'combobox') {\n this.checkData(newProp);\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n if (this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n else {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\n this.setReadOnly();\n break;\n case 'allowFiltering':\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n break;\n case 'allowCustom':\n break;\n default: {\n // eslint-disable-next-line max-len\n var comboProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, comboProps.newProperty, comboProps.oldProperty);\n if (this.isFiltering() && prop === 'dataSource' && isNullOrUndefined(this.list) && this.itemTemplate &&\n this.getModuleName() === 'combobox') {\n _super.prototype.renderList.call(this);\n }\n break;\n }\n }\n }\n };\n /**\n * To initialize the control rendering.\n *\n * @private\n * @returns {void}\n */\n ComboBox.prototype.render = function () {\n _super.prototype.render.call(this);\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n this.renderComplete();\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n ComboBox.prototype.getModuleName = function () {\n return 'combobox';\n };\n /**\n * Adds a new item to the combobox popup list. By default, new item appends to the list as the last item,\n * but you can insert based on the index parameter.\n *\n * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n * @returns {void}\n\n */\n ComboBox.prototype.addItem = function (items, itemIndex) {\n _super.prototype.addItem.call(this, items, itemIndex);\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {Object[] | DataManager } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n\n */\n ComboBox.prototype.filter = function (dataSource, query, fields) {\n _super.prototype.filter.call(this, dataSource, query, fields);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup that displays the list of items.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.showPopup = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n _super.prototype.showPopup.call(this, e);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Hides the popup if it is in open state.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.hidePopup = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n var inputValue = this.inputElement && this.inputElement.value === '' ? null\n : this.inputElement && this.inputElement.value;\n if (!isNullOrUndefined(this.listData)) {\n var isEscape = this.isEscapeKey;\n if (this.isEscapeKey) {\n Input.setValue(this.typedString, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n }\n if (this.autofill) {\n this.removeFillSelection();\n }\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = !isNullOrUndefined(this.list) ? this.list.querySelector('.' + dropDownListClasses.selected) : null;\n if (this.inputElement && dataItem.text === this.inputElement.value && !isNullOrUndefined(selected)) {\n if (this.isSelected) {\n this.onChangeEvent(e);\n this.isSelectCustom = false;\n }\n _super.prototype.hidePopup.call(this, e);\n return;\n }\n if (this.getModuleName() === 'combobox' && this.inputElement.value.trim() !== '') {\n var dataSource = this.sortedData;\n var type = this.typeOfData(dataSource).typeof;\n var searchItem = Search(this.inputElement.value, this.liCollections, 'Equal', true, dataSource, this.fields, type);\n this.selectedLI = searchItem.item;\n if (isNullOrUndefined(searchItem.index)) {\n searchItem.index = Search(this.inputElement.value, this.liCollections, 'StartsWith', true, dataSource, this.fields, type).index;\n }\n this.activeIndex = searchItem.index;\n if (!isNullOrUndefined(this.selectedLI)) {\n this.updateSelectedItem(this.selectedLI, null, true);\n }\n else if (isEscape) {\n this.isSelectCustom = true;\n this.removeSelection();\n }\n }\n if (!this.isEscapeKey && this.isTyped && !this.isInteracted) {\n this.customValue(e);\n }\n }\n if (isNullOrUndefined(this.listData) && this.allowCustom && !isNullOrUndefined(inputValue) && inputValue !== this.value) {\n this.customValue();\n }\n _super.prototype.hidePopup.call(this, e);\n };\n /**\n * Sets the focus to the component for interaction.\n *\n * @returns {void}\n */\n ComboBox.prototype.focusIn = function () {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice && !this.isFiltering()) {\n this.preventFocus = true;\n }\n _super.prototype.focusIn.call(this);\n };\n /**\n * Allows you to clear the selected values from the component.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.clear = function () {\n this.value = null;\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Moves the focus from the component if the component is already focused.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.focusOut = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n _super.prototype.focusOut.call(this, e);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets all the list items bound on this component.\n *\n * @returns {Element[]}\n\n */\n ComboBox.prototype.getItems = function () {\n return _super.prototype.getItems.call(this);\n };\n /**\n * Gets the data Object that matches the given value.\n *\n * @param { string | number } value - Specifies the value of the list item.\n * @returns {Object}\n\n */\n ComboBox.prototype.getDataByValue = function (value) {\n return _super.prototype.getDataByValue.call(this, value);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n ComboBox.prototype.renderHightSearch = function () {\n // update high light search\n };\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"autofill\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"allowCustom\", void 0);\n __decorate([\n Property({})\n ], ComboBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"index\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"customValueSpecifier\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property('Never')\n ], ComboBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('100%')\n ], ComboBox.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], ComboBox.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], ComboBox.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"value\", void 0);\n ComboBox = __decorate([\n NotifyPropertyChanges\n ], ComboBox);\n return ComboBox;\n}(DropDownList));\nexport { ComboBox };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, getValue, closest } from '@syncfusion/ej2-base';\nimport { attributes } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { appendChildren } from '../base/util';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport * as events from '../base/constant';\n/**\n * FilterCellRenderer class which responsible for building filter cell.\n *\n * @hidden\n */\nvar FilterCellRenderer = /** @class */ (function (_super) {\n __extends(FilterCellRenderer, _super);\n function FilterCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-filterbarcell' });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n *\n * @returns {string} returns the gui\n */\n FilterCellRenderer.prototype.getGui = function () {\n return this.parent.createElement('div');\n };\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell\n * @param {Object} data\n */\n /* tslint:disable-next-line:max-func-body-length */\n FilterCellRenderer.prototype.render = function (cell, data) {\n var tr = this.parent.element.querySelector('.e-filterbar');\n var node = this.element.cloneNode();\n var innerDIV = this.getGui();\n var input;\n var column = cell.column;\n tr.appendChild(node);\n node.setAttribute('e-mappinguid', column.uid);\n if (column.filterTemplate) {\n var fltrData = {};\n if (data) {\n fltrData[column.field] = data[column.field];\n }\n var col = 'column';\n fltrData[\"\" + col] = column;\n if (column.visible) {\n var isReactCompiler = this.parent.isReact && typeof (column.filterTemplate) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n var tempID = this.parent.element.id + column.uid + 'filterTemplate';\n if (isReactCompiler || isReactChild) {\n column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID, null, null, node);\n this.parent.renderTemplates();\n }\n else {\n var element = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID);\n appendChildren(node, element);\n }\n }\n else {\n node.classList.add('e-hide');\n }\n }\n else {\n if (column.type !== 'checkbox') {\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n node.classList.add('e-fltrtemp');\n attributes(innerDIV, {\n 'class': 'e-fltrtempdiv'\n });\n if (isNullOrUndefined(column.filterBarTemplate.create)) {\n input = this.parent.createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filterUi_input e-filtertext e-fltrTemp',\n attrs: { type: 'search', title: column.headerText }\n });\n innerDIV.appendChild(input);\n }\n else {\n var args = { column: column, node: Element };\n var temp = column.filterBarTemplate.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n input = temp(args);\n if (typeof input === 'string') {\n var div = this.parent.createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n attributes(innerDIV, {\n class: 'e-filterUi_input e-filtertext e-fltrTemp',\n title: column.headerText,\n id: column.field + '_filterBarcell'\n });\n innerDIV.appendChild(input);\n }\n }\n else {\n attributes(innerDIV, {\n 'class': 'e-filterdiv e-fltrinputdiv'\n });\n input = this.parent.createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filtertext',\n attrs: {\n type: 'search', title: column.headerText + cell.attributes.title,\n value: data[cell.column.field] ? data[cell.column.field] : '', role: 'search'\n }\n });\n innerDIV.appendChild(input);\n var args = {\n element: input, floatLabelType: 'Never',\n properties: {\n enableRtl: this.parent.enableRtl, showClearButton: true, cssClass: this.parent.cssClass\n }\n };\n Input.createInput(args, this.parent.createElement);\n }\n //TODO: apply intial filtering\n if (column.allowFiltering === false || column.field === '' || isNullOrUndefined(column.field)) {\n input.setAttribute('disabled', 'true');\n input.classList.add('e-disable');\n }\n var clearIconElem = innerDIV.querySelector('.e-clear-icon');\n if (clearIconElem) {\n clearIconElem.setAttribute('title', this.parent.localeObj.getConstant('ClearButton'));\n }\n if (!column.visible) {\n node.classList.add('e-hide');\n }\n this.appendHtml(node, innerDIV);\n // render's the dropdownlist component if showFilterBarOperator sets to true\n if (this.parent.filterSettings.showFilterBarOperator && this.parent.filterSettings.type === 'FilterBar' &&\n !this.parent.isPrinting && isNullOrUndefined(column.filterTemplate) && isNullOrUndefined(column.filterBarTemplate)) {\n this.operatorIconRender(innerDIV, column, cell);\n }\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n var templateWrite = column.filterBarTemplate.write;\n var args = { element: input, column: column };\n if (typeof templateWrite === 'string') {\n templateWrite = getValue(templateWrite, window);\n }\n templateWrite.call(this, args);\n }\n }\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n *\n * @param {Element} node - specifies the node\n * @param {string|Element} innerHtml - specifies the innerHTML\n * @returns {Element} retruns the element\n */\n FilterCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n FilterCellRenderer.prototype.operatorIconRender = function (innerDIV, column, cell) {\n var gObj = this.parent;\n var operators;\n var fbicon = this.parent.createElement('input', {\n className: ' e-filterbaroperator e-icons e-icon-filter',\n id: cell.column.uid\n });\n innerDIV.querySelector('span').appendChild(fbicon);\n if (column.filter && column.filter.operator) {\n operators = column.filter.operator;\n }\n else if (gObj.filterSettings.columns.length) {\n for (var i = 0, a = gObj.filterSettings.columns; i < a.length; i++) {\n var col = a[parseInt(i.toString(), 10)];\n if (col.field === column.field) {\n operators = col.operator;\n }\n else {\n operators = 'equal';\n }\n }\n }\n else {\n operators = 'equal';\n }\n if (!isNullOrUndefined(gObj.filterModule.operators[column.field])) {\n operators = gObj.filterModule.operators[column.field];\n }\n this.dropOptr = new DropDownList({\n fields: { text: 'text', value: 'value' },\n popupHeight: 'auto',\n value: operators,\n width: '0px',\n enabled: column.allowFiltering,\n popupWidth: 'auto',\n enableRtl: this.parent.enableRtl,\n change: this.internalEvent.bind(this),\n beforeOpen: function () {\n var operator = gObj.filterModule.customOperators;\n this.dataSource = operator[gObj.getColumnByUid(this.element.id).type + 'Operator'];\n for (var i = 0; i < this.dataSource.length; i++) {\n if (column.filter && column.filter.operator && isNullOrUndefined(gObj.filterModule.operators[column.field]) &&\n this.dataSource[parseInt(i.toString(), 10)].value === column.filter.operator) {\n this.value = column.filter.operator;\n }\n }\n },\n cssClass: this.parent.cssClass ? 'e-popup-flbar' + ' ' + this.parent.cssClass : 'e-popup-flbar'\n });\n this.dropOptr.appendTo(fbicon);\n var spanElmt = closest(this.dropOptr.element, 'span');\n spanElmt.classList.add('e-filterbardropdown');\n spanElmt.removeAttribute('tabindex');\n };\n FilterCellRenderer.prototype.internalEvent = function (e) {\n var gObj = this.parent;\n var col = gObj.getColumnByUid(e.element.getAttribute('id'));\n e.column = col;\n gObj.filterModule.operators[col.field] = e.value;\n gObj.notify(events.getFilterBarOperator, e);\n };\n return FilterCellRenderer;\n}(CellRenderer));\nexport { FilterCellRenderer };\n","import { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * `filter operators` render boolean column.\n *\n * @hidden\n */\nvar FlMenuOptrUI = /** @class */ (function () {\n function FlMenuOptrUI(parent, customFltrOperators, serviceLocator, filterSettings) {\n this.ddOpen = this.dropDownOpen.bind(this);\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.customFilterOperators = customFltrOperators;\n if (this.parent) {\n this.parent.on(events.filterMenuClose, this.destroyDropDownList, this);\n this.parent.on(events.destroy, this.destroyDropDownList, this);\n }\n }\n /**\n * @param {Element} dlgConetntEle - specifies the content element\n * @param {Element} target - specifies the target\n * @param {Column} column - specifies the column\n * @param {Dialog} dlgObj - specifies the dialog\n * @param {Object[]} operator - specifies the operator list\n * @returns {void}\n * @hidden\n */\n // eslint-disable-next-line max-len\n FlMenuOptrUI.prototype.renderOperatorUI = function (dlgConetntEle, target, column, dlgObj, operator) {\n this.dialogObj = dlgObj;\n var optr = column.type + 'Operator';\n this.optrData = this.customOptr = !isNullOrUndefined(operator) ? operator :\n (!isNullOrUndefined(this.parent.filterSettings.operators) && !isNullOrUndefined(this.parent.filterSettings.operators[\"\" + optr])) ?\n this.parent.filterSettings.operators[\"\" + optr] : this.customFilterOperators[\"\" + optr];\n var dropDatasource = this.customOptr;\n var selectedValue = this.dropSelectedVal(column, optr);\n var optrDiv = this.parent.createElement('div', { className: 'e-flm_optrdiv' });\n dlgConetntEle.appendChild(optrDiv);\n var optrInput = this.parent.createElement('input', { id: column.uid + '-floptr' });\n optrDiv.appendChild(optrInput);\n this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n enableRtl: this.parent.enableRtl,\n text: selectedValue,\n // eslint-disable-next-line @typescript-eslint/tslint/config\n change: function () {\n var valInput = document.querySelector('.e-flmenu-valuediv').querySelector('input');\n if (this.value === 'isempty' || this.value === 'isnotempty' ||\n this.value === 'isnull' || this.value === 'isnotnull') {\n valInput['ej2_instances'][0]['enabled'] = false;\n }\n else if (!isNullOrUndefined(valInput.getAttribute('disabled'))) {\n valInput['ej2_instances'][0]['enabled'] = true;\n }\n }\n });\n this.dropOptr.addEventListener(literals['open'], this.ddOpen);\n this.dropOptr.appendTo('#' + column.uid + '-floptr');\n };\n FlMenuOptrUI.prototype.renderResponsiveDropDownList = function (args) {\n args.popup.element.style.width = '100%';\n };\n FlMenuOptrUI.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n if (this.parent.enableAdaptiveUI) {\n this.renderResponsiveDropDownList(args);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FlMenuOptrUI.prototype.dropSelectedVal = function (col, optr) {\n var selValue = '';\n var columns = this.parent.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.field === column.field || (col.isForeignColumn() && col.foreignKeyValue === column.field)) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', column.operator));\n selValue = !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n }\n }\n if (selValue === '') { // rewuired or not\n if (col.filter.operator) {\n var optrLen = Object.keys(this.optrData).length;\n for (var i = 0; i < optrLen; i++) {\n if (this.optrData[parseInt(i.toString(), 10)].value === col.filter.operator) {\n selValue = this.optrData[parseInt(i.toString(), 10)].text;\n }\n }\n }\n else {\n selValue = this.optrData[0].text;\n }\n }\n return selValue;\n };\n /**\n * @returns {string} returns the operator\n * @hidden\n */\n FlMenuOptrUI.prototype.getFlOperator = function () {\n return this.dropOptr.value;\n };\n FlMenuOptrUI.prototype.destroyDropDownList = function () {\n if (this.dropOptr.isDestroyed) {\n return;\n }\n this.dropOptr.removeEventListener(literals['open'], this.ddOpen);\n this.dropOptr.destroy();\n this.parent.off(events.filterMenuClose, this.destroyDropDownList);\n this.parent.off(events.destroy, this.destroyDropDownList);\n };\n return FlMenuOptrUI;\n}());\nexport { FlMenuOptrUI };\n","/**\n * Function helps to find which highlightSearch is to call based on your data.\n *\n * @param {HTMLElement} element - Specifies an li element.\n * @param {string} query - Specifies the string to be highlighted.\n * @param {boolean} ignoreCase - Specifies the ignoreCase option.\n * @param {HightLightType} type - Specifies the type of highlight.\n * @returns {void}\n */\nexport function highlightSearch(element, query, ignoreCase, type) {\n if (query === '') {\n return;\n }\n else {\n var ignoreRegex = ignoreCase ? 'gim' : 'gm';\n // eslint-disable-next-line\n query = /^[a-zA-Z0-9- ]*$/.test(query) ? query : query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n var replaceQuery = type === 'StartsWith' ? '^(' + query + ')' : type === 'EndsWith' ?\n '(' + query + ')$' : '(' + query + ')';\n // eslint-disable-next-line security/detect-non-literal-regexp\n findTextNode(element, new RegExp(replaceQuery, ignoreRegex));\n }\n}\n/* eslint-enable jsdoc/require-param, valid-jsdoc */\n/**\n *\n * @param {HTMLElement} element - Specifies the element.\n * @param {RegExp} pattern - Specifies the regex to match the searched text.\n * @returns {void}\n */\nfunction findTextNode(element, pattern) {\n for (var index = 0; element.childNodes && (index < element.childNodes.length); index++) {\n if (element.childNodes[index].nodeType === 3 && element.childNodes[index].textContent.trim() !== '') {\n var value = element.childNodes[index].nodeValue.trim().replace(pattern, '$1');\n element.childNodes[index].nodeValue = '';\n element.innerHTML = element.innerHTML.trim() + value;\n break;\n }\n else {\n findTextNode(element.childNodes[index], pattern);\n }\n }\n}\n/**\n * Function helps to remove highlighted element based on your data.\n *\n * @param {HTMLElement} content - Specifies an content element.\n * @returns {void}\n */\nexport function revertHighlightSearch(content) {\n var contentElement = content.querySelectorAll('.e-highlight');\n for (var i = contentElement.length - 1; i >= 0; i--) {\n var parent_1 = contentElement[i].parentNode;\n var text = document.createTextNode(contentElement[i].textContent);\n parent_1.replaceChild(text, contentElement[i]);\n }\n}\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? 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// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { Property, EventHandler, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { Event, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { ComboBox } from '../combo-box/combo-box';\nimport { highlightSearch, revertHighlightSearch } from '../common/highlight-search';\nimport { Search } from '../common/incremental-search';\nimport { FieldSettings } from '../drop-down-base/drop-down-base';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\ndropDownListClasses.root = 'e-autocomplete';\ndropDownListClasses.icon = 'e-input-group-icon e-ddl-icon e-search-icon';\n/**\n * The AutoComplete component provides the matched suggestion list when type into the input,\n * from which the user can select one.\n * ```html\n * \n * ```\n * ```typescript\n * let atcObj:AutoComplete = new AutoComplete();\n * atcObj.appendTo(\"#list\");\n * ```\n */\nvar AutoComplete = /** @class */ (function (_super) {\n __extends(AutoComplete, _super);\n /**\n * * Constructor for creating the widget\n *\n * @param {AutoCompleteModel} options - Specifies the AutoComplete model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function AutoComplete(options, element) {\n var _this_1 = _super.call(this, options, element) || this;\n _this_1.isFiltered = false;\n _this_1.searchList = false;\n return _this_1;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n AutoComplete.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n AutoComplete.prototype.getLocaleName = function () {\n return 'auto-complete';\n };\n AutoComplete.prototype.getNgDirective = function () {\n return 'EJS-AUTOCOMPLETE';\n };\n AutoComplete.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n var filterType = (this.queryString === '' && !isNullOrUndefined(this.value)) ? 'equal' : this.filterType;\n var queryString = (this.queryString === '' && !isNullOrUndefined(this.value)) ? this.value : this.queryString;\n if (this.isFiltered) {\n return filterQuery;\n }\n if (this.queryString !== null && this.queryString !== '') {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n else {\n var mapping = !isNullOrUndefined(this.fields.value) ? this.fields.value : '';\n filterQuery.where(mapping, filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (!isNullOrUndefined(this.suggestionCount)) {\n // Since defualt value of suggestioncount is 20, checked the condition\n if (this.suggestionCount !== 20) {\n for (var queryElements = 0; queryElements < filterQuery.queries.length; queryElements++) {\n if (filterQuery.queries[queryElements].fn === 'onTake') {\n filterQuery.queries.splice(queryElements, 1);\n }\n }\n }\n filterQuery.take(this.suggestionCount);\n }\n return filterQuery;\n };\n AutoComplete.prototype.searchLists = function (e) {\n var _this_1 = this;\n this.isTyped = true;\n this.isDataFetched = this.isSelectCustom = false;\n if (isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this, e, true);\n }\n this.queryString = this.filterInput.value;\n if (e.type !== 'mousedown' && (e.keyCode === 40 || e.keyCode === 38)) {\n this.queryString = this.queryString === '' ? null : this.queryString;\n this.beforePopupOpen = true;\n this.resetList(this.dataSource, this.fields, null, e);\n return;\n }\n this.isSelected = false;\n this.activeIndex = null;\n var eventArgs = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs.cancel) {\n return;\n }\n _this_1.isFiltered = true;\n _this_1.filterAction(dataSource, query, fields);\n },\n cancel: false\n };\n this.trigger('filtering', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel && !_this_1.isFiltered && !eventArgs.preventDefaultAction) {\n _this_1.searchList = true;\n _this_1.filterAction(_this_1.dataSource, null, _this_1.fields, e);\n }\n });\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {Object[] | DataManager } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n\n */\n AutoComplete.prototype.filter = function (dataSource, query, fields) {\n this.isFiltered = true;\n this.filterAction(dataSource, query, fields);\n };\n AutoComplete.prototype.filterAction = function (dataSource, query, fields, e) {\n this.beforePopupOpen = true;\n if (this.queryString !== '' && (this.queryString.length >= this.minLength)) {\n this.resetList(dataSource, fields, query, e);\n }\n else {\n this.hidePopup(e);\n this.beforePopupOpen = false;\n }\n this.renderReactTemplates();\n };\n AutoComplete.prototype.clearAll = function (e, property) {\n if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n _super.prototype.clearAll.call(this, e);\n }\n if (this.beforePopupOpen) {\n this.hidePopup();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AutoComplete.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n this.fixedHeaderElement = null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n var item = this.list.querySelector('.' + dropDownListClasses.li);\n if (!isNullOrUndefined(item)) {\n removeClass([item], dropDownListClasses.focus);\n }\n this.postBackAction();\n };\n AutoComplete.prototype.postBackAction = function () {\n if (this.autofill && !isNullOrUndefined(this.liCollections[0]) && this.searchList) {\n var items = [this.liCollections[0]];\n var dataSource = this.listData;\n var type = this.typeOfData(dataSource).typeof;\n var searchItem = Search(this.inputElement.value, items, 'StartsWith', this.ignoreCase, dataSource, this.fields, type);\n this.searchList = false;\n if (!isNullOrUndefined(searchItem.item)) {\n _super.prototype.setAutoFill.call(this, this.liCollections[0], true);\n }\n }\n };\n AutoComplete.prototype.setSelection = function (li, e) {\n if (!this.isValidLI(li)) {\n this.selectedLI = li;\n return;\n }\n if (!isNullOrUndefined(e) && e.type === 'keydown' && e.action !== 'enter'\n && e.action !== 'tab' && this.isValidLI(li)) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.setHoverList(li);\n this.selectedLI = li;\n this.setScrollPosition(e);\n if (this.autofill && this.isPopupOpen) {\n this.preventAutoFill = false;\n var isKeyNavigate = (e && e.action === 'down' || e.action === 'up' ||\n e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown');\n _super.prototype.setAutoFill.call(this, li, isKeyNavigate);\n }\n }\n else {\n _super.prototype.setSelection.call(this, li, e);\n }\n };\n AutoComplete.prototype.listOption = function (dataSource, fieldsSettings) {\n var _this_1 = this;\n var fields = _super.prototype.listOption.call(this, dataSource, fieldsSettings);\n if (isNullOrUndefined(fields.itemCreated)) {\n fields.itemCreated = function (e) {\n if (_this_1.highlight) {\n if (_this_1.element.tagName === _this_1.getNgDirective() && _this_1.itemTemplate) {\n setTimeout(function () {\n highlightSearch(e.item, _this_1.queryString, _this_1.ignoreCase, _this_1.filterType);\n }, 0);\n }\n else {\n highlightSearch(e.item, _this_1.queryString, _this_1.ignoreCase, _this_1.filterType);\n }\n }\n };\n }\n else {\n var itemCreated_1 = fields.itemCreated;\n fields.itemCreated = function (e) {\n if (_this_1.highlight) {\n highlightSearch(e.item, _this_1.queryString, _this_1.ignoreCase, _this_1.filterType);\n }\n itemCreated_1.apply(_this_1, [e]);\n };\n }\n return fields;\n };\n AutoComplete.prototype.isFiltering = function () {\n return true;\n };\n AutoComplete.prototype.renderPopup = function (e) {\n this.list.scrollTop = 0;\n _super.prototype.renderPopup.call(this, e);\n };\n AutoComplete.prototype.isEditTextBox = function () {\n return true && this.inputElement.value.trim() !== '';\n };\n AutoComplete.prototype.isPopupButton = function () {\n return this.showPopupButton;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AutoComplete.prototype.isSelectFocusItem = function (element) {\n return false;\n };\n AutoComplete.prototype.setInputValue = function (newProp, oldProp) {\n var oldValue = oldProp && oldProp.text ? oldProp.text : oldProp ? oldProp.value : oldProp;\n var value = newProp && newProp.text ? newProp.text : newProp && newProp.value ? newProp.value : this.value;\n if (value && this.typedString === '' && !this.allowCustom && !(this.dataSource instanceof DataManager)) {\n var checkFields_1_1 = this.typeOfData(this.dataSource).typeof === 'string' ? '' : this.fields.value;\n var listLength_1 = this.getItems().length;\n var query = new Query();\n var _this_2 = this;\n new DataManager(this.dataSource).executeQuery(query.where(new Predicate(checkFields_1_1, 'equal', value)))\n .then(function (e) {\n if (e.result.length > 0) {\n _this_2.value = checkFields_1_1 !== '' ? e.result[0][_this_2.fields.value].toString() : e.result[0].toString();\n _this_2.addItem(e.result, listLength_1);\n _this_2.updateValues();\n }\n else {\n newProp && newProp.text ? _this_2.setOldText(oldValue) : newProp && newProp.value ? _this_2.setOldValue(oldValue) : _this_2.updateValues();\n }\n });\n }\n else if (newProp) {\n newProp.text ? this.setOldText(oldValue) : this.setOldValue(oldValue);\n }\n };\n /**\n * Search the entered text and show it in the suggestion list if available.\n *\n * @returns {void}\n\n */\n AutoComplete.prototype.showPopup = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n this.preventAutoFill = true;\n if (isNullOrUndefined(this.list)) {\n this.renderList(e);\n }\n else {\n this.resetList(this.dataSource, this.fields, null, e);\n }\n };\n /**\n * Hides the popup if it is in open state.\n *\n * @returns {void}\n */\n AutoComplete.prototype.hidePopup = function (e) {\n _super.prototype.hidePopup.call(this, e);\n this.activeIndex = null;\n };\n /**\n * Dynamically change the value of properties.\n *\n * @param {AutoCompleteModel} newProp - Returns the dynamic property value of the component.\n * @param {AutoCompleteModel} oldProp - Returns the previous property value of the component.\n * @private\n * @returns {void}\n */\n AutoComplete.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'autocomplete') {\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'showPopupButton':\n if (this.showPopupButton) {\n var button = Input.appendSpan(dropDownListClasses.icon, this.inputWrapper.container, this.createElement);\n this.inputWrapper.buttons[0] = button;\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (this.inputWrapper && this.inputWrapper.buttons && this.inputWrapper.buttons[0]) {\n EventHandler.add(this.inputWrapper.buttons[0], 'click', this.dropDownClick, this);\n }\n }\n else {\n detach(this.inputWrapper.buttons[0]);\n this.inputWrapper.buttons[0] = null;\n }\n break;\n default: {\n // eslint-disable-next-line max-len\n var atcProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, atcProps.newProperty, atcProps.oldProperty);\n break;\n }\n }\n }\n };\n AutoComplete.prototype.renderHightSearch = function () {\n if (this.highlight) {\n for (var i = 0; i < this.liCollections.length; i++) {\n var isHighlight = this.ulElement.querySelector('.e-active');\n if (!isHighlight) {\n revertHighlightSearch(this.liCollections[i]);\n highlightSearch(this.liCollections[i], this.queryString, this.ignoreCase, this.filterType);\n }\n }\n }\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n AutoComplete.prototype.getModuleName = function () {\n return 'autocomplete';\n };\n /**\n * To initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n AutoComplete.prototype.render = function () {\n _super.prototype.render.call(this);\n };\n __decorate([\n Complex({ value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], AutoComplete.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], AutoComplete.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"showPopupButton\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"highlight\", void 0);\n __decorate([\n Property(20)\n ], AutoComplete.prototype, \"suggestionCount\", void 0);\n __decorate([\n Property({})\n ], AutoComplete.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"query\", void 0);\n __decorate([\n Property(1)\n ], AutoComplete.prototype, \"minLength\", void 0);\n __decorate([\n Property('Contains')\n ], AutoComplete.prototype, \"filterType\", void 0);\n __decorate([\n Event()\n ], AutoComplete.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], AutoComplete.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"text\", void 0);\n AutoComplete = __decorate([\n NotifyPropertyChanges\n ], AutoComplete);\n return AutoComplete;\n}(ComboBox));\nexport { AutoComplete };\n","import { AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { Browser, isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { getZIndexCalcualtion, eventPromise } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * `string filterui` render string column.\n *\n * @hidden\n */\nvar StringFilterUI = /** @class */ (function () {\n function StringFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serLocator = serviceLocator;\n this.filterSettings = filterSettings;\n if (this.parent) {\n this.parent.on(events.filterMenuClose, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n }\n StringFilterUI.prototype.create = function (args) {\n this.instance = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'strui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.dialogObj = args.dialogObj;\n this.processDataOperation(args);\n };\n StringFilterUI.prototype.processDataOperation = function (args) {\n var _this = this;\n if (args.column.isForeignColumn()) {\n this.parent.getDataModule().dataManager.executeQuery(this.parent.getDataModule().generateQuery(true))\n .then(function (result) { _this.getAutoCompleteOptions(args, result); });\n return;\n }\n this.getAutoCompleteOptions(args);\n };\n StringFilterUI.prototype.getAutoCompleteOptions = function (args, result) {\n var isForeignColumn = args.column.isForeignColumn();\n var foreignColumnQuery;\n if (isForeignColumn) {\n var filteredData = CheckBoxFilterBase.getDistinct(result.result, args.column.field)\n .records || [];\n var filterQuery = void 0;\n for (var i = 0; i < filteredData.length; i++) {\n if (filterQuery) {\n filterQuery = filterQuery.or(args.column.field, 'contains', filteredData[parseInt(i.toString(), 10)][args.column.field], this.parent\n .filterSettings.enableCaseSensitivity, this.parent.filterSettings.ignoreAccent);\n }\n else {\n filterQuery = new Predicate(args.column.field, 'contains', filteredData[parseInt(i.toString(), 10)][args.column.field], this.parent\n .filterSettings.enableCaseSensitivity, this.parent.filterSettings.ignoreAccent);\n }\n }\n foreignColumnQuery = new Query().where(filterQuery);\n foreignColumnQuery.params = this.parent.query.params;\n }\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = { value: isForeignColumn ? args.column.foreignKeyValue : args.column.field };\n var autoComplete = new AutoComplete(extend({\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n query: isForeignColumn ? foreignColumnQuery : this.parent.getDataModule().generateQuery(true, true),\n sortOrder: 'Ascending',\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n autofill: true,\n placeholder: args.localizeText.getConstant('EnterValue'),\n actionBegin: function () {\n if (this.query.queries.length && this.query.queries[0].fn === 'onWhere' && this.query.queries[0].e\n && this.query.queries[0].e.predicates) {\n for (var i = 0; i < this.query.queries[0].e.predicates.length; i++) {\n if (this.properties.fields.value === this.query.queries[0].e.predicates[\"\" + i].field) {\n this.query.queries[0].e.predicates.splice(i, 1);\n i = i - 1;\n }\n }\n if (!this.query.queries[0].e.predicates.length) {\n this.query.queries.splice(0, 1);\n }\n }\n }\n }, args.column.filter.params));\n this.acFocus = this.focus(autoComplete, args);\n this.acComplete = this.actionComplete(autoComplete);\n this.acOpen = this.openPopup.bind(this);\n autoComplete.addEventListener(literals.focus, this.acFocus);\n autoComplete.addEventListener(literals['open'], this.acOpen);\n autoComplete.addEventListener(events.actionComplete, this.acComplete);\n if (dataSource && 'result' in dataSource) {\n var query = this.parent.getQuery ? this.parent.getQuery().clone() : new Query();\n var defObj = eventPromise({ requestType: 'stringfilterrequest' }, query);\n this.parent.trigger(events.dataStateChange, defObj.state);\n var def = defObj.deffered;\n def.promise.then(function (e) {\n autoComplete.dataSource = new DataManager(e);\n });\n }\n this.actObj = autoComplete;\n this.actObj.appendTo(this.instance);\n if (isForeignColumn) {\n this.parent.filterModule.filterModule.afterRenderFilterUI();\n }\n };\n StringFilterUI.prototype.write = function (args) {\n if (args.filteredValue !== '' && !isNullOrUndefined(args.filteredValue)) {\n var struiObj = document.querySelector('#strui-' + args.column.uid).ej2_instances[0];\n struiObj.value = args.filteredValue;\n }\n };\n StringFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var actuiObj = document.querySelector('#strui-' + column.uid).ej2_instances[0];\n if (Browser.isDevice) {\n actuiObj.hidePopup();\n actuiObj.focusOut();\n }\n var filterValue = actuiObj.value;\n if (isNullOrUndefined(filterValue) || filterValue === '') {\n filterValue = null;\n }\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', this.parent.filterSettings.enableCaseSensitivity);\n };\n StringFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n StringFilterUI.prototype.focus = function (actObj, args) {\n return function () {\n actObj.filterType = args.getOptrInstance.getFlOperator();\n };\n };\n StringFilterUI.prototype.actionComplete = function (actObj) {\n return function (e) {\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObj) {\n return (getValue(actObj.fields.value, mapObj));\n }).indexOf(getValue((actObj.fields.value), obj)) === index;\n });\n };\n };\n StringFilterUI.prototype.destroy = function () {\n if (!this.actObj || this.actObj.isDestroyed) {\n return;\n }\n this.actObj.removeEventListener(literals.focus, this.acFocus);\n this.actObj.removeEventListener(literals['open'], this.acOpen);\n this.actObj.removeEventListener(events.actionComplete, this.acComplete);\n this.actObj.destroy();\n this.parent.off(events.filterMenuClose, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return StringFilterUI;\n}());\nexport { StringFilterUI };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { extend, isUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * `numberfilterui` render number column.\n *\n * @hidden\n */\nvar NumberFilterUI = /** @class */ (function () {\n function NumberFilterUI(parent, serviceLocator, filterSettings) {\n this.filterSettings = filterSettings;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n if (this.parent) {\n this.parent.on(events.filterMenuClose, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n }\n NumberFilterUI.prototype.keyEventHandler = function (args) {\n if (args.keyCode === 13 || args.keyCode === 9) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent('change', false, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dispatchEvent(evt);\n }\n };\n NumberFilterUI.prototype.create = function (args) {\n this.instance = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'numberui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.numericTxtObj = new NumericTextBox(extend({\n format: typeof (args.column.format) === 'string' || isUndefined(args.column.format) ? args.column.format :\n args.column.format.format,\n locale: this.parent.locale,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('EnterValue'),\n enableRtl: this.parent.enableRtl\n }, args.column.filter.params));\n this.numericTxtObj.appendTo(this.instance);\n };\n NumberFilterUI.prototype.write = function (args) {\n var numberuiObj = document.querySelector('#numberui-' + args.column.uid).ej2_instances[0];\n numberuiObj.element.addEventListener('keydown', this.keyEventHandler);\n numberuiObj.value = args.filteredValue;\n };\n NumberFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var numberuiObj = document.querySelector('#numberui-' + column.uid).ej2_instances[0];\n var filterValue = numberuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n NumberFilterUI.prototype.destroy = function () {\n if (!this.numericTxtObj || this.numericTxtObj.isDestroyed) {\n return;\n }\n this.numericTxtObj.destroy();\n this.parent.off(events.filterMenuClose, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return NumberFilterUI;\n}());\nexport { NumberFilterUI };\n","import { getZIndexCalcualtion } from '../base/util';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * `boolfilterui` render boolean column.\n *\n * @hidden\n */\nvar BooleanFilterUI = /** @class */ (function () {\n function BooleanFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n if (this.parent) {\n this.parent.on(events.filterMenuClose, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n }\n BooleanFilterUI.prototype.create = function (args) {\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = isForeignColumn ? args.column.foreignKeyValue : args.column.field;\n this.elem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'bool-ui-' + args.column.uid });\n args.target.appendChild(this.elem);\n this.dialogObj = args.dialogObj;\n this.dropInstance = new DropDownList(extend({\n dataSource: dataSource instanceof DataManager ?\n dataSource : new DataManager(dataSource),\n query: new Query().select(fields),\n fields: { text: fields, value: fields },\n placeholder: args.localizeText.getConstant('SelectValue'),\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl\n }, args.column.filter.params));\n this.ddOpen = this.openPopup.bind(this);\n this.ddComplete = this.actionComplete(fields);\n this.dropInstance.addEventListener(literals['open'], this.ddOpen);\n this.dropInstance.addEventListener(events.actionComplete, this.ddComplete);\n this.dropInstance.appendTo(this.elem);\n };\n BooleanFilterUI.prototype.write = function (args) {\n var drpuiObj = document.querySelector('#bool-ui-' + args.column.uid).ej2_instances[0];\n if (!isNullOrUndefined(args.filteredValue)) {\n drpuiObj.value = args.filteredValue;\n }\n };\n BooleanFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var drpuiObj = document.querySelector('#bool-ui-' + column.uid).ej2_instances[0];\n var filterValue = drpuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n BooleanFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n BooleanFilterUI.prototype.actionComplete = function (fields) {\n return function (e) {\n e.result = DataUtil.distinct(e.result, fields, true);\n };\n };\n BooleanFilterUI.prototype.destroy = function () {\n if (!this.dropInstance || this.dropInstance.isDestroyed) {\n return;\n }\n this.dropInstance.removeEventListener(literals['open'], this.ddOpen);\n this.dropInstance.removeEventListener(events.actionComplete, this.ddComplete);\n this.dropInstance.destroy();\n this.parent.off(events.filterMenuClose, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return BooleanFilterUI;\n}());\nexport { BooleanFilterUI };\n","import { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { getCustomDateFormat } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * `datefilterui` render date column.\n *\n * @hidden\n */\nvar DateFilterUI = /** @class */ (function () {\n function DateFilterUI(parent, serviceLocator, filterSettings) {\n this.dpOpen = this.openPopup.bind(this);\n this.parent = parent;\n this.locator = serviceLocator;\n this.fltrSettings = filterSettings;\n if (this.parent) {\n this.parent.on(events.filterMenuClose, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n }\n DateFilterUI.prototype.create = function (args) {\n var format = getCustomDateFormat(args.column.format, args.column.type);\n this.dialogObj = args.dialogObj;\n this.inputElem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'dateui-' + args.column.uid });\n args.target.appendChild(this.inputElem);\n if (args.column.type === 'date' || args.column.type === 'dateonly') {\n this.datePickerObj = new DatePicker(extend({\n format: format,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl\n }, args.column.filter.params));\n }\n else if (args.column.type === 'datetime') {\n this.datePickerObj = new DateTimePicker(extend({\n format: format,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl\n }, args.column.filter.params));\n }\n this.datePickerObj.addEventListener(literals['open'], this.dpOpen);\n this.datePickerObj.appendTo(this.inputElem);\n };\n DateFilterUI.prototype.write = function (args) {\n var dateuiObj = document.querySelector('#dateui-' + args.column.uid).ej2_instances[0];\n dateuiObj.value = !isNullOrUndefined(args.filteredValue) ? new Date(args.filteredValue) : null;\n };\n DateFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var dateuiObj = document.querySelector('#dateui-' + column.uid).ej2_instances[0];\n var filterValue = dateuiObj.value;\n filterValue = isNullOrUndefined(filterValue) ? null : filterValue;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n DateFilterUI.prototype.openPopup = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n DateFilterUI.prototype.destroy = function () {\n this.parent.off(events.filterMenuClose, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n if (isNullOrUndefined(this.datePickerObj) || this.datePickerObj.isDestroyed) {\n return;\n }\n this.datePickerObj.removeEventListener(literals['open'], this.dpOpen);\n this.datePickerObj.destroy();\n };\n return DateFilterUI;\n}());\nexport { DateFilterUI };\n","import { isNullOrUndefined, getValue, remove } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { FlMenuOptrUI } from './filter-menu-operator';\nimport { StringFilterUI } from './string-filter-ui';\nimport { NumberFilterUI } from './number-filter-ui';\nimport { BooleanFilterUI } from './boolean-filter-ui';\nimport { DateFilterUI } from './date-filter-ui';\nimport { getFilterMenuPostion, parentsUntil, appendChildren, clearReactVueTemplates } from '../base/util';\nimport * as events from '../base/constant';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * `filter menu` render boolean column.\n *\n * @hidden\n */\nvar FilterMenuRenderer = /** @class */ (function () {\n function FilterMenuRenderer(parent, filterSettings, serviceLocator, customFltrOperators, fltrObj) {\n this.isDialogOpen = false;\n this.maxHeight = '350px';\n this.isMenuCheck = false;\n this.colTypes = {\n 'string': StringFilterUI, 'number': NumberFilterUI, 'date': DateFilterUI, 'dateonly': DateFilterUI, 'boolean': BooleanFilterUI, 'datetime': DateFilterUI\n };\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.customFilterOperators = customFltrOperators;\n this.filterObj = fltrObj;\n this.flMuiObj = new FlMenuOptrUI(this.parent, this.customFilterOperators, this.serviceLocator);\n this.l10n = this.serviceLocator.getService('localization');\n this.menuFilterBase = new CheckBoxFilterBase(parent);\n }\n FilterMenuRenderer.prototype.clearCustomFilter = function (col) {\n this.clearBtnClick(col);\n };\n FilterMenuRenderer.prototype.applyCustomFilter = function (args) {\n this.filterBtnClick(args.col);\n };\n FilterMenuRenderer.prototype.openDialog = function (args) {\n this.options = args;\n this.col = this.parent.getColumnByField(args.field);\n if (isNullOrUndefined(this.col.filter) || (isNullOrUndefined(this.col.filter.type) || this.col.filter.type === 'Menu')) { ///\n this.renderDlgContent(args.target, this.col);\n }\n };\n FilterMenuRenderer.prototype.closeDialog = function (target) {\n if (!this.dlgObj) {\n return;\n }\n if (this.parent.isReact || this.parent.isVue) {\n clearReactVueTemplates(this.parent, ['filterTemplate']);\n }\n var elem = document.getElementById(this.dlgObj.element.id);\n if (this.dlgObj && !this.dlgObj.isDestroyed && elem) {\n var argument = { cancel: false, column: this.col, target: target, element: elem };\n this.parent.notify(events.filterMenuClose, argument);\n if (argument.cancel) {\n return;\n }\n this.isDialogOpen = false;\n if (this.isMenuCheck) {\n this.menuFilterBase.unWireEvents();\n this.parent.off(events.cBoxFltrComplete, this.actionComplete);\n this.isMenuCheck = false;\n }\n this.dlgObj.destroy();\n remove(elem);\n }\n this.parent.notify(events.filterDialogClose, {});\n };\n FilterMenuRenderer.prototype.renderDlgContent = function (target, column) {\n var args = {\n requestType: events.filterBeforeOpen,\n columnName: column.field, columnType: column.type\n };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.parent.trigger(events.actionBegin, args);\n var mainDiv = this.parent.createElement('div', { className: 'e-flmenu-maindiv', id: column.uid + '-flmenu' });\n this.dlgDiv = this.parent.createElement('div', { className: 'e-flmenu', id: column.uid + '-flmdlg' });\n this.dlgDiv.setAttribute('aria-label', this.l10n.getConstant('FilterMenuDialogARIA'));\n if (this.parent.enableAdaptiveUI) {\n var responsiveCnt = document.querySelector('.e-resfilter > .e-dlg-content > .e-mainfilterdiv');\n responsiveCnt.appendChild(this.dlgDiv);\n }\n else {\n this.parent.element.appendChild(this.dlgDiv);\n }\n this.dlgObj = new Dialog({\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n created: this.dialogCreated.bind(this, target, column),\n position: this.parent.element.classList.contains('e-device') ? { X: 'center', Y: 'center' } : { X: '', Y: '' },\n target: this.parent.element.classList.contains('e-device') ? document.body : this.parent.element,\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.l10n.getConstant('FilterButton'), isPrimary: true,\n cssClass: this.parent.cssClass ? 'e-flmenu-okbtn' + ' ' + this.parent.cssClass : 'e-flmenu-okbtn'\n }\n },\n {\n click: this.clearBtnClick.bind(this, column),\n buttonModel: { content: this.l10n.getConstant('ClearButton'),\n cssClass: this.parent.cssClass ? 'e-flmenu-cancelbtn' + ' ' + this.parent.cssClass : 'e-flmenu-cancelbtn' }\n }],\n content: mainDiv,\n width: (!isNullOrUndefined(parentsUntil(target, 'e-bigger'))) || this.parent.element.classList.contains('e-device') ? 260 : 250,\n animationSettings: { effect: 'None' },\n cssClass: this.parent.cssClass ? 'e-filter-popup' + ' ' + this.parent.cssClass : 'e-filter-popup'\n });\n var isStringTemplate = 'isStringTemplate';\n this.dlgObj[\"\" + isStringTemplate] = true;\n this.renderResponsiveDialog();\n this.dlgObj.appendTo(this.dlgDiv);\n };\n FilterMenuRenderer.prototype.renderResponsiveDialog = function () {\n var gObj = this.parent;\n if (gObj.enableAdaptiveUI) {\n this.dlgObj.position = { X: '', Y: '' };\n this.dlgObj.target = document.querySelector('.e-resfilter > .e-dlg-content > .e-mainfilterdiv');\n this.dlgObj.width = '100%';\n this.dlgObj.isModal = false;\n this.dlgObj.buttons = [{}];\n }\n };\n FilterMenuRenderer.prototype.dialogCreated = function (target, column) {\n if (!Browser.isDevice && target) {\n getFilterMenuPostion(target, this.dlgObj);\n }\n this.currentDialogCreatedColumn = column;\n this.renderFilterUI(target, column);\n if (!(column.isForeignColumn() && !(!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n && !isNullOrUndefined(column.filter.ui.create)))) {\n this.afterRenderFilterUI();\n }\n };\n /**\n * Function to notify filterDialogCreated and trigger actionComplete\n *\n * @returns {void}\n * @hidden\n */\n FilterMenuRenderer.prototype.afterRenderFilterUI = function () {\n var column = this.currentDialogCreatedColumn;\n if (column.showColumnMenu) {\n this.parent.notify(events.filterDialogCreated, {});\n }\n if (this.parent.enableAdaptiveUI) {\n this.dlgObj.element.style.left = '0px';\n this.dlgObj.element.style.maxHeight = 'none';\n }\n else {\n this.dlgObj.element.style.maxHeight = this.maxHeight;\n }\n this.dlgObj.show();\n var optrInput = this.dlgObj.element.querySelector('.e-flm_optrdiv').querySelector('input');\n var valInput = this.dlgObj.element.querySelector('.e-flmenu-valuediv').querySelector('input');\n if (optrInput.value === 'Empty' || optrInput.value === 'Not Empty' ||\n optrInput.value === 'Null' || optrInput.value === 'Not Null') {\n valInput['ej2_instances'][0]['enabled'] = false;\n }\n else if (!isNullOrUndefined(valInput && valInput.getAttribute('disabled'))) {\n valInput['ej2_instances'][0]['enabled'] = true;\n }\n if (!column.filterTemplate) {\n this.writeMethod(column, this.dlgObj.element.querySelector('#' + column.uid + '-flmenu'));\n }\n var args = {\n requestType: events.filterAfterOpen,\n columnName: column.field, columnType: column.type\n };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.isDialogOpen = true;\n if (!this.isMenuCheck) {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n FilterMenuRenderer.prototype.renderFilterUI = function (target, col) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-flmenu-maindiv');\n this.parent.log('column_type_missing', { column: col });\n this.renderOperatorUI(dlgConetntEle, target, col);\n this.renderFlValueUI(dlgConetntEle, target, col);\n };\n FilterMenuRenderer.prototype.renderOperatorUI = function (dlgConetntEle, target, column) {\n this.flMuiObj.renderOperatorUI(dlgConetntEle, target, column, this.dlgObj, this.filterObj.menuOperator);\n };\n FilterMenuRenderer.prototype.renderFlValueUI = function (dlgConetntEle, target, column) {\n var valueDiv = this.parent.createElement('div', { className: 'e-flmenu-valuediv' });\n var fObj = this.filterObj;\n dlgConetntEle.appendChild(valueDiv);\n var instanceofFilterUI = new this.colTypes[column.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (column.filterTemplate) {\n var fltrData = {};\n var valueInString = 'value';\n fltrData[column.field] = fltrData[\"\" + valueInString] = fObj.values[column.field];\n if (column.foreignKeyValue) {\n fltrData[column.foreignKeyValue] = fObj.values[column.field];\n fltrData[column.field] = undefined;\n }\n var col = 'column';\n fltrData[\"\" + col] = column;\n var isReactCompiler = this.parent.isReact && typeof (column.filterTemplate) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n var tempID = this.parent.element.id + column.uid + 'filterTemplate';\n if (isReactCompiler || isReactChild) {\n column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID, null, null, valueDiv);\n this.parent.renderTemplates();\n }\n else {\n var compElement = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID);\n appendChildren(valueDiv, compElement);\n }\n if (this.isMenuCheck) {\n this.menuFilterBase.cBox = this.dlgObj.element.querySelector('.e-checkboxlist.e-fields');\n this.menuFilterBase.wireEvents();\n this.parent.on(events.cBoxFltrComplete, this.actionComplete, this);\n this.menuFilterBase.getAllData();\n }\n }\n else {\n if (!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n && !isNullOrUndefined(column.filter.ui.create)) {\n var temp = column.filter.ui.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n temp({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj\n });\n }\n else {\n instanceofFilterUI.create({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, localizeText: this.l10n, dialogObj: this.dlgObj\n });\n }\n }\n };\n FilterMenuRenderer.prototype.writeMethod = function (col, dlgContentEle) {\n var flValue;\n var target = dlgContentEle.querySelector('.e-flmenu-valinput');\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.uid === column.uid) {\n flValue = column.value;\n }\n }\n if (!isNullOrUndefined(col.filter) && !isNullOrUndefined(col.filter.ui)\n && !isNullOrUndefined(col.filter.ui.write)) {\n var temp = col.filter.ui.write;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n temp({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n else {\n instanceofFilterUI.write({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n };\n FilterMenuRenderer.prototype.filterBtnClick = function (col) {\n var flValue;\n var targ = this.dlgObj.element.querySelector('.e-flmenu-valuediv input');\n var flOptrValue = this.flMuiObj.getFlOperator();\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (col.filterTemplate) {\n var element = this.dlgDiv.querySelector('.e-flmenu-valuediv');\n var fltrValue = void 0;\n if (element.children[0].value) {\n fltrValue = element.children[0].value;\n }\n else {\n if (!isNullOrUndefined(element.children[0].ej2_instances)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fltrValue = (this.parent.isAngular ? element.children[0] :\n element.querySelector('input')).ej2_instances[0].value;\n }\n else {\n var eControl = element.querySelector('.e-control');\n if (!isNullOrUndefined(eControl)) {\n fltrValue = col.type === 'boolean' ? eControl.checked :\n !isNullOrUndefined(eControl.ej2_instances) ?\n eControl.ej2_instances[0].value :\n eControl.value;\n }\n }\n }\n this.filterObj.filterByColumn(col.field, flOptrValue, fltrValue);\n }\n else {\n if (!isNullOrUndefined(col.filter) &&\n !isNullOrUndefined(col.filter.ui) && !isNullOrUndefined(col.filter.ui.read)) {\n var temp = col.filter.ui.read;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n // eslint-disable-next-line\n flValue = temp({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n }\n else {\n instanceofFilterUI.read(targ, col, flOptrValue, this.filterObj);\n }\n }\n this.closeDialog();\n if (this.parent.showColumnMenu) {\n this.parent.notify(events.afterFilterColumnMenuClose, {});\n }\n };\n FilterMenuRenderer.prototype.closeResponsiveDialog = function () {\n this.closeDialog();\n };\n FilterMenuRenderer.prototype.clearBtnClick = function (column) {\n this.filterObj.removeFilteredColsByField(column.field);\n this.closeDialog();\n var iconClass = this.parent.showColumnMenu && column.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var col = this.parent.element.querySelector('[e-mappinguid=\"' + column.uid + '\"]').parentElement;\n var flIcon = col.querySelector(iconClass);\n if (flIcon) {\n flIcon.classList.remove('e-filtered');\n }\n };\n FilterMenuRenderer.prototype.destroy = function () {\n this.closeDialog();\n };\n /**\n * @returns {FilterUI} returns the filterUI\n * @hidden\n */\n FilterMenuRenderer.prototype.getFilterUIInfo = function () {\n return { field: this.col.field, operator: this.flMuiObj.getFlOperator() };\n };\n FilterMenuRenderer.prototype.renderCheckBoxMenu = function () {\n this.isMenuCheck = true;\n this.menuFilterBase.updateModel(this.options);\n this.menuFilterBase.getAndSetChkElem(this.options);\n this.dlgObj.buttons = [{\n click: this.menuFilterBase.btnClick.bind(this.menuFilterBase),\n buttonModel: {\n content: this.menuFilterBase.getLocalizedLabel('FilterButton'),\n cssClass: 'e-primary', isPrimary: true\n }\n },\n {\n click: this.menuFilterBase.btnClick.bind(this.menuFilterBase),\n buttonModel: { cssClass: 'e-flat', content: this.menuFilterBase.getLocalizedLabel('ClearButton') }\n }];\n this.menuFilterBase.dialogObj = this.dlgObj;\n this.menuFilterBase.dlg = this.dlgObj.element;\n this.menuFilterBase.dlg.classList.add('e-menucheckbox');\n this.menuFilterBase.dlg.classList.remove('e-checkboxfilter');\n this.maxHeight = '800px';\n return this.menuFilterBase.sBox.innerHTML;\n };\n FilterMenuRenderer.prototype.actionComplete = function (args) {\n if (this.isMenuCheck) {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n return FilterMenuRenderer;\n}());\nexport { FilterMenuRenderer };\n","import * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * @hidden\n * `CheckBoxFilter` module is used to handle filtering action.\n */\nvar CheckBoxFilter = /** @class */ (function () {\n /**\n * Constructor for checkbox filtering module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {FilterSettings} filterSettings - specifies the filtersettings\n * @param {ServiceLocator} serviceLocator - specifies the ServiceLocator\n * @hidden\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function CheckBoxFilter(parent, filterSettings, serviceLocator) {\n this.parent = parent;\n this.isresetFocus = true;\n this.checkBoxBase = new CheckBoxFilterBase(parent);\n this.addEventListener();\n }\n /**\n * To destroy the check box filter.\n *\n * @returns {void}\n * @hidden\n */\n CheckBoxFilter.prototype.destroy = function () {\n this.removeEventListener();\n this.checkBoxBase.closeDialog();\n };\n CheckBoxFilter.prototype.openDialog = function (options) {\n this.checkBoxBase.openDialog(options);\n this.parent.log('column_type_missing', { column: options.column });\n };\n CheckBoxFilter.prototype.closeDialog = function () {\n this.destroy();\n if (this.isresetFocus) {\n this.parent.notify(events.restoreFocus, {});\n }\n };\n CheckBoxFilter.prototype.closeResponsiveDialog = function () {\n this.checkBoxBase.closeDialog();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n CheckBoxFilter.prototype.getModuleName = function () {\n return 'checkboxFilter';\n };\n CheckBoxFilter.prototype.actionBegin = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n CheckBoxFilter.prototype.actionComplete = function (args) {\n this.parent.trigger(events.actionComplete, args);\n };\n CheckBoxFilter.prototype.actionPrevent = function (args) {\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, args);\n args.cancel = true;\n }\n };\n CheckBoxFilter.prototype.clearCustomFilter = function (col) {\n this.checkBoxBase.clearFilter(col);\n };\n CheckBoxFilter.prototype.applyCustomFilter = function () {\n this.checkBoxBase.fltrBtnHandler();\n this.checkBoxBase.closeDialog();\n };\n CheckBoxFilter.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.cBoxFltrBegin, this.actionBegin, this);\n this.parent.on(events.cBoxFltrComplete, this.actionComplete, this);\n this.parent.on(events.fltrPrevent, this.actionPrevent, this);\n };\n CheckBoxFilter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cBoxFltrBegin, this.actionBegin);\n this.parent.off(events.cBoxFltrComplete, this.actionComplete);\n this.parent.off(events.fltrPrevent, this.actionPrevent);\n };\n return CheckBoxFilter;\n}());\nexport { CheckBoxFilter };\n","import { select, detach } from '@syncfusion/ej2-base';\nimport { VScroll } from './v-scroll';\nimport { HScroll } from './h-scroll';\n/**\n * Used to add scroll in menu.\n *\n * @param {createElementType} createElement - Specifies the create element model\n * @param {HTMLElement} container - Specifies the element container\n * @param {HTMLElement} content - Specifies the content element\n * @param {string} scrollType - Specifies the scroll type\n * @param {boolean} enableRtl - Specifies the enable RTL property\n * @param {boolean} offset - Specifies the offset value\n * @returns {HTMLElement} - Element\n * @hidden\n */\nexport function addScrolling(createElement, container, content, scrollType, enableRtl, offset) {\n var containerOffset;\n var contentOffset;\n var parentElem = container.parentElement;\n if (scrollType === 'vscroll') {\n containerOffset = offset || container.getBoundingClientRect().height;\n contentOffset = content.getBoundingClientRect().height;\n }\n else {\n containerOffset = container.getBoundingClientRect().width;\n contentOffset = content.getBoundingClientRect().width;\n }\n if (containerOffset < contentOffset) {\n return createScrollbar(createElement, container, content, scrollType, enableRtl, offset);\n }\n else if (parentElem) {\n var width = parentElem.getBoundingClientRect().width;\n if (width < containerOffset && scrollType === 'hscroll') {\n contentOffset = width;\n container.style.maxWidth = width + 'px';\n return createScrollbar(createElement, container, content, scrollType, enableRtl, offset);\n }\n return content;\n }\n else {\n return content;\n }\n}\n/**\n * Used to create scroll bar in menu.\n *\n * @param {createElementType} createElement - Specifies the create element model\n * @param {HTMLElement} container - Specifies the element container\n * @param {HTMLElement} content - Specifies the content element\n * @param {string} scrollType - Specifies the scroll type\n * @param {boolean} enableRtl - Specifies the enable RTL property\n * @param {boolean} offset - Specifies the offset value\n * @returns {HTMLElement} - Element\n * @hidden\n */\nfunction createScrollbar(createElement, container, content, scrollType, enableRtl, offset) {\n var scrollEle = createElement('div', { className: 'e-menu-' + scrollType });\n container.appendChild(scrollEle);\n scrollEle.appendChild(content);\n if (offset) {\n scrollEle.style.overflow = 'hidden';\n scrollEle.style.height = offset + 'px';\n }\n else {\n scrollEle.style.maxHeight = container.style.maxHeight;\n container.style.overflow = 'hidden';\n }\n var scrollObj;\n if (scrollType === 'vscroll') {\n scrollObj = new VScroll({ enableRtl: enableRtl }, scrollEle);\n scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetHeight / 2;\n }\n else {\n scrollObj = new HScroll({ enableRtl: enableRtl }, scrollEle);\n scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetWidth;\n }\n return scrollEle;\n}\n/**\n * Used to destroy the scroll option.\n *\n * @param {VScroll | HScroll} scrollObj - Specifies the scroller object\n * @param {Element} element - Specifies the element\n * @param {HTMLElement} skipEle - Specifies the skip element\n * @returns {void}\n * @hidden\n */\nexport function destroyScroll(scrollObj, element, skipEle) {\n if (scrollObj) {\n var menu = select('.e-menu-parent', element);\n if (menu) {\n if (!skipEle || skipEle === menu) {\n scrollObj.destroy();\n element.parentElement.appendChild(menu);\n detach(element);\n }\n }\n else {\n scrollObj.destroy();\n detach(element);\n }\n }\n}\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges, isBlazor } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents, Touch } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { Browser, Collection, setValue, getValue, getUniqueID, getInstance, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { select, selectAll, closest, detach, append, rippleEffect, isVisible, Complex, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { getZindexPartial, calculatePosition, isCollide, fit, Popup } from '@syncfusion/ej2-popups';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nimport { addScrolling, destroyScroll } from '../common/menu-scroll';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar DOWNARROW = 'downarrow';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar HOME = 'home';\nvar END = 'end';\nvar TAB = 'tab';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\nvar RTL = 'e-rtl';\nvar POPUP = 'e-menu-popup';\nvar TEMPLATE_PROPERTY = 'Template';\n/**\n * Configures the field options of the Menu.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"itemId\", void 0);\n __decorate([\n Property('parentId')\n ], FieldSettings.prototype, \"parentId\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('url')\n ], FieldSettings.prototype, \"url\", void 0);\n __decorate([\n Property('separator')\n ], FieldSettings.prototype, \"separator\", void 0);\n __decorate([\n Property('items')\n ], FieldSettings.prototype, \"children\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Specifies menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n __extends(MenuItem, _super);\n function MenuItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MenuItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], MenuItem.prototype, \"separator\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuItem.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"url\", void 0);\n return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * Animation configuration settings.\n */\nvar MenuAnimationSettings = /** @class */ (function (_super) {\n __extends(MenuAnimationSettings, _super);\n function MenuAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], MenuAnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], MenuAnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], MenuAnimationSettings.prototype, \"easing\", void 0);\n return MenuAnimationSettings;\n}(ChildProperty));\nexport { MenuAnimationSettings };\n/**\n * Base class for Menu and ContextMenu components.\n *\n * @private\n */\nvar MenuBase = /** @class */ (function (_super) {\n __extends(MenuBase, _super);\n /**\n * Constructor for creating the widget.\n *\n * @private\n * @param {MenuBaseModel} options - Specifies the menu base model\n * @param {string | HTMLUListElement} element - Specifies the element\n */\n function MenuBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.navIdx = [];\n _this.animation = new Animation({});\n _this.isTapHold = false;\n _this.tempItem = [];\n _this.showSubMenuOn = 'Auto';\n return _this;\n }\n /**\n * Initialized third party configuration settings.\n *\n * @private\n * @returns {void}\n */\n MenuBase.prototype.preRender = function () {\n if (!this.isMenu) {\n var ul = void 0;\n if (this.element.tagName === 'EJS-CONTEXTMENU') {\n ul = this.createElement('ul', {\n id: getUniqueID(this.getModuleName()), className: 'e-control e-lib e-' + this.getModuleName()\n });\n var ejInst = getValue('ej2_instances', this.element);\n removeClass([this.element], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n this.clonedElement = this.element;\n this.element = ul;\n setValue('ej2_instances', ejInst, this.element);\n }\n else {\n ul = this.createElement('ul', { id: getUniqueID(this.getModuleName()) });\n append([].slice.call(this.element.cloneNode(true).children), ul);\n var refEle = this.element.nextElementSibling;\n if (refEle) {\n this.element.parentElement.insertBefore(ul, refEle);\n }\n else {\n this.element.parentElement.appendChild(ul);\n }\n this.clonedElement = ul;\n }\n this.clonedElement.style.display = 'none';\n }\n if (this.element.tagName === 'EJS-MENU') {\n var ele = this.element;\n var ejInstance = getValue('ej2_instances', ele);\n var ul = this.createElement('ul');\n var wrapper = this.createElement('EJS-MENU', { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n ul.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = ul;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.clonedElement = wrapper;\n this.element = ele;\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\n }\n };\n /**\n * Initialize the control rendering.\n *\n * @private\n * @returns {void}\n */\n MenuBase.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.renderItems();\n this.wireEvents();\n this.renderComplete();\n var wrapper = this.getWrapper();\n // eslint-disable-next-line\n if (this.template && this.enableScrolling && (this.isReact || this.isAngular)) {\n requestAnimationFrame(function () {\n addScrolling(_this.createElement, wrapper, _this.element, 'hscroll', _this.enableRtl);\n });\n }\n };\n MenuBase.prototype.initialize = function () {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n if (this.isMenu) {\n this.element.parentElement.insertBefore(wrapper, this.element);\n }\n else {\n document.body.appendChild(wrapper);\n }\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n wrapper.appendChild(this.element);\n if (this.isMenu && this.hamburgerMode) {\n if (!this.target) {\n this.createHeaderContainer(wrapper);\n }\n }\n this.defaultOption = this.showItemOnClick;\n };\n MenuBase.prototype.renderItems = function () {\n if (!this.items.length) {\n var items = ListBase.createJsonFromElement(this.element, { fields: { child: 'items' } });\n this.setProperties({ items: items }, true);\n if (isBlazor() && !this.isMenu) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n }\n var ul = this.createItems(this.items);\n append(Array.prototype.slice.call(ul.children), this.element);\n this.element.classList.add('e-menu-parent');\n if (this.isMenu) {\n if (!this.hamburgerMode && this.element.classList.contains('e-vertical')) {\n this.setBlankIconStyle(this.element);\n }\n if (this.enableScrolling) {\n var wrapper = this.getWrapper();\n if (this.element.classList.contains('e-vertical')) {\n addScrolling(this.createElement, wrapper, this.element, 'vscroll', this.enableRtl);\n }\n else {\n addScrolling(this.createElement, wrapper, this.element, 'hscroll', this.enableRtl);\n }\n }\n }\n };\n MenuBase.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (this.isMenu) {\n EventHandler.add(target, 'click', this.menuHeaderClickHandler, this);\n }\n else {\n if (Browser.isIos) {\n new Touch(target, { tapHold: this.touchHandler.bind(this) });\n }\n else {\n EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n }\n }\n }\n this.targetElement = target;\n if (!this.isMenu) {\n EventHandler.add(this.targetElement, 'scroll', this.scrollHandler, this);\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);\n }\n }\n }\n if (!Browser.isDevice) {\n this.delegateMoverHandler = this.moverHandler.bind(this);\n this.delegateMouseDownHandler = this.mouseDownHandler.bind(this);\n EventHandler.add(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler, this);\n EventHandler.add(document, 'mousedown', this.delegateMouseDownHandler, this);\n }\n this.delegateClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.delegateClickHandler, this);\n this.wireKeyboardEvent(wrapper);\n this.rippleFn = rippleEffect(wrapper, { selector: '.' + ITEM });\n };\n MenuBase.prototype.wireKeyboardEvent = function (element) {\n var keyConfigs = {\n downarrow: DOWNARROW,\n uparrow: UPARROW,\n enter: ENTER,\n leftarrow: LEFTARROW,\n rightarrow: RIGHTARROW,\n escape: ESCAPE\n };\n if (this.isMenu) {\n keyConfigs.home = HOME;\n keyConfigs.end = END;\n keyConfigs.tab = TAB;\n }\n new KeyboardEvents(element, {\n keyAction: this.keyBoardHandler.bind(this),\n keyConfigs: keyConfigs\n });\n };\n MenuBase.prototype.mouseDownHandler = function (e) {\n if (closest(e.target, '.e-' + this.getModuleName() + '-wrapper') !== this.getWrapper()\n && (!closest(e.target, '.e-' + this.getModuleName() + '-popup'))) {\n this.closeMenu(this.isMenu ? null : this.navIdx.length, e);\n }\n };\n MenuBase.prototype.keyHandler = function (e) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n if (e.target && (e.target.classList.contains('e-contextmenu') || e.target.classList.contains('e-menu-item'))) {\n e.preventDefault();\n }\n }\n };\n MenuBase.prototype.keyBoardHandler = function (e) {\n var actionName = '';\n var trgt = e.target;\n var actionNeeded = this.isMenu && !this.hamburgerMode && !this.element.classList.contains('e-vertical')\n && this.navIdx.length < 1;\n e.preventDefault();\n if (this.enableScrolling && e.keyCode === 13 && trgt.classList.contains('e-scroll-nav')) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [closest(trgt, '.e-' + this.getModuleName() + '-wrapper')]);\n }\n if (actionNeeded) {\n switch (e.action) {\n case RIGHTARROW:\n actionName = RIGHTARROW;\n e.action = DOWNARROW;\n break;\n case LEFTARROW:\n actionName = LEFTARROW;\n e.action = UPARROW;\n break;\n case DOWNARROW:\n actionName = DOWNARROW;\n e.action = RIGHTARROW;\n break;\n case UPARROW:\n actionName = UPARROW;\n e.action = '';\n break;\n }\n }\n else if (this.enableRtl) {\n switch (e.action) {\n case LEFTARROW:\n actionNeeded = true;\n actionName = LEFTARROW;\n e.action = RIGHTARROW;\n break;\n case RIGHTARROW:\n actionNeeded = true;\n actionName = RIGHTARROW;\n e.action = LEFTARROW;\n break;\n }\n }\n switch (e.action) {\n case DOWNARROW:\n case UPARROW:\n case END:\n case HOME:\n case TAB:\n this.upDownKeyHandler(e);\n break;\n case RIGHTARROW:\n this.rightEnterKeyHandler(e);\n break;\n case LEFTARROW:\n this.leftEscKeyHandler(e);\n break;\n case ENTER:\n if (this.hamburgerMode && trgt.tagName === 'SPAN' && trgt.classList.contains('e-menu-icon')) {\n this.menuHeaderClickHandler(e);\n }\n else {\n this.rightEnterKeyHandler(e);\n }\n break;\n case ESCAPE:\n this.leftEscKeyHandler(e);\n break;\n }\n if (actionNeeded) {\n e.action = actionName;\n }\n };\n MenuBase.prototype.upDownKeyHandler = function (e) {\n var cul = this.getUlByNavIdx();\n var defaultIdx = (e.action === DOWNARROW || e.action === HOME || e.action === TAB) ? 0 : cul.childElementCount - 1;\n var fliIdx = defaultIdx;\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n if (e.action !== END && e.action !== HOME) {\n fliIdx = this.getIdx(cul, fli);\n }\n fli.classList.remove(FOCUSED);\n if (e.action !== END && e.action !== HOME) {\n if (e.action === DOWNARROW) {\n fliIdx++;\n }\n else {\n fliIdx--;\n }\n if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n fliIdx = defaultIdx;\n }\n }\n }\n var cli = cul.children[fliIdx];\n fliIdx = this.isValidLI(cli, fliIdx, e.action);\n cul.children[fliIdx].classList.add(FOCUSED);\n cul.children[fliIdx].focus();\n };\n MenuBase.prototype.isValidLI = function (cli, index, action) {\n var cul = this.getUlByNavIdx();\n var defaultIdx = (action === DOWNARROW || action === HOME || action === TAB) ? 0 : cul.childElementCount - 1;\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n if (action === DOWNARROW && index === cul.childElementCount - 1) {\n index = defaultIdx;\n }\n else if (action === UPARROW && index === 0) {\n index = defaultIdx;\n }\n else if ((action === DOWNARROW) || (action === RIGHTARROW)) {\n index++;\n }\n else {\n index--;\n }\n }\n cli = cul.children[index];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n index = this.isValidLI(cli, index, action);\n }\n return index;\n };\n MenuBase.prototype.getUlByNavIdx = function (navIdxLen) {\n var _this = this;\n if (navIdxLen === void 0) { navIdxLen = this.navIdx.length; }\n if (this.isMenu) {\n var popup = [this.getWrapper()].concat([].slice.call(selectAll('.' + POPUP)))[navIdxLen];\n var popups_1 = [];\n var allPopup = selectAll('.' + POPUP);\n allPopup.forEach(function (elem) {\n if (_this.element.id === elem.id.split('-')[2] || elem.id.split('-')[2] + \"-\" + elem.id.split('-')[3]) {\n popups_1.push(elem);\n }\n });\n popup = [this.getWrapper()].concat([].slice.call(popups_1))[navIdxLen];\n return isNullOrUndefined(popup) ? null : select('.e-menu-parent', popup);\n }\n else {\n return this.getWrapper().children[navIdxLen];\n }\n };\n MenuBase.prototype.rightEnterKeyHandler = function (e) {\n var eventArgs;\n var cul = this.getUlByNavIdx();\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n var fliIdx = this.getIdx(cul, fli);\n var navIdx = this.navIdx.concat(fliIdx);\n var item = this.getItem(navIdx);\n if (item.items.length) {\n this.navIdx.push(fliIdx);\n this.keyType = 'right';\n this.action = e.action;\n this.openMenu(fli, item, -1, -1, e);\n }\n else {\n if (e.action === ENTER) {\n if (this.isMenu && this.navIdx.length === 0) {\n this.removeLIStateByClass([SELECTED], [this.getWrapper()]);\n }\n else {\n fli.classList.remove(FOCUSED);\n }\n fli.classList.add(SELECTED);\n eventArgs = { element: fli, item: item, event: e };\n this.trigger('select', eventArgs);\n this.closeMenu(null, e);\n }\n }\n }\n };\n MenuBase.prototype.leftEscKeyHandler = function (e) {\n if (this.navIdx.length) {\n this.keyType = 'left';\n this.closeMenu(this.navIdx.length, e);\n }\n else {\n if (e.action === ESCAPE) {\n this.closeMenu(null, e);\n }\n }\n };\n MenuBase.prototype.scrollHandler = function (e) {\n this.closeMenu(null, e);\n };\n MenuBase.prototype.touchHandler = function (e) {\n this.isTapHold = true;\n this.cmenuHandler(e.originalEvent);\n };\n MenuBase.prototype.cmenuHandler = function (e) {\n e.preventDefault();\n this.currentTarget = e.target;\n this.isCMenu = true;\n this.pageX = e.changedTouches ? e.changedTouches[0].pageX + 1 : e.pageX + 1;\n this.pageY = e.changedTouches ? e.changedTouches[0].pageY + 1 : e.pageY + 1;\n this.closeMenu(null, e);\n if (this.isCMenu) {\n if (this.canOpen(e.target)) {\n this.openMenu(null, null, this.pageY, this.pageX, e);\n }\n this.isCMenu = false;\n }\n };\n // eslint:disable-next-line:max-func-body-length\n MenuBase.prototype.closeMenu = function (ulIndex, e, isIterated) {\n var _this = this;\n if (ulIndex === void 0) { ulIndex = 0; }\n if (e === void 0) { e = null; }\n if (this.isMenuVisible()) {\n var sli = void 0;\n var item_1;\n var wrapper_1 = this.getWrapper();\n var beforeCloseArgs = void 0;\n var items_1;\n var popups = this.getPopups();\n var isClose = false;\n var cnt = this.isMenu ? popups.length + 1 : wrapper_1.childElementCount;\n var ul_1 = this.isMenu && cnt !== 1 ? select('.e-ul', popups[cnt - 2])\n : selectAll('.e-menu-parent', wrapper_1)[cnt - 1];\n if (this.isMenu && ul_1.classList.contains('e-menu')) {\n sli = this.getLIByClass(ul_1, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n isClose = true;\n }\n if (!isClose) {\n var liElem_1 = e && e.target && this.getLI(e.target);\n if (liElem_1) {\n this.cli = liElem_1;\n }\n else {\n this.cli = ul_1.children[0];\n }\n item_1 = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items_1 = item_1 ? item_1.items : this.items;\n beforeCloseArgs = { element: ul_1, parentItem: item_1, items: items_1, event: e, cancel: false, isFocused: true };\n this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n var popupEle;\n var closeArgs;\n var popupId = '';\n var popupObj;\n var isOpen = !observedCloseArgs.cancel;\n if (isOpen || _this.isCMenu) {\n if (_this.isMenu) {\n popupEle = closest(ul_1, '.' + POPUP);\n if (_this.hamburgerMode) {\n popupEle.parentElement.style.minHeight = '';\n closest(ul_1, '.e-menu-item').setAttribute('aria-expanded', 'false');\n }\n _this.unWireKeyboardEvent(popupEle);\n destroyScroll(getInstance(popupEle.children[0], VScroll), popupEle.children[0]);\n popupObj = getInstance(popupEle, Popup);\n popupObj.hide();\n popupId = popupEle.id;\n popupObj.destroy();\n detach(popupEle);\n }\n else {\n _this.toggleAnimation(ul_1, false);\n }\n closeArgs = { element: ul_1, parentItem: item_1, items: items_1 };\n _this.trigger('onClose', closeArgs);\n _this.navIdx.pop();\n if (!_this.isMenu) {\n EventHandler.remove(ul_1, 'keydown', _this.keyHandler);\n if (_this.keyType === 'right') {\n _this.keyType = '';\n }\n }\n }\n _this.updateReactTemplate();\n var trgtliId;\n var closedLi;\n var trgtLi;\n var trgtpopUp = _this.getWrapper() && _this.getUlByNavIdx();\n if (_this.isCMenu) {\n if (_this.canOpen(e.target)) {\n _this.openMenu(null, null, _this.pageY, _this.pageX, e);\n }\n _this.isCMenu = false;\n }\n if (_this.isMenu && trgtpopUp && popupId.length) {\n // eslint-disable-next-line\n trgtliId = new RegExp('(.*)-ej2menu-' + _this.element.id + '-popup').exec(popupId)[1];\n closedLi = trgtpopUp.querySelector('[id=\"' + trgtliId + '\"]');\n trgtLi = (liElem_1 && trgtpopUp.querySelector('[id=\"' + liElem_1.id + '\"]'));\n }\n else if (trgtpopUp) {\n closedLi = trgtpopUp.querySelector('.e-menu-item.e-selected');\n trgtLi = (liElem_1 && trgtpopUp.querySelector('[id=\"' + liElem_1.id + '\"]'));\n }\n var submenus = liElem_1 && liElem_1.querySelectorAll('.e-menu-item');\n if (isOpen && _this.hamburgerMode && ulIndex && !(submenus.length)) {\n _this.afterCloseMenu(e);\n }\n else if (isOpen && !_this.hamburgerMode && closedLi && !trgtLi && _this.keyType !== 'left' && (_this.navIdx.length || !_this.isMenu && _this.navIdx.length === 0)) {\n var ele = (e && e.target.classList.contains('e-vscroll'))\n ? closest(e.target, '.e-menu-wrapper') : null;\n if (ele) {\n ele = ele.querySelector('.e-menu-item');\n if (_this.showItemOnClick || (ele && _this.getIndex(ele.id, true).length <= _this.navIdx.length)) {\n _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e, true);\n }\n }\n else {\n _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e);\n }\n }\n else if (isOpen && !isIterated && !ulIndex && ((_this.hamburgerMode && _this.navIdx.length) ||\n _this.navIdx.length === 1 && liElem_1 && trgtpopUp !== liElem_1.parentElement)) {\n _this.closeMenu(null, e);\n }\n else if (isOpen && isNullOrUndefined(ulIndex) && _this.navIdx.length) {\n _this.closeMenu(null, e);\n }\n else if (isOpen && !_this.isMenu && !ulIndex && _this.navIdx.length === 0 && !_this.isMenusClosed) {\n _this.isMenusClosed = true;\n _this.closeMenu(0, e);\n }\n else if (isOpen && _this.isMenu && e && e.target &&\n _this.navIdx.length !== 0 && closest(e.target, '.e-menu-parent.e-control')) {\n _this.closeMenu(0, e);\n }\n else if (isOpen && !_this.isMenu && selectAll('.e-menu-parent', wrapper_1)[ulIndex - 1] && e.which === 3) {\n _this.closeMenu(null, e);\n }\n else {\n if (isOpen && (_this.keyType === 'right' || _this.keyType === 'click')) {\n _this.afterCloseMenu(e);\n }\n else {\n var cul = _this.getUlByNavIdx();\n var sli_1 = _this.getLIByClass(cul, SELECTED);\n if (sli_1) {\n sli_1.setAttribute('aria-expanded', 'false');\n sli_1.classList.remove(SELECTED);\n if (observedCloseArgs.isFocused && liElem_1 || _this.keyType === 'left') {\n sli_1.classList.add(FOCUSED);\n if (!e.target || !e.target.classList.contains('e-edit-template')) {\n sli_1.focus();\n }\n }\n }\n if (!isOpen && _this.hamburgerMode && liElem_1 && liElem_1.getAttribute('aria-expanded') === 'false' &&\n liElem_1.getAttribute('aria-haspopup') === 'true') {\n if (closest(liElem_1, '.e-menu-parent.e-control')) {\n _this.navIdx = [];\n }\n else {\n _this.navIdx.pop();\n }\n _this.navIdx.push(_this.cliIdx);\n var item_2 = _this.getItem(_this.navIdx);\n liElem_1.setAttribute('aria-expanded', 'true');\n _this.openMenu(liElem_1, item_2, -1, -1, e);\n }\n }\n if (_this.navIdx.length < 1) {\n if (_this.showSubMenuOn === 'Hover' || _this.showSubMenuOn === 'Click') {\n _this.showItemOnClick = _this.defaultOption;\n _this.showSubMenuOn = 'Auto';\n }\n }\n }\n _this.removeStateWrapper();\n });\n }\n }\n };\n MenuBase.prototype.updateReactTemplate = function () {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact && this.template && this.navIdx.length === 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var portals = this.portals.splice(0, this.items.length);\n this.clearTemplate(['template']);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.portals = portals;\n this.renderReactTemplates();\n }\n };\n MenuBase.prototype.getMenuItemModel = function (item, level) {\n if (isNullOrUndefined(item)) {\n return null;\n }\n if (isNullOrUndefined(level)) {\n level = 0;\n }\n var fields = this.getFields(level);\n return { text: item[fields.text], id: item[fields.id], items: item[fields.child], separator: item[fields.separator],\n iconCss: item[fields.iconCss], url: item[fields.url] };\n };\n MenuBase.prototype.getPopups = function () {\n var _this = this;\n var popups = [];\n [].slice.call(document.querySelectorAll('.' + POPUP)).forEach(function (elem) {\n if (!isNullOrUndefined(elem.querySelector('.' + ITEM)) && _this.getIndex(elem.querySelector('.' + ITEM).id, true).length) {\n popups.push(elem);\n }\n });\n return popups;\n };\n MenuBase.prototype.isMenuVisible = function () {\n return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n };\n MenuBase.prototype.canOpen = function (target) {\n var canOpen = true;\n if (this.filter) {\n canOpen = false;\n var filter = this.filter.split(' ');\n for (var i = 0, len = filter.length; i < len; i++) {\n if (closest(target, '.' + filter[i])) {\n canOpen = true;\n break;\n }\n }\n }\n return canOpen;\n };\n MenuBase.prototype.openMenu = function (li, item, top, left, e, target) {\n var _this = this;\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (e === void 0) { e = null; }\n if (target === void 0) { target = this.targetElement; }\n var wrapper = this.getWrapper();\n this.lItem = li;\n var elemId = this.element.id !== '' ? this.element.id : 'menu';\n this.isMenusClosed = false;\n if (isNullOrUndefined(top)) {\n top = -1;\n }\n if (isNullOrUndefined(left)) {\n left = -1;\n }\n if (li) {\n this.uList = this.createItems(item[this.getField('children', this.navIdx.length - 1)]);\n if (!this.isMenu && Browser.isDevice) {\n wrapper.lastChild.style.display = 'none';\n var data = {\n text: item[this.getField('text')].toString(), iconCss: ICONS + ' e-previous'\n };\n var hdata = new MenuItem(this.items[0], 'items', data, true);\n var hli = this.createItems([hdata]).children[0];\n hli.classList.add(HEADER);\n this.uList.insertBefore(hli, this.uList.children[0]);\n }\n if (this.isMenu) {\n this.popupWrapper = this.createElement('div', {\n className: 'e-' + this.getModuleName() + '-wrapper ' + POPUP, id: li.id + '-ej2menu-' + elemId + '-popup'\n });\n if (this.hamburgerMode) {\n top = li.offsetHeight;\n li.appendChild(this.popupWrapper);\n }\n else {\n document.body.appendChild(this.popupWrapper);\n }\n this.isNestedOrVertical = this.element.classList.contains('e-vertical') || this.navIdx.length !== 1;\n this.popupObj = this.generatePopup(this.popupWrapper, this.uList, li, this.isNestedOrVertical);\n if (this.template) {\n this.renderReactTemplates();\n }\n if (this.hamburgerMode) {\n this.calculateIndentSize(this.uList, li);\n }\n else {\n if (this.cssClass) {\n addClass([this.popupWrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n this.popupObj.hide();\n }\n if (!this.hamburgerMode && !this.showItemOnClick && this.hoverDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setTimeout(function () { _this.triggerBeforeOpen(li, _this.uList, item, e, 0, 0, 'menu'); }, this.hoverDelay);\n }\n else {\n this.triggerBeforeOpen(li, this.uList, item, e, 0, 0, 'menu');\n }\n }\n else {\n this.uList.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(this.uList);\n if (!this.showItemOnClick && this.hoverDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setTimeout(function () { _this.triggerBeforeOpen(li, _this.uList, item, e, top, left, 'none'); }, this.hoverDelay);\n }\n else {\n this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n }\n }\n }\n else {\n this.uList = this.element;\n this.uList.style.zIndex = getZindexPartial(target ? target : this.element).toString();\n if (isNullOrUndefined(e)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ev = document.createEvent('MouseEvents');\n ev.initEvent(\"click\", true, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var targetEvent = this.copyObject(ev, {});\n targetEvent.target = targetEvent.srcElement = target;\n targetEvent.currentTarget = target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.triggerBeforeOpen(li, this.uList, item, targetEvent, top, left, 'none');\n }\n else {\n this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n }\n }\n };\n MenuBase.prototype.copyObject = function (source, destination) {\n for (var prop in source) {\n destination[\"\" + prop] = source[\"\" + prop];\n }\n return destination;\n };\n MenuBase.prototype.calculateIndentSize = function (ul, li) {\n var liStyle = getComputedStyle(li);\n var liIndent = parseInt(liStyle.textIndent, 10);\n if (this.navIdx.length < 2 && !li.classList.contains('e-blankicon')) {\n liIndent *= 2;\n }\n else {\n liIndent += (liIndent / 4);\n }\n ul.style.textIndent = liIndent + 'px';\n var blankIconElem = ul.querySelectorAll('.e-blankicon');\n if (blankIconElem && blankIconElem.length) {\n var menuIconElem = ul.querySelector('.e-menu-icon');\n var menuIconElemStyle = getComputedStyle(menuIconElem);\n var blankIconIndent = (parseInt(menuIconElemStyle.marginRight, 10) + menuIconElem.offsetWidth + liIndent);\n for (var i = 0; i < blankIconElem.length; i++) {\n blankIconElem[i].style.textIndent = blankIconIndent + 'px';\n }\n }\n };\n MenuBase.prototype.generatePopup = function (popupWrapper, ul, li, isNestedOrVertical) {\n var _this = this;\n var popupObj = new Popup(popupWrapper, {\n actionOnScroll: this.hamburgerMode ? 'none' : 'reposition',\n relateTo: li,\n collision: this.hamburgerMode ? { X: 'none', Y: 'none' } : { X: isNestedOrVertical ||\n this.enableRtl ? 'none' : 'flip', Y: 'fit' },\n position: (isNestedOrVertical && !this.hamburgerMode) ? { X: 'right', Y: 'top' } : { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n enableRtl: this.enableRtl,\n content: ul,\n open: function () {\n var scrollEle = select('.e-menu-vscroll', popupObj.element);\n if (scrollEle) {\n scrollEle.style.height = 'inherit';\n scrollEle.style.maxHeight = '';\n }\n var ul = select('.e-ul', popupObj.element);\n popupObj.element.style.maxHeight = '';\n ul.focus();\n _this.triggerOpen(ul);\n }\n });\n return popupObj;\n };\n MenuBase.prototype.createHeaderContainer = function (wrapper) {\n wrapper = wrapper || this.getWrapper();\n var spanElem = this.createElement('span', { className: 'e-' + this.getModuleName() + '-header' });\n var tempTitle = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.title) : this.title;\n var spanTitle = this.createElement('span', {\n className: 'e-' + this.getModuleName() + '-title', innerHTML: tempTitle\n });\n var spanIcon = this.createElement('span', {\n className: 'e-icons e-' + this.getModuleName() + '-icon', attrs: { 'tabindex': '0' }\n });\n spanElem.appendChild(spanTitle);\n spanElem.appendChild(spanIcon);\n wrapper.insertBefore(spanElem, this.element);\n };\n MenuBase.prototype.openHamburgerMenu = function (e) {\n if (this.hamburgerMode) {\n this.triggerBeforeOpen(null, this.element, null, e, 0, 0, 'hamburger');\n }\n };\n MenuBase.prototype.closeHamburgerMenu = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.element, parentItem: null, event: e,\n items: this.items, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedHamburgerCloseArgs) {\n if (!observedHamburgerCloseArgs.cancel) {\n _this.closeMenu(null, e);\n _this.element.classList.add('e-hide-menu');\n _this.trigger('onClose', { element: _this.element, parentItem: null, items: _this.items });\n }\n });\n };\n MenuBase.prototype.callFit = function (element, x, y, top, left) {\n return fit(element, null, { X: x, Y: y }, { top: top, left: left });\n };\n MenuBase.prototype.triggerBeforeOpen = function (li, ul, item, e, top, left, type) {\n var _this = this;\n var items = li ? item[this.getField('children', this.navIdx.length - 1)] : this.items;\n var eventArgs = {\n element: ul, items: items, parentItem: item, event: e, cancel: false, top: top, left: left, showSubMenuOn: 'Auto'\n };\n var menuType = type;\n this.trigger('beforeOpen', eventArgs, function (observedOpenArgs) {\n switch (menuType) {\n case 'menu':\n if (!_this.hamburgerMode) {\n if (observedOpenArgs.showSubMenuOn !== 'Auto') {\n _this.showItemOnClick = !_this.defaultOption;\n _this.showSubMenuOn = observedOpenArgs.showSubMenuOn;\n }\n _this.top = observedOpenArgs.top;\n _this.left = observedOpenArgs.left;\n }\n _this.popupWrapper.style.display = 'block';\n if (!_this.hamburgerMode) {\n _this.popupWrapper.style.maxHeight = _this.popupWrapper.getBoundingClientRect().height + 'px';\n if (_this.enableScrolling) {\n addScrolling(_this.createElement, _this.popupWrapper, _this.uList, 'vscroll', _this.enableRtl);\n }\n _this.checkScrollOffset(e);\n }\n if (!_this.hamburgerMode && !_this.left && !_this.top) {\n _this.popupObj.refreshPosition(_this.lItem, true);\n _this.left = parseInt(_this.popupWrapper.style.left, 10);\n _this.top = parseInt(_this.popupWrapper.style.top, 10);\n if (_this.enableRtl) {\n _this.left =\n _this.isNestedOrVertical ? _this.left - _this.popupWrapper.offsetWidth - _this.lItem.parentElement.offsetWidth + 2\n : _this.left - _this.popupWrapper.offsetWidth + _this.lItem.offsetWidth;\n }\n // eslint-disable-next-line\n if (_this.template && (_this.isReact || _this.isAngular)) {\n requestAnimationFrame(function () {\n _this.collision();\n _this.popupWrapper.style.display = '';\n });\n }\n else {\n _this.collision();\n _this.popupWrapper.style.display = '';\n }\n }\n else {\n _this.popupObj.collision = { X: 'none', Y: 'none' };\n _this.popupWrapper.style.display = '';\n }\n break;\n case 'none':\n _this.top = observedOpenArgs.top;\n _this.left = observedOpenArgs.left;\n break;\n case 'hamburger':\n if (!observedOpenArgs.cancel) {\n _this.element.classList.remove('e-hide-menu');\n _this.triggerOpen(_this.element);\n }\n break;\n }\n if (menuType !== 'hamburger') {\n if (observedOpenArgs.cancel) {\n if (_this.isMenu) {\n _this.popupObj.destroy();\n detach(_this.popupWrapper);\n }\n else if (ul.className.indexOf('e-ul') > -1) {\n detach(ul);\n }\n _this.navIdx.pop();\n }\n else {\n if (_this.isMenu) {\n if (_this.hamburgerMode) {\n _this.popupWrapper.style.top = _this.top + 'px';\n _this.popupWrapper.style.left = 0 + 'px';\n _this.toggleAnimation(_this.popupWrapper);\n }\n else {\n _this.setBlankIconStyle(_this.popupWrapper);\n _this.wireKeyboardEvent(_this.popupWrapper);\n rippleEffect(_this.popupWrapper, { selector: '.' + ITEM });\n _this.popupWrapper.style.left = _this.left + 'px';\n _this.popupWrapper.style.top = _this.top + 'px';\n var animationOptions = _this.animationSettings.effect !== 'None' ? {\n name: _this.animationSettings.effect, duration: _this.animationSettings.duration,\n timingFunction: _this.animationSettings.easing\n } : null;\n _this.popupObj.show(animationOptions, _this.lItem);\n }\n }\n else {\n _this.setBlankIconStyle(_this.uList);\n _this.setPosition(_this.lItem, _this.uList, _this.top, _this.left);\n _this.toggleAnimation(_this.uList);\n }\n }\n }\n if (_this.keyType === 'right') {\n var cul = _this.getUlByNavIdx();\n li.classList.remove(FOCUSED);\n if (_this.isMenu && _this.navIdx.length === 1) {\n _this.removeLIStateByClass([SELECTED], [_this.getWrapper()]);\n }\n li.classList.add(SELECTED);\n if (_this.action === ENTER) {\n var eventArgs_1 = { element: li, item: item, event: e };\n _this.trigger('select', eventArgs_1);\n }\n li.focus();\n cul = _this.getUlByNavIdx();\n var index = _this.isValidLI(cul.children[0], 0, _this.action);\n cul.children[index].classList.add(FOCUSED);\n cul.children[index].focus();\n }\n });\n };\n MenuBase.prototype.collision = function () {\n var collide;\n collide = isCollide(this.popupWrapper, null, this.left, this.top);\n if ((this.isNestedOrVertical || this.enableRtl) && (collide.indexOf('right') > -1\n || collide.indexOf('left') > -1)) {\n this.popupObj.collision.X = 'none';\n var offWidth = closest(this.lItem, '.e-' + this.getModuleName() + '-wrapper').offsetWidth;\n this.left =\n this.enableRtl ? calculatePosition(this.lItem, this.isNestedOrVertical ? 'right' : 'left', 'top').left\n : this.left - this.popupWrapper.offsetWidth - offWidth + 2;\n }\n collide = isCollide(this.popupWrapper, null, this.left, this.top);\n if (collide.indexOf('left') > -1 || collide.indexOf('right') > -1) {\n this.left = this.callFit(this.popupWrapper, true, false, this.top, this.left).left;\n }\n this.popupWrapper.style.left = this.left + 'px';\n };\n MenuBase.prototype.setBlankIconStyle = function (menu) {\n var blankIconList = [].slice.call(menu.getElementsByClassName('e-blankicon'));\n if (!blankIconList.length) {\n return;\n }\n var iconLi = menu.querySelector('.e-menu-item:not(.e-blankicon):not(.e-separator)');\n if (!iconLi) {\n return;\n }\n var icon = iconLi.querySelector('.e-menu-icon');\n if (!icon) {\n return;\n }\n var cssProp = this.enableRtl ? { padding: 'paddingRight', margin: 'marginLeft' } :\n { padding: 'paddingLeft', margin: 'marginRight' };\n var iconCssProps = getComputedStyle(icon);\n var iconSize = parseInt(iconCssProps.fontSize, 10);\n if (!!parseInt(iconCssProps.width, 10) && parseInt(iconCssProps.width, 10) > iconSize) {\n iconSize = parseInt(iconCssProps.width, 10);\n }\n // eslint:disable\n var size = iconSize + parseInt(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n iconCssProps[cssProp.margin], 10) + parseInt(getComputedStyle(iconLi)[cssProp.padding], 10) + \"px\";\n blankIconList.forEach(function (li) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n li.style[cssProp.padding] = size;\n });\n // eslint:enable\n };\n MenuBase.prototype.checkScrollOffset = function (e) {\n var wrapper = this.getWrapper();\n if (wrapper.children[0].classList.contains('e-menu-hscroll') && this.navIdx.length === 1) {\n var trgt = isNullOrUndefined(e) ? this.element : closest(e.target, '.' + ITEM);\n var offsetEle = select('.e-hscroll-bar', wrapper);\n if (offsetEle.scrollLeft > trgt.offsetLeft) {\n offsetEle.scrollLeft -= (offsetEle.scrollLeft - trgt.offsetLeft);\n }\n var offsetLeft = offsetEle.scrollLeft + offsetEle.offsetWidth;\n var offsetRight = trgt.offsetLeft + trgt.offsetWidth;\n if (offsetLeft < offsetRight) {\n offsetEle.scrollLeft += (offsetRight - offsetLeft);\n }\n }\n };\n MenuBase.prototype.setPosition = function (li, ul, top, left) {\n var px = 'px';\n this.toggleVisiblity(ul);\n if (ul === this.element || (left > -1 && top > -1)) {\n var collide = isCollide(ul, null, left, top);\n if (collide.indexOf('right') > -1) {\n left = left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n var offset = this.callFit(ul, false, true, top, left);\n top = offset.top - 20;\n if (top < 0) {\n var newTop = (pageYOffset + document.documentElement.clientHeight) - ul.getBoundingClientRect().height;\n if (newTop > -1) {\n top = newTop;\n }\n }\n }\n collide = isCollide(ul, null, left, top);\n if (collide.indexOf('left') > -1) {\n var offset = this.callFit(ul, true, false, top, left);\n left = offset.left;\n }\n }\n else {\n if (Browser.isDevice) {\n top = Number(this.element.style.top.replace(px, ''));\n left = Number(this.element.style.left.replace(px, ''));\n }\n else {\n var x = this.enableRtl ? 'left' : 'right';\n var offset = calculatePosition(li, x, 'top');\n top = offset.top;\n left = offset.left;\n var collide = isCollide(ul, null, this.enableRtl ? left - ul.offsetWidth : left, top);\n var xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n if (xCollision) {\n offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n left = offset.left;\n }\n if (this.enableRtl || xCollision) {\n left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n offset = this.callFit(ul, false, true, top, left);\n top = offset.top;\n }\n }\n }\n this.toggleVisiblity(ul, false);\n ul.style.top = top + px;\n ul.style.left = left + px;\n };\n MenuBase.prototype.toggleVisiblity = function (ul, isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n ul.style.visibility = isVisible ? 'hidden' : '';\n ul.style.display = isVisible ? 'block' : 'none';\n };\n MenuBase.prototype.createItems = function (items) {\n var _this = this;\n var level = this.navIdx ? this.navIdx.length : 0;\n var fields = this.getFields(level);\n var showIcon = this.hasField(items, this.getField('iconCss', level));\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n fields: fields,\n template: this.template,\n itemNavigable: true,\n itemCreating: function (args) {\n if (!args.curData[args.fields[fields.id]]) {\n args.curData[args.fields[fields.id]] = getUniqueID('menuitem');\n }\n if (isNullOrUndefined(args.curData.htmlAttributes)) {\n args.curData.htmlAttributes = {};\n }\n if (Browser.isIE) {\n args.curData.htmlAttributes.role = 'menuitem';\n args.curData.htmlAttributes.tabindex = '-1';\n }\n else {\n Object.assign(args.curData.htmlAttributes, { role: 'menuitem', tabindex: '-1' });\n }\n if (_this.isMenu && !args.curData[_this.getField('separator', level)]) {\n args.curData.htmlAttributes['aria-label'] = args.curData[args.fields.text] ?\n args.curData[args.fields.text] : args.curData[args.fields.id];\n }\n if (args.curData[args.fields[fields.iconCss]] === '') {\n args.curData[args.fields[fields.iconCss]] = null;\n }\n },\n itemCreated: function (args) {\n if (args.curData[_this.getField('separator', level)]) {\n args.item.classList.add(SEPARATOR);\n args.item.setAttribute('role', 'separator');\n }\n if (showIcon && !args.curData[args.fields.iconCss]\n && !args.curData[_this.getField('separator', level)]) {\n args.item.classList.add('e-blankicon');\n }\n if (args.curData[args.fields.child]\n && args.curData[args.fields.child].length) {\n var span = _this.createElement('span', { className: ICONS + ' ' + CARET });\n args.item.appendChild(span);\n args.item.setAttribute('aria-haspopup', 'true');\n args.item.setAttribute('aria-expanded', 'false');\n args.item.classList.add('e-menu-caret-icon');\n }\n if (_this.isMenu && _this.template) {\n args.item.setAttribute('id', args.curData[args.fields.id].toString());\n args.item.removeAttribute('data-uid');\n if (args.item.classList.contains('e-level-1')) {\n args.item.classList.remove('e-level-1');\n }\n if (args.item.classList.contains('e-has-child')) {\n args.item.classList.remove('e-has-child');\n }\n args.item.removeAttribute('aria-level');\n }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n this.setProperties({ 'items': this.items }, true);\n if (this.isMenu) {\n listBaseOptions.templateID = this.element.id + TEMPLATE_PROPERTY;\n }\n var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template, this);\n ul.setAttribute('tabindex', '0');\n if (this.isMenu) {\n ul.setAttribute('role', 'menu');\n }\n else {\n ul.setAttribute('role', 'menubar');\n }\n return ul;\n };\n MenuBase.prototype.moverHandler = function (e) {\n var trgt = e.target;\n this.liTrgt = trgt;\n var cli = this.getLI(trgt);\n var wrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : this.getWrapper();\n var hdrWrapper = this.getWrapper();\n var regex = new RegExp('-ej2menu-(.*)-popup');\n var ulId;\n var isDifferentElem = false;\n if (!wrapper) {\n return;\n }\n if (wrapper.id !== '') {\n ulId = regex.exec(wrapper.id)[1];\n }\n else {\n ulId = wrapper.querySelector('ul').id;\n }\n if (ulId !== this.element.id) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [this.getWrapper()]);\n if (this.navIdx.length) {\n isDifferentElem = true;\n }\n else {\n return;\n }\n }\n if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper') && !isDifferentElem) {\n this.removeLIStateByClass([FOCUSED], this.isMenu ? [wrapper].concat(this.getPopups()) : [wrapper]);\n this.removeLIStateByClass([FOCUSED], this.isMenu ? [hdrWrapper].concat(this.getPopups()) : [hdrWrapper]);\n cli.classList.add(FOCUSED);\n if (!this.showItemOnClick) {\n this.clickHandler(e);\n }\n }\n else if (this.isMenu && this.showItemOnClick && !isDifferentElem) {\n this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n }\n if (this.isMenu) {\n if (!this.showItemOnClick && (trgt.parentElement !== wrapper && !closest(trgt, '.e-' + this.getModuleName() + '-popup'))\n && (!cli || (cli && !this.getIndex(cli.id, true).length)) && this.showSubMenuOn !== 'Hover') {\n this.removeLIStateByClass([FOCUSED], [wrapper]);\n if (this.navIdx.length) {\n this.isClosed = true;\n this.closeMenu(null, e);\n }\n }\n else if (isDifferentElem && !this.showItemOnClick) {\n if (this.navIdx.length) {\n this.isClosed = true;\n this.closeMenu(null, e);\n }\n }\n if (!this.isClosed) {\n this.removeStateWrapper();\n }\n this.isClosed = false;\n }\n };\n MenuBase.prototype.removeStateWrapper = function () {\n if (this.liTrgt) {\n var wrapper = closest(this.liTrgt, '.e-menu-vscroll');\n if (this.liTrgt.tagName === 'DIV' && wrapper) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [wrapper]);\n }\n }\n };\n MenuBase.prototype.removeLIStateByClass = function (classList, element) {\n var li;\n var _loop_1 = function (i) {\n classList.forEach(function (className) {\n li = select('.' + className, element[i]);\n if (li) {\n li.classList.remove(className);\n }\n });\n };\n for (var i = 0; i < element.length; i++) {\n _loop_1(i);\n }\n };\n MenuBase.prototype.getField = function (propName, level) {\n if (level === void 0) { level = 0; }\n var fieldName = this.fields[\"\" + propName];\n return typeof fieldName === 'string' ? fieldName :\n (!fieldName[level] ? fieldName[fieldName.length - 1].toString()\n : fieldName[level].toString());\n };\n MenuBase.prototype.getFields = function (level) {\n if (level === void 0) { level = 0; }\n return {\n id: this.getField('itemId', level),\n iconCss: this.getField('iconCss', level),\n text: this.getField('text', level),\n url: this.getField('url', level),\n child: this.getField('children', level),\n separator: this.getField('separator', level)\n };\n };\n MenuBase.prototype.hasField = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][\"\" + field]) {\n return true;\n }\n }\n return false;\n };\n MenuBase.prototype.menuHeaderClickHandler = function (e) {\n if (closest(e.target, '.e-menu-wrapper').querySelector('ul.e-menu-parent').id !== this.element.id) {\n return;\n }\n if (this.element.className.indexOf('e-hide-menu') > -1) {\n this.openHamburgerMenu(e);\n }\n else {\n this.closeHamburgerMenu(e);\n }\n };\n MenuBase.prototype.clickHandler = function (e) {\n if (this.isTapHold) {\n this.isTapHold = false;\n }\n else {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.cli = this.getLI(trgt);\n var regex = new RegExp('-ej2menu-(.*)-popup');\n var cliWrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : null;\n var isInstLI = cli && cliWrapper && (this.isMenu ? this.getIndex(cli.id, true).length > 0\n : wrapper.firstElementChild.id === cliWrapper.firstElementChild.id);\n if (Browser.isDevice && this.isMenu) {\n this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n this.mouseDownHandler(e);\n }\n if (cli && cliWrapper && this.isMenu) {\n var cliWrapperId = cliWrapper.id ? regex.exec(cliWrapper.id)[1] : cliWrapper.querySelector('.e-menu-parent').id;\n if (this.element.id !== cliWrapperId) {\n return;\n }\n }\n if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n this.setLISelected(cli);\n var navIdx = this.getIndex(cli.id, true);\n var item = this.getItem(navIdx);\n var eventArgs = { element: cli, item: item, event: e };\n this.trigger('select', eventArgs);\n }\n if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {\n var ul = void 0;\n if (cli.classList.contains(HEADER)) {\n ul = wrapper.children[this.navIdx.length - 1];\n this.toggleAnimation(ul);\n var sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n detach(cli.parentNode);\n this.navIdx.pop();\n }\n else {\n if (!cli.classList.contains(SEPARATOR)) {\n this.showSubMenu = true;\n var cul = cli.parentNode;\n this.cliIdx = this.getIdx(cul, cli);\n if (this.isMenu || !Browser.isDevice) {\n var culIdx = this.isMenu ? Array.prototype.indexOf.call([wrapper].concat(this.getPopups()), closest(cul, '.' + 'e-' + this.getModuleName() + '-wrapper'))\n : this.getIdx(wrapper, cul);\n if (this.navIdx[culIdx] === this.cliIdx) {\n this.showSubMenu = false;\n }\n if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || this.showSubMenu)) {\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n this.isClosed = true;\n this.keyType = 'click';\n if (this.showItemOnClick) {\n this.setLISelected(cli);\n }\n this.closeMenu(culIdx + 1, e);\n if (this.showItemOnClick) {\n this.setLISelected(cli);\n }\n }\n }\n if (!this.isClosed) {\n this.afterCloseMenu(e);\n }\n this.isClosed = false;\n }\n }\n }\n else {\n if (this.isMenu && trgt.tagName === 'DIV' && this.navIdx.length && closest(trgt, '.e-menu-vscroll')) {\n var popupEle = closest(trgt, '.' + POPUP);\n var cIdx = Array.prototype.indexOf.call(this.getPopups(), popupEle) + 1;\n if (cIdx < this.navIdx.length) {\n this.closeMenu(cIdx + 1, e);\n if (popupEle) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [popupEle]);\n }\n }\n }\n else if (this.isMenu && this.hamburgerMode && trgt.tagName === 'SPAN'\n && trgt.classList.contains('e-menu-icon')) {\n this.menuHeaderClickHandler(e);\n }\n else {\n if (trgt.tagName !== 'UL' || (this.isMenu ? trgt.parentElement.classList.contains('e-menu-wrapper') &&\n !this.getIndex(trgt.querySelector('.' + ITEM).id, true).length : trgt.parentElement !== wrapper)) {\n if (!cli) {\n this.removeLIStateByClass([SELECTED], [wrapper]);\n }\n if (!cli || !cli.querySelector('.' + CARET)) {\n this.closeMenu(null, e);\n }\n }\n }\n }\n }\n };\n MenuBase.prototype.afterCloseMenu = function (e) {\n if (isNullOrUndefined(e)) {\n return;\n }\n var isHeader;\n if (this.showSubMenu) {\n if (this.showItemOnClick && this.navIdx.length === 0) {\n isHeader = closest(e.target, '.e-menu-parent.e-control');\n }\n else {\n isHeader = closest(this.element, '.e-menu-parent.e-control');\n }\n var idx = this.navIdx.concat(this.cliIdx);\n var item = this.getItem(idx);\n if (item && item[this.getField('children', idx.length - 1)] &&\n item[this.getField('children', idx.length - 1)].length) {\n if (e.type === 'mouseover' || (Browser.isDevice && this.isMenu)) {\n this.setLISelected(this.cli);\n }\n if ((!this.hamburgerMode && isHeader) || (this.hamburgerMode && this.cli.getAttribute('aria-expanded') === 'false')) {\n this.cli.setAttribute('aria-expanded', 'true');\n this.navIdx.push(this.cliIdx);\n this.openMenu(this.cli, item, null, null, e);\n }\n }\n else {\n if (e.type !== 'mouseover') {\n this.closeMenu(null, e);\n }\n }\n if (!isHeader) {\n var cul = this.getUlByNavIdx();\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.setAttribute('aria-expanded', 'false');\n sli.classList.remove(SELECTED);\n }\n }\n }\n this.keyType = '';\n };\n MenuBase.prototype.setLISelected = function (li) {\n var sli = this.getLIByClass(li.parentElement, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n if (!this.isMenu) {\n li.classList.remove(FOCUSED);\n }\n li.classList.add(SELECTED);\n };\n MenuBase.prototype.getLIByClass = function (ul, classname) {\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classname)) {\n return ul.children[i];\n }\n }\n return null;\n };\n /**\n * This method is used to get the index of the menu item in the Menu based on the argument.\n *\n * @param {MenuItem | string} item - item be passed to get the index | id to be passed to get the item index.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.getItemIndex = function (item, isUniqueId) {\n var idx;\n if (typeof item === 'string') {\n idx = item;\n }\n else {\n idx = item.id;\n }\n var isText = (isUniqueId === false) ? false : true;\n var navIdx = this.getIndex(idx, isText);\n return navIdx;\n };\n /**\n * This method is used to set the menu item in the Menu based on the argument.\n *\n * @param {MenuItem} item - item need to be updated.\n * @param {string} id - id / text to be passed to update the item.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.setItem = function (item, id, isUniqueId) {\n var idx;\n if (isUniqueId) {\n idx = id ? id : item.id;\n }\n else {\n idx = id ? id : item.text;\n }\n var navIdx = this.getIndex(idx, isUniqueId);\n var newItem = this.getItem(navIdx);\n Object.assign(newItem, item);\n };\n MenuBase.prototype.getItem = function (navIdx) {\n navIdx = navIdx.slice();\n var idx = navIdx.pop();\n var items = this.getItems(navIdx);\n return items[idx];\n };\n MenuBase.prototype.getItems = function (navIdx) {\n var items = this.items;\n for (var i = 0; i < navIdx.length; i++) {\n items = items[navIdx[i]][this.getField('children', i)];\n }\n return items;\n };\n MenuBase.prototype.setItems = function (newItems, navIdx) {\n var items = this.getItems(navIdx);\n items.splice(0, items.length);\n for (var i = 0; i < newItems.length; i++) {\n items.splice(i, 0, newItems[i]);\n }\n };\n MenuBase.prototype.getIdx = function (ul, li, skipHdr) {\n if (skipHdr === void 0) { skipHdr = true; }\n var idx = Array.prototype.indexOf.call(ul.children, li);\n if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n idx--;\n }\n return idx;\n };\n MenuBase.prototype.getLI = function (elem) {\n if (elem.tagName === 'LI' && elem.classList.contains('e-menu-item')) {\n return elem;\n }\n return closest(elem, 'li.e-menu-item');\n };\n MenuBase.prototype.updateItemsByNavIdx = function () {\n var items = this.items;\n var count = 0;\n for (var index = 0; index < this.navIdx.length; index++) {\n items = items[index].items;\n if (!items) {\n break;\n }\n count++;\n var ul = this.getUlByNavIdx(count);\n if (!ul) {\n break;\n }\n this.updateItem(ul, items);\n }\n };\n MenuBase.prototype.removeChildElement = function (elem) {\n while (elem.firstElementChild) {\n elem.removeChild(elem.firstElementChild);\n }\n return elem;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @private\n * @param {MenuBaseModel} newProp - Specifies the new properties\n * @param {MenuBaseModel} oldProp - Specifies the old properties\n * @returns {void}\n */\n MenuBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var wrapper = this.getWrapper();\n var _loop_2 = function (prop) {\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n wrapper.classList.toggle(RTL);\n break;\n case 'showItemOnClick':\n this_1.unWireEvents();\n this_1.showItemOnClick = newProp.showItemOnClick;\n this_1.wireEvents();\n break;\n case 'enableScrolling':\n if (newProp.enableScrolling) {\n var ul_2;\n if (this_1.element.classList.contains('e-vertical')) {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl);\n }\n else {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);\n }\n this_1.getPopups().forEach(function (wrapper) {\n ul_2 = select('.e-ul', wrapper);\n addScrolling(_this.createElement, wrapper, ul_2, 'vscroll', _this.enableRtl);\n });\n }\n else {\n var ul_3 = wrapper.children[0];\n if (this_1.element.classList.contains('e-vertical')) {\n destroyScroll(getInstance(ul_3, VScroll), ul_3);\n }\n else {\n destroyScroll(getInstance(ul_3, HScroll), ul_3);\n }\n wrapper.style.overflow = '';\n wrapper.appendChild(this_1.element);\n this_1.getPopups().forEach(function (wrapper) {\n ul_3 = wrapper.children[0];\n destroyScroll(getInstance(ul_3, VScroll), ul_3);\n wrapper.style.overflow = '';\n });\n }\n break;\n case 'items': {\n var idx = void 0;\n var navIdx = void 0;\n var item = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this_1.isReact && this_1.template) {\n this_1.clearTemplate(['template']);\n }\n if (!Object.keys(oldProp.items).length) {\n this_1.updateItem(this_1.element, this_1.items);\n if (this_1.enableScrolling && this_1.element.parentElement.classList.contains('e-custom-scroll')) {\n if (this_1.element.classList.contains('e-vertical')) {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl);\n }\n else {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);\n }\n }\n if (!this_1.hamburgerMode) {\n for (var i = 1, count = wrapper.childElementCount; i < count; i++) {\n detach(wrapper.lastElementChild);\n }\n }\n this_1.navIdx = [];\n }\n else {\n var keys = Object.keys(newProp.items);\n for (var i = 0; i < keys.length; i++) {\n navIdx = this_1.getChangedItemIndex(newProp, [], Number(keys[i]));\n if (navIdx.length <= this_1.getWrapper().children.length) {\n idx = navIdx.pop();\n item = this_1.getItems(navIdx);\n this_1.insertAfter([item[idx]], item[idx].text);\n this_1.removeItem(item, navIdx, idx);\n this_1.setItems(item, navIdx);\n }\n navIdx.length = 0;\n }\n }\n break;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_2(prop);\n }\n };\n MenuBase.prototype.updateItem = function (ul, items) {\n if (isBlazor() && !this.isMenu) {\n ul = this.removeChildElement(ul);\n }\n else {\n if (this.enableScrolling) {\n var wrapper1 = this.getWrapper();\n var ul1 = wrapper1.children[0];\n if (this.element.classList.contains('e-vertical')) {\n destroyScroll(getInstance(ul1, VScroll), ul1);\n }\n else {\n destroyScroll(getInstance(ul1, HScroll), ul1);\n }\n }\n ul.innerHTML = '';\n }\n var lis = [].slice.call(this.createItems(items).children);\n lis.forEach(function (li) {\n ul.appendChild(li);\n });\n };\n MenuBase.prototype.getChangedItemIndex = function (newProp, index, idx) {\n index.push(idx);\n var key = Object.keys(newProp.items[idx]).pop();\n if (key === 'items') {\n var item = newProp.items[idx];\n var popStr = Object.keys(item.items).pop();\n if (popStr) {\n this.getChangedItemIndex(item, index, Number(popStr));\n }\n }\n else {\n if (key === 'isParentArray' && index.length > 1) {\n index.pop();\n }\n }\n return index;\n };\n MenuBase.prototype.removeItem = function (item, navIdx, idx) {\n item.splice(idx, 1);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n detach(uls[navIdx.length].children[idx]);\n }\n };\n /**\n * Used to unwire the bind events.\n *\n * @private\n * @param {string} targetSelctor - Specifies the target selector\n * @returns {void}\n */\n MenuBase.prototype.unWireEvents = function (targetSelctor) {\n if (targetSelctor === void 0) { targetSelctor = this.target; }\n var wrapper = this.getWrapper();\n if (targetSelctor) {\n var target = void 0;\n var touchModule = void 0;\n var targetElems = selectAll(targetSelctor);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (this.isMenu) {\n EventHandler.remove(target, 'click', this.menuHeaderClickHandler);\n }\n else {\n if (Browser.isIos) {\n touchModule = getInstance(target, Touch);\n if (touchModule) {\n touchModule.destroy();\n }\n }\n else {\n EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n }\n }\n }\n if (!this.isMenu) {\n EventHandler.remove(this.targetElement, 'scroll', this.scrollHandler);\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollHandler);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.remove(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler);\n EventHandler.remove(document, 'mousedown', this.delegateMouseDownHandler);\n }\n EventHandler.remove(document, 'click', this.delegateClickHandler);\n this.unWireKeyboardEvent(wrapper);\n this.rippleFn();\n };\n MenuBase.prototype.unWireKeyboardEvent = function (element) {\n var keyboardModule = getInstance(element, KeyboardEvents);\n if (keyboardModule) {\n keyboardModule.destroy();\n }\n };\n MenuBase.prototype.toggleAnimation = function (ul, isMenuOpen) {\n var _this = this;\n if (isMenuOpen === void 0) { isMenuOpen = true; }\n var pUlHeight;\n var pElement;\n if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n this.end(ul, isMenuOpen);\n }\n else {\n this.animation.animate(ul, {\n name: this.animationSettings.effect,\n duration: this.animationSettings.duration,\n timingFunction: this.animationSettings.easing,\n begin: function (options) {\n if (_this.hamburgerMode) {\n pElement = options.element.parentElement;\n options.element.style.position = 'absolute';\n pUlHeight = pElement.offsetHeight;\n options.element.style.maxHeight = options.element.offsetHeight + 'px';\n pElement.style.maxHeight = '';\n }\n else {\n options.element.style.display = 'block';\n options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n }\n },\n progress: function (options) {\n if (_this.hamburgerMode) {\n pElement.style.minHeight = (pUlHeight + options.element.offsetHeight) + 'px';\n }\n },\n end: function (options) {\n if (_this.hamburgerMode) {\n options.element.style.position = '';\n options.element.style.maxHeight = '';\n pElement.style.minHeight = '';\n options.element.style.top = 0 + 'px';\n options.element.children[0].focus();\n _this.triggerOpen(options.element.children[0]);\n }\n else {\n _this.end(options.element, isMenuOpen);\n }\n }\n });\n }\n };\n MenuBase.prototype.triggerOpen = function (ul) {\n var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n var eventArgs = {\n element: ul, parentItem: item, items: item ? item.items : this.items\n };\n this.trigger('onOpen', eventArgs);\n if (!this.isMenu) {\n EventHandler.add(ul, 'keydown', this.keyHandler, this);\n }\n };\n MenuBase.prototype.end = function (ul, isMenuOpen) {\n if (isMenuOpen) {\n ul.style.display = 'block';\n ul.style.maxHeight = '';\n this.triggerOpen(ul);\n if (ul.querySelector('.' + FOCUSED)) {\n ul.querySelector('.' + FOCUSED).focus();\n }\n else {\n var ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n if (this.currentTarget) {\n if (!(this.currentTarget.classList.contains('e-numerictextbox') || this.currentTarget.classList.contains('e-textbox') || this.currentTarget.tagName === 'INPUT')) {\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n else {\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n }\n else {\n if (ul === this.element) {\n var fli = this.getLIByClass(this.element, FOCUSED);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n var sli = this.getLIByClass(this.element, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n ul.style.display = 'none';\n }\n else {\n detach(ul);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n MenuBase.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get wrapper element.\n *\n * @returns {Element} - Wrapper element\n * @private\n */\n MenuBase.prototype.getWrapper = function () {\n return closest(this.element, '.e-' + this.getModuleName() + '-wrapper');\n };\n MenuBase.prototype.getIndex = function (data, isUniqueId, items, nIndex, isCallBack, level) {\n if (items === void 0) { items = this.items; }\n if (nIndex === void 0) { nIndex = []; }\n if (isCallBack === void 0) { isCallBack = false; }\n if (level === void 0) { level = 0; }\n var item;\n level = isCallBack ? level + 1 : 0;\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i];\n if ((isUniqueId ? item[this.getField('itemId', level)] : item[this.getField('text', level)]) === data) {\n nIndex.push(i);\n break;\n }\n else if (item[this.getField('children', level)]\n && item[this.getField('children', level)].length) {\n nIndex = this.getIndex(data, isUniqueId, item[this.getField('children', level)], nIndex, true, level);\n if (nIndex[nIndex.length - 1] === -1) {\n if (i !== len - 1) {\n nIndex.pop();\n }\n }\n else {\n nIndex.unshift(i);\n break;\n }\n }\n else {\n if (i === len - 1) {\n nIndex.push(-1);\n }\n }\n }\n return (!isCallBack && nIndex[0] === -1) ? [] : nIndex;\n };\n /**\n * This method is used to enable or disable the menu items in the Menu based on the items and enable argument.\n *\n * @param {string[]} items - Text items that needs to be enabled/disabled.\n * @param {boolean} enable - Set `true`/`false` to enable/disable the list items.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.enableItems = function (items, enable, isUniqueId) {\n if (enable === void 0) { enable = true; }\n var ul;\n var idx;\n var navIdx;\n var disabled = DISABLED;\n var skipItem;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n if (this.navIdx.length) {\n if (navIdx.length !== 1) {\n skipItem = false;\n for (var i_1 = 0, len = navIdx.length - 1; i_1 < len; i_1++) {\n if (navIdx[i_1] !== this.navIdx[i_1]) {\n skipItem = true;\n break;\n }\n }\n if (skipItem) {\n continue;\n }\n }\n }\n else {\n if (navIdx.length !== 1) {\n continue;\n }\n }\n idx = navIdx.pop();\n ul = this.getUlByNavIdx(navIdx.length);\n if (ul && !isNullOrUndefined(idx)) {\n if (enable) {\n if (this.isMenu) {\n ul.children[idx].classList.remove(disabled);\n ul.children[idx].removeAttribute('aria-disabled');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(disabled);\n }\n else {\n ul.children[idx].classList.remove(disabled);\n }\n }\n }\n else {\n if (this.isMenu) {\n ul.children[idx].classList.add(disabled);\n ul.children[idx].setAttribute('aria-disabled', 'true');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(disabled);\n }\n else {\n ul.children[idx].classList.add(disabled);\n }\n }\n }\n }\n }\n };\n /**\n * This method is used to show the menu items in the Menu based on the items text.\n *\n * @param {string[]} items - Text items that needs to be shown.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.showItems = function (items, isUniqueId) {\n this.showHideItems(items, false, isUniqueId);\n };\n /**\n * This method is used to hide the menu items in the Menu based on the items text.\n *\n * @param {string[]} items - Text items that needs to be hidden.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.hideItems = function (items, isUniqueId) {\n this.showHideItems(items, true, isUniqueId);\n };\n MenuBase.prototype.showHideItems = function (items, ishide, isUniqueId) {\n var ul;\n var index;\n var navIdx;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n index = navIdx.pop();\n ul = this.getUlByNavIdx(navIdx.length);\n if (ul) {\n var validUl = isUniqueId ? ul.children[index].id : ul.children[index].textContent;\n if (ishide && validUl === items[i]) {\n ul.children[index].classList.add(HIDE);\n }\n else {\n ul.children[index].classList.remove(HIDE);\n }\n }\n }\n };\n /**\n * It is used to remove the menu items from the Menu based on the items text.\n *\n * @param {string[]} items Text items that needs to be removed.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.removeItems = function (items, isUniqueId) {\n var idx;\n var navIdx;\n var iitems;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n if (!isNullOrUndefined(idx)) {\n this.removeItem(iitems, navIdx, idx);\n }\n }\n };\n /**\n * It is used to insert the menu items after the specified menu item text.\n *\n * @param {MenuItemModel[]} items - Items that needs to be inserted.\n * @param {string} text - Text item after that the element to be inserted.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.insertAfter = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId);\n };\n /**\n * It is used to insert the menu items before the specified menu item text.\n *\n * @param {MenuItemModel[]} items - Items that needs to be inserted.\n * @param {string} text - Text item before that the element to be inserted.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.insertBefore = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId, false);\n };\n MenuBase.prototype.insertItems = function (items, text, isUniqueId, isAfter) {\n if (isAfter === void 0) { isAfter = true; }\n var li;\n var idx;\n var navIdx;\n var iitems;\n var menuitem;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(text, isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n menuitem = new MenuItem(iitems[0], 'items', items[i], true);\n iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n var uls = this.isMenu ? [this.getWrapper()].concat(this.getPopups()) : [].slice.call(this.getWrapper().children);\n if (!isNullOrUndefined(idx) && navIdx.length < uls.length) {\n idx = isAfter ? idx + 1 : idx;\n li = this.createItems(iitems).children[idx];\n var ul = this.isMenu ? select('.e-menu-parent', uls[navIdx.length]) : uls[navIdx.length];\n ul.insertBefore(li, ul.children[idx]);\n }\n }\n };\n MenuBase.prototype.removeAttributes = function () {\n var _this = this;\n ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n _this.element.style.removeProperty(key);\n });\n ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n if (key === 'class' && _this.element.classList.contains('e-menu-parent')) {\n _this.element.classList.remove('e-menu-parent');\n }\n if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n _this.element.removeAttribute(key);\n }\n if (_this.isMenu && key === 'class' && _this.element.classList.contains('e-vertical')) {\n _this.element.classList.remove('e-vertical');\n }\n });\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n MenuBase.prototype.destroy = function () {\n var wrapper = this.getWrapper();\n if (wrapper) {\n this.unWireEvents();\n if (!this.isMenu) {\n this.clonedElement.style.display = '';\n if (this.clonedElement.tagName === 'EJS-CONTEXTMENU') {\n addClass([this.clonedElement], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n this.element = this.clonedElement;\n }\n else {\n if (this.refreshing && this.clonedElement.childElementCount && this.clonedElement.children[0].tagName === 'LI') {\n this.setProperties({ 'items': [] }, true);\n }\n if (document.getElementById(this.clonedElement.id)) {\n var refEle = this.clonedElement.nextElementSibling;\n if (refEle && refEle !== wrapper) {\n this.clonedElement.parentElement.insertBefore(this.element, refEle);\n }\n else {\n this.clonedElement.parentElement.appendChild(this.element);\n }\n if (isBlazor() && !this.isMenu) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n append([].slice.call(this.clonedElement.children), this.element);\n detach(this.clonedElement);\n this.removeAttributes();\n }\n }\n this.clonedElement = null;\n }\n else {\n this.closeMenu();\n if (isBlazor() && !this.isMenu) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n this.removeAttributes();\n wrapper.parentNode.insertBefore(this.element, wrapper);\n this.clonedElement = null;\n }\n if (this.isMenu && this.clonedElement) {\n detach(this.element);\n wrapper.style.display = '';\n wrapper.classList.remove('e-' + this.getModuleName() + '-wrapper');\n wrapper.removeAttribute('data-ripple');\n }\n else {\n detach(wrapper);\n }\n _super.prototype.destroy.call(this);\n if (this.template) {\n this.clearTemplate(['template']);\n }\n }\n this.rippleFn = null;\n };\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"created\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(0)\n ], MenuBase.prototype, \"hoverDelay\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"filter\", void 0);\n __decorate([\n Property(null)\n ], MenuBase.prototype, \"template\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"enableScrolling\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Complex({ itemId: 'id', text: 'text', parentId: 'parentId', iconCss: 'iconCss', url: 'url', separator: 'separator', children: 'items' }, FieldSettings)\n ], MenuBase.prototype, \"fields\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuBase.prototype, \"items\", void 0);\n __decorate([\n Complex({ duration: 400, easing: 'ease', effect: 'SlideDown' }, MenuAnimationSettings)\n ], MenuBase.prototype, \"animationSettings\", void 0);\n MenuBase = __decorate([\n NotifyPropertyChanges\n ], MenuBase);\n return MenuBase;\n}(Component));\nexport { MenuBase };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\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 = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? 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/* eslint-disable @typescript-eslint/triple-slash-reference */\n/// \nimport { attributes, getUniqueID, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { getZindexPartial } from '@syncfusion/ej2-popups';\nimport { MenuBase, MenuItem } from '../common/menu-base';\n/**\n * The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.\n * ```html\n *
    \n *
      \n * ```\n * ```typescript\n * \n * ```\n */\nvar ContextMenu = /** @class */ (function (_super) {\n __extends(ContextMenu, _super);\n /**\n * Constructor for creating the widget.\n *\n * @private\n * @param {ContextMenuModel} options - Specifies the context menu model\n * @param {string} element - Specifies the element\n */\n function ContextMenu(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * For internal use only - prerender processing.\n *\n * @private\n * @returns {void}\n */\n ContextMenu.prototype.preRender = function () {\n this.isMenu = false;\n this.element.id = this.element.id || getUniqueID('ej2-contextmenu');\n _super.prototype.preRender.call(this);\n };\n ContextMenu.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n attributes(this.element, { 'role': 'menubar', 'tabindex': '0' });\n this.element.style.zIndex = getZindexPartial(this.element).toString();\n };\n /**\n * This method is used to open the ContextMenu in specified position.\n *\n * @param {number} top - To specify ContextMenu vertical positioning.\n * @param {number} left - To specify ContextMenu horizontal positioning.\n * @param {HTMLElement} target - To calculate z-index for ContextMenu based upon the specified target.\n * @function open\n * @returns {void}\n */\n ContextMenu.prototype.open = function (top, left, target) {\n _super.prototype.openMenu.call(this, null, null, top, left, null, target);\n };\n /**\n * Closes the ContextMenu if it is opened.\n *\n * @function close\n * @returns {void}\n */\n ContextMenu.prototype.close = function () {\n _super.prototype.closeMenu.call(this);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @private\n * @param {ContextMenuModel} newProp - Specifies new properties\n * @param {ContextMenuModel} oldProp - Specifies old properties\n * @returns {void}\n */\n ContextMenu.prototype.onPropertyChanged = function (newProp, oldProp) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'filter':\n this.close();\n this.filter = newProp.filter;\n break;\n case 'target':\n this.unWireEvents(oldProp.target);\n this.wireEvents();\n break;\n }\n }\n };\n /**\n * Get module name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"filter\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], ContextMenu.prototype, \"items\", void 0);\n ContextMenu = __decorate([\n NotifyPropertyChanges\n ], ContextMenu);\n return ContextMenu;\n}(MenuBase));\nexport { ContextMenu };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, remove, Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { distinctStringValues, isComplexField, getComplexFieldID, getCustomDateFormat, applyBiggerTheme, performComplexDataOperation, registerEventHandlers, removeEventHandlers, clearReactVueTemplates } from '../base/util';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { parentsUntil, appendChildren, extend, eventPromise } from '../base/util';\nimport * as events from '../base/constant';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\nimport * as literals from '../base/string-literals';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilterBase = /** @class */ (function (_super) {\n __extends(ExcelFilterBase, _super);\n /**\n * Constructor for excel filtering module\n *\n * @param {IXLFilter} parent - parent details\n * @param {Object} customFltrOperators - operator details\n * @hidden\n */\n function ExcelFilterBase(parent, customFltrOperators) {\n var _this = _super.call(this, parent) || this;\n _this.childRefs = [];\n _this.eventHandlers = {};\n _this.isDevice = false;\n _this.customFilterOperators = customFltrOperators;\n _this.isExcel = true;\n return _this;\n }\n ExcelFilterBase.prototype.getCMenuDS = function (type, operator) {\n var options = {\n number: ['Equal', 'NotEqual', '', 'LessThan', 'LessThanOrEqual', 'GreaterThan',\n 'GreaterThanOrEqual', 'Between', '', 'CustomFilter'],\n string: ['Equal', 'NotEqual', '', 'StartsWith', 'EndsWith', '', 'Contains', 'NotContains', '', 'CustomFilter']\n };\n options.date = options.number;\n options.datetime = options.number;\n options.dateonly = options.number;\n var model = [];\n for (var i = 0; i < options[\"\" + type].length; i++) {\n if (options[\"\" + type][parseInt(i.toString(), 10)].length) {\n if (operator) {\n model.push({\n text: this.getLocalizedLabel(options[\"\" + type][parseInt(i.toString(), 10)]) + '...',\n iconCss: 'e-icons e-icon-check ' + (operator === options[\"\" + type][parseInt(i.toString(), 10)].toLowerCase() ? '' : 'e-emptyicon')\n });\n }\n else {\n model.push({\n text: this.getLocalizedLabel(options[\"\" + type][parseInt(i.toString(), 10)]) + '...'\n });\n }\n }\n else {\n model.push({ separator: true });\n }\n }\n return model;\n };\n /**\n * To destroy the filter bar.\n *\n * @returns {void}\n * @hidden\n */\n ExcelFilterBase.prototype.destroy = function () {\n if (this.dlg) {\n this.unwireExEvents();\n _super.prototype.closeDialog.call(this);\n }\n if (!this.isDevice && this.menuObj) {\n var li = this.menuObj.element.querySelector('li.e-focused');\n if (!(li && parentsUntil(li, 'e-excel-menu'))) {\n this.destroyCMenu();\n }\n }\n if (this.dlgObj && !this.dlgObj.isDestroyed) {\n this.removeDialog();\n }\n };\n ExcelFilterBase.prototype.createMenu = function (type, isFiltered, isCheckIcon, eleOptions) {\n var options = { string: 'TextFilter', date: 'DateFilter', dateonly: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n this.menu = this.parent.createElement('div', { className: 'e-contextmenu-wrapper' });\n if (this.parent.enableRtl) {\n this.menu.classList.add('e-rtl');\n }\n else {\n this.menu.classList.remove('e-rtl');\n }\n if (this.parent.cssClass) {\n this.menu.classList.add(this.parent.cssClass);\n }\n var ul = this.parent.createElement('ul');\n var icon = isFiltered ? 'e-excl-filter-icon e-filtered' : 'e-excl-filter-icon';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.parent.allowSorting && this.parent.getModuleName() === 'grid'\n && !this.options.isResponsiveFilter) {\n var hdrele = this.parent.getColumnHeaderByUid(eleOptions.uid).getAttribute('aria-sort');\n var colIsSort = this.parent.getColumnByField(eleOptions.field).allowSorting;\n var isAsc = (!colIsSort || hdrele === 'ascending') ? 'e-disabled e-excel-ascending' : 'e-excel-ascending';\n var isDesc = (!colIsSort || hdrele === 'descending') ? 'e-disabled e-excel-descending' : 'e-excel-descending';\n var ascName = (type === 'string') ? this.getLocalizedLabel('SortAtoZ') : (type === 'datetime' || type === 'date') ?\n this.getLocalizedLabel('SortByOldest') : this.getLocalizedLabel('SortSmallestToLargest');\n var descName = (type === 'string') ? this.getLocalizedLabel('SortZtoA') : (type === 'datetime' || type === 'date') ?\n this.getLocalizedLabel('SortByNewest') : this.getLocalizedLabel('SortLargestToSmallest');\n ul.appendChild(this.createMenuElem(ascName, isAsc, 'e-sortascending'));\n ul.appendChild(this.createMenuElem(descName, isDesc, 'e-sortdescending'));\n var separator = this.parent.createElement('li', { className: 'e-separator e-menu-item e-excel-separator' });\n ul.appendChild(separator);\n }\n if (!this.options.isResponsiveFilter) {\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel('ClearFilter'), isFiltered ? '' : 'e-disabled', icon));\n }\n if (type !== 'boolean') {\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel(options[\"\" + type]), 'e-submenu', isCheckIcon && this.ensureTextFilter() ? 'e-icon-check' : icon + ' e-emptyicon', true));\n }\n this.menu.appendChild(ul);\n this.parent.notify(events.beforeFltrcMenuOpen, { element: this.menu });\n this.parent.notify(events.refreshCustomFilterClearBtn, { isFiltered: isFiltered });\n };\n ExcelFilterBase.prototype.createMenuElem = function (val, className, iconName, isSubMenu) {\n var li = this.parent.createElement('li', { className: className + ' e-menu-item' });\n li.innerHTML = val;\n li.insertBefore(this.parent.createElement('span', { className: 'e-menu-icon e-icons ' + iconName, attrs: { 'aria-hidden': 'true' } }), li.firstChild);\n if (isSubMenu) {\n li.appendChild(this.parent.createElement('span', { className: 'e-icons e-caret' }));\n }\n return li;\n };\n ExcelFilterBase.prototype.wireExEvents = function () {\n EventHandler.add(this.dlg, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.dlg, 'click', this.clickExHandler, this);\n };\n ExcelFilterBase.prototype.unwireExEvents = function () {\n EventHandler.remove(this.dlg, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.dlg, 'click', this.clickExHandler);\n };\n ExcelFilterBase.prototype.clickExHandler = function (e) {\n var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n var menuItem = parentsUntil(e.target, 'e-menu-item');\n if (menuItem) {\n if (this.getLocalizedLabel('ClearFilter') === menuItem.innerText.trim()) {\n this.clearFilter();\n this.closeDialog();\n }\n else if (this.options.isResponsiveFilter\n && this.getLocalizedLabel(options[this.options.type]) === menuItem.innerText.trim()) {\n this.hoverHandler(e);\n }\n }\n };\n ExcelFilterBase.prototype.destroyCMenu = function () {\n this.isCMenuOpen = false;\n if (this.menuObj && !this.menuObj.isDestroyed) {\n this.menuObj.destroy();\n remove(this.cmenu);\n this.parent.notify(events.renderResponsiveCmenu, { target: null, header: '', isOpen: false, col: this.options.column });\n }\n };\n ExcelFilterBase.prototype.hoverHandler = function (e) {\n if (this.options.isResponsiveFilter && e.type === 'mouseover') {\n return;\n }\n var target = e.target.querySelector('.e-contextmenu');\n var li = parentsUntil(e.target, 'e-menu-item');\n var focused = this.menu.querySelector('.e-focused');\n var isSubMenu;\n if (focused) {\n focused.classList.remove('e-focused');\n }\n if (li) {\n li.classList.add('e-focused');\n isSubMenu = li.classList.contains('e-submenu');\n }\n if (target) {\n return;\n }\n if (!isSubMenu) {\n var submenu = this.menu.querySelector('.e-submenu');\n if (!isNullOrUndefined(submenu)) {\n submenu.classList.remove('e-selected');\n }\n this.destroyCMenu();\n }\n var selectedMenu = this.ensureTextFilter();\n if (!this.isCMenuOpen && isSubMenu) {\n li.classList.add('e-selected');\n this.isCMenuOpen = true;\n var menuOptions = {\n items: this.getCMenuDS(this.options.type, selectedMenu ? selectedMenu.replace(/\\s/g, '') : undefined),\n select: this.selectHandler.bind(this),\n onClose: this.destroyCMenu.bind(this),\n enableRtl: this.parent.enableRtl,\n animationSettings: { effect: 'None' },\n beforeClose: this.preventClose.bind(this),\n cssClass: this.options.isResponsiveFilter && this.parent.cssClass ?\n 'e-res-contextmenu-wrapper' + ' ' + this.parent.cssClass : this.options.isResponsiveFilter ?\n 'e-res-contextmenu-wrapper' : this.parent.cssClass ? this.parent.cssClass : ''\n };\n this.parent.element.appendChild(this.cmenu);\n this.menuObj = new ContextMenu(menuOptions, this.cmenu);\n var client = this.menu.querySelector('.e-submenu').getBoundingClientRect();\n var pos = { top: 0, left: 0 };\n if (this.options.isResponsiveFilter) {\n var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n var content = document.querySelector('.e-responsive-dialog > .e-dlg-header-content');\n var height = content.offsetHeight + 4;\n this.menuObj.element.style.height = 'calc(100% - ' + height + 'px)';\n this.menuObj['open'](height, 0, document.body);\n var header = this.getLocalizedLabel(options[this.options.type]);\n this.parent.notify(events.renderResponsiveCmenu, {\n target: this.menuObj.element.parentElement, header: header, isOpen: true\n });\n }\n else {\n if (Browser.isDevice) {\n this.isDevice = true;\n var contextRect = this.getContextBounds();\n pos.top = (window.innerHeight - contextRect.height) / 2;\n pos.left = (window.innerWidth - contextRect.width) / 2;\n this.closeDialog();\n this.isDevice = false;\n }\n else {\n pos.top = Browser.isIE ? window.pageYOffset + client.top : window.scrollY + client.top;\n pos.left = this.getCMenuYPosition(this.dlg);\n }\n this.menuObj['open'](pos.top, pos.left, e.target);\n }\n applyBiggerTheme(this.parent.element, this.menuObj.element.parentElement);\n }\n };\n ExcelFilterBase.prototype.ensureTextFilter = function () {\n var selectedMenu;\n var predicates = this.existingPredicate[this.options.field];\n if (predicates && predicates.length === 2) {\n if (predicates[0].operator === 'greaterthanorequal' && predicates[1].operator === 'lessthanorequal') {\n selectedMenu = 'between';\n }\n else {\n selectedMenu = 'customfilter';\n }\n }\n else {\n if (predicates && predicates.length === 1) {\n this.optrData = this.customFilterOperators[this.options.type + 'Operator'];\n selectedMenu = predicates[0].operator;\n }\n }\n return selectedMenu;\n };\n ExcelFilterBase.prototype.preventClose = function (args) {\n if (this.options && this.options.isResponsiveFilter && args.event) {\n var target = args.event.target;\n var isFilterBack = target.classList.contains('e-resfilterback')\n || target.classList.contains('e-res-back-btn') || target.classList.contains('e-menu-item');\n args.cancel = !isFilterBack;\n }\n else {\n if (args.event instanceof MouseEvent && args.event.target.classList.contains('e-submenu')) {\n args.cancel = true;\n }\n }\n };\n ExcelFilterBase.prototype.getContextBounds = function () {\n this.menuObj.element.style.display = 'block';\n return this.menuObj.element.getBoundingClientRect();\n };\n ExcelFilterBase.prototype.getCMenuYPosition = function (target) {\n var contextWidth = this.getContextBounds().width;\n var targetPosition = target.getBoundingClientRect();\n var leftPos = targetPosition.right + contextWidth - this.parent.element.clientWidth;\n var targetBorder = target.offsetWidth - target.clientWidth;\n targetBorder = targetBorder ? targetBorder + 1 : 0;\n return (leftPos < 1) ? (targetPosition.right + 1 - targetBorder) : (targetPosition.left - contextWidth - 1 + targetBorder);\n };\n ExcelFilterBase.prototype.openDialog = function (options) {\n var _this = this;\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n if (options.cancel) {\n return;\n }\n this.dialogObj.dataBind();\n var filterLength = (this.existingPredicate[options.field] && this.existingPredicate[options.field].length) ||\n this.options.filteredColumns.filter(function (col) {\n return _this.options.field === col.field;\n }).length;\n this.createMenu(options.type, filterLength > 0, (filterLength === 1 || filterLength === 2), options);\n this.dlg.insertBefore(this.menu, this.dlg.firstChild);\n this.dlg.classList.add('e-excelfilter');\n if (this.parent.enableRtl) {\n this.dlg.classList.add('e-rtl');\n }\n this.dlg.classList.remove('e-checkboxfilter');\n this.cmenu = this.parent.createElement('ul', { className: 'e-excel-menu' });\n if (options.column.showColumnMenu) {\n this.parent.notify(events.filterDialogCreated, {});\n }\n this.wireExEvents();\n };\n ExcelFilterBase.prototype.closeDialog = function () {\n this.destroy();\n };\n ExcelFilterBase.prototype.selectHandler = function (e) {\n if (e.item) {\n this.parent.notify(events.filterCmenuSelect, {});\n this.menuItem = e.item;\n this.renderDialogue(e);\n }\n };\n /**\n * @hidden\n * @param {MenuEventArgs} e - event args\n * @returns {void}\n */\n ExcelFilterBase.prototype.renderDialogue = function (e) {\n var _this = this;\n var target = e ? e.element : undefined;\n var column = this.options.field;\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var mainDiv = this.parent.createElement('div', {\n className: 'e-xlfl-maindiv',\n id: isComplex ? complexFieldName + '-xlflmenu' : column + '-xlflmenu'\n });\n this.dlgDiv = this.parent.createElement('div', {\n className: 'e-xlflmenu',\n id: isComplex ? complexFieldName + '-xlfldlg' : column + '-xlfldlg'\n });\n if (this.options.isResponsiveFilter) {\n var responsiveCnt = document.querySelector('.e-resfilter > .e-dlg-content > .e-xl-customfilterdiv');\n responsiveCnt.appendChild(this.dlgDiv);\n }\n else {\n this.parent.element.appendChild(this.dlgDiv);\n }\n this.dlgObj = new Dialog({\n header: this.getLocalizedLabel('CustomFilter'),\n isModal: true,\n overlayClick: this.removeDialog.bind(this),\n showCloseIcon: true,\n locale: this.parent.locale,\n closeOnEscape: false,\n target: document.body,\n // target: this.parent.element,\n visible: false,\n enableRtl: this.parent.enableRtl,\n open: function () {\n var row = _this.dlgObj.element.querySelector('table.e-xlfl-table>tr');\n if (_this.options.column.filterTemplate) {\n var templateField_1 = isComplexField(_this.options.column.field) ?\n getComplexFieldID(_this.options.column.field) : _this.options.column.field;\n var isReactCompiler = _this.parent.isReact && typeof (_this.options.column.filterTemplate) !== 'string';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var isReactChild = _this.parent.parentDetails && _this.parent.parentDetails.parentInstObj &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n _this.parent.renderTemplates(function () {\n row.querySelector('#' + templateField_1 + '-xlfl-frstvalue').focus();\n });\n }\n else {\n row.querySelector('#' + templateField_1 + '-xlfl-frstvalue').focus();\n }\n }\n else {\n //(row.cells[1].querySelector('input:not([type=hidden])') as HTMLElement).focus();\n }\n },\n close: this.removeDialog.bind(this),\n created: this.createdDialog.bind(this, target, column),\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.getLocalizedLabel('OKButton'), isPrimary: true,\n cssClass: this.parent.cssClass ? 'e-xlfl-okbtn' + ' ' + this.parent.cssClass : 'e-xlfl-okbtn'\n }\n },\n {\n click: this.removeDialog.bind(this),\n buttonModel: { content: this.getLocalizedLabel('CancelButton'),\n cssClass: this.parent.cssClass ? 'e-xlfl-cancelbtn' + ' ' + this.parent.cssClass : 'e-xlfl-cancelbtn' }\n }],\n content: mainDiv,\n width: 430,\n animationSettings: { effect: 'None' },\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n var isStringTemplate = 'isStringTemplate';\n this.dlgObj[\"\" + isStringTemplate] = true;\n this.renderResponsiveDialog();\n this.dlgDiv.setAttribute('aria-label', this.getLocalizedLabel('CustomFilterDialogARIA'));\n this.childRefs.push(this.dlgObj);\n this.dlgObj.appendTo(this.dlgDiv);\n };\n ExcelFilterBase.prototype.renderResponsiveDialog = function () {\n if (this.options.isResponsiveFilter) {\n var rowResponsiveDlg = document.querySelector('.e-row-responsive-filter');\n if (rowResponsiveDlg) {\n rowResponsiveDlg.classList.remove('e-row-responsive-filter');\n }\n this.dlgObj.buttons = [{}];\n this.dlgObj.header = undefined;\n this.dlgObj.position = { X: '', Y: '' };\n this.dlgObj.target = document.querySelector('.e-resfilter > .e-dlg-content > .e-xl-customfilterdiv');\n this.dlgObj.width = '100%';\n this.dlgObj.isModal = false;\n this.dlgObj.showCloseIcon = false;\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelFilterBase.prototype.removeDialog = function () {\n this.parent.notify(events.customFilterClose, {});\n if ((this.parent.isReact || this.parent.isVue) && this.parent.destroyTemplate !== undefined) {\n clearReactVueTemplates(this.parent, ['filterTemplate']);\n }\n this.removeObjects(this.childRefs);\n remove(this.dlgDiv);\n this.parent.notify(events.filterDialogClose, {});\n };\n ExcelFilterBase.prototype.createdDialog = function (target, column) {\n this.renderCustomFilter(target, column);\n this.dlgObj.element.style.left = '0px';\n if (!this.options.isResponsiveFilter) {\n this.dlgObj.element.style.top = '0px';\n }\n else {\n var content = document.querySelector('.e-responsive-dialog > .e-dlg-header-content');\n var height = content.offsetHeight + 4;\n this.dlgObj.element.style.top = height + 'px';\n }\n if (!this.options.isResponsiveFilter && Browser.isDevice && window.innerWidth < 440) {\n this.dlgObj.element.style.width = '90%';\n }\n this.parent.notify(events.beforeCustomFilterOpen, { column: column, dialog: this.dialogObj });\n this.dlgObj.show();\n applyBiggerTheme(this.parent.element, this.dlgObj.element.parentElement);\n };\n ExcelFilterBase.prototype.renderCustomFilter = function (target, column) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-xlfl-maindiv');\n var dlgFields = this.parent.createElement('div', { innerHTML: this.getLocalizedLabel('ShowRowsWhere'), className: 'e-xlfl-dlgfields' });\n dlgConetntEle.appendChild(dlgFields);\n //column name\n var fieldSet = this.parent.createElement('div', { innerHTML: this.options.displayName, className: 'e-xlfl-fieldset' });\n dlgConetntEle.appendChild(fieldSet);\n this.renderFilterUI(column, dlgConetntEle);\n };\n /**\n * @hidden\n * @param {string} col - Defines column details\n * @returns {void}\n */\n ExcelFilterBase.prototype.filterBtnClick = function (col) {\n var isComplex = !isNullOrUndefined(col) && isComplexField(col);\n var complexFieldName = !isNullOrUndefined(col) && getComplexFieldID(col);\n var colValue = isComplex ? complexFieldName : col;\n var fValue = this.dlgDiv.querySelector('#' + colValue + '-xlfl-frstvalue').ej2_instances[0];\n var fOperator = this.dlgDiv.querySelector('#' + colValue + '-xlfl-frstoptr').ej2_instances[0];\n var sValue = this.dlgDiv.querySelector('#' + colValue + '-xlfl-secndvalue').ej2_instances[0];\n var sOperator = this.dlgDiv.querySelector('#' + colValue + '-xlfl-secndoptr').ej2_instances[0];\n var checkBoxValue;\n if (this.options.type === 'string') {\n var checkBox = this.dlgDiv.querySelector('#' + colValue + '-xlflmtcase').ej2_instances[0];\n checkBoxValue = checkBox.checked;\n }\n var andRadio = this.dlgDiv.querySelector('#' + colValue + 'e-xlfl-frstpredicate').ej2_instances[0];\n var predicate = (andRadio.checked ? 'and' : 'or');\n if (sValue.value === null) {\n predicate = 'or';\n }\n this.filterByColumn(this.options.field, fOperator.value, fValue.value, predicate, checkBoxValue, this.options.ignoreAccent, sOperator.value, sValue.value);\n this.removeDialog();\n };\n /**\n * @hidden\n * Filters grid row by column name with given options.\n *\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} firstOperator - Defines the first operator by how to filter records.\n * @param {string | number | Date | boolean} firstValue - Defines the first value which is used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If ignore case set to true, then filter records with exact match or else\n * filter records with case insensitive(uppercase and lowercase letters treated as same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then ignores the diacritic characters or accents when filtering.\n * @param {string} secondOperator - Defines the second operator by how to filter records.\n * @param {string | number | Date | boolean} secondValue - Defines the first value which is used to filter records.\n * @returns {void}\n */\n ExcelFilterBase.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n var col = this.parent.getColumnByField ? this.parent.getColumnByField(fieldName) : this.options.column;\n var field = this.isForeignColumn(col) ? col.foreignKeyValue : fieldName;\n var fColl = [];\n var mPredicate;\n var arg = {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: firstOperator, arg3: firstValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: secondOperator, arg8: secondValue, cancel: false\n };\n this.parent.notify(events.fltrPrevent, arg);\n if (arg.cancel) {\n return;\n }\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: firstOperator,\n value: arg.arg3,\n type: this.options.type\n });\n mPredicate = new Predicate(field, firstOperator.toLowerCase(), arg.arg3, !matchCase, ignoreAccent);\n if (!isNullOrUndefined(secondValue) && !isNullOrUndefined(secondOperator)) {\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: secondOperator,\n value: arg.arg8,\n type: this.options.type\n });\n mPredicate = mPredicate[\"\" + predicate](field, secondOperator.toLowerCase(), secondValue, !matchCase, ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: mPredicate, actualPredicate: fColl\n };\n if (this.isForeignColumn(col)) {\n this.foreignKeyFilter(args, fColl, mPredicate);\n }\n else {\n this.options.handler(args);\n }\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderOperatorUI = function (column, table, elementID, predicates, isFirst) {\n var fieldElement = this.parent.createElement('tr', { className: 'e-xlfl-fields' });\n table.appendChild(fieldElement);\n var xlfloptr = this.parent.createElement('td', { className: 'e-xlfl-optr' });\n fieldElement.appendChild(xlfloptr);\n var optrDiv = this.parent.createElement('div', { className: 'e-xlfl-optrdiv' });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var optrInput = this.parent\n .createElement('input', { id: isComplex ? complexFieldName + elementID : column + elementID });\n optrDiv.appendChild(optrInput);\n xlfloptr.appendChild(optrDiv);\n var optr = this.options.type + 'Operator';\n var dropDatasource = this.customFilterOperators[\"\" + optr];\n this.optrData = dropDatasource;\n var selectedValue = this.dropSelectedVal(this.options.column, predicates, isFirst);\n //Trailing three dots are sliced.\n var menuText = '';\n if (this.menuItem) {\n menuText = this.menuItem.text.slice(0, -3);\n if (menuText !== this.getLocalizedLabel('CustomFilter')) {\n selectedValue = isFirst ? menuText : undefined;\n }\n if (menuText === this.getLocalizedLabel('Between')) {\n selectedValue = this.getLocalizedLabel(isFirst ? 'GreaterThanOrEqual' : 'LessThanOrEqual');\n }\n }\n var col = this.options.column;\n var dropOptr = new DropDownList(extend({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n text: selectedValue,\n enableRtl: this.parent.enableRtl,\n cssClass: this.parent.cssClass ? this.parent.cssClass : null\n }, col.filter.params));\n this.childRefs.push(dropOptr);\n var evt = { 'open': this.dropDownOpen.bind(this), 'change': this.dropDownValueChange.bind(this) };\n registerEventHandlers(optrInput.id, [literals.open, literals.change], evt, this);\n dropOptr.addEventListener(literals['open'], this.eventHandlers[optrInput.id][literals.open]);\n dropOptr.addEventListener(literals.change, this.eventHandlers[optrInput.id][literals.change]);\n dropOptr.appendTo(optrInput);\n var operator = this.getSelectedValue(selectedValue);\n return { fieldElement: fieldElement, operator: operator };\n };\n ExcelFilterBase.prototype.removeHandlersFromComponent = function (component) {\n if (component.element.classList.contains('e-dropdownlist')) {\n removeEventHandlers(component, [literals.open, literals.change], this);\n }\n else if (component.element.classList.contains('e-autocomplete')) {\n removeEventHandlers(component, [events.actionComplete, literals.focus], this);\n }\n };\n ExcelFilterBase.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n ExcelFilterBase.prototype.dropDownValueChange = function (args) {\n if (args.element.id.includes('-xlfl-frstoptr')) {\n this.firstOperator = args.value.toString();\n }\n else {\n this.secondOperator = args.value.toString();\n }\n };\n /**\n * @hidden\n * @returns {FilterUI} returns filter UI\n */\n ExcelFilterBase.prototype.getFilterUIInfo = function () {\n return { firstOperator: this.firstOperator, secondOperator: this.secondOperator, field: this.options.field };\n };\n ExcelFilterBase.prototype.getSelectedValue = function (text) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('text', 'equal', text));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].value : '';\n };\n ExcelFilterBase.prototype.dropSelectedVal = function (col, predicates, isFirst) {\n var operator;\n if (predicates && predicates.length > 0) {\n operator = predicates.length === 2 ?\n (isFirst ? predicates[0].operator : predicates[1].operator) :\n (isFirst ? predicates[0].operator : undefined);\n }\n else if (isFirst && col.type === 'string' && !col.filter.operator) {\n operator = 'startswith';\n }\n else {\n operator = isFirst ? col.filter.operator || 'equal' : undefined;\n }\n return this.getSelectedText(operator);\n };\n ExcelFilterBase.prototype.getSelectedText = function (operator) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', operator));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n };\n ExcelFilterBase.prototype.renderFilterUI = function (column, dlgConetntEle) {\n var predicates = this.existingPredicate[\"\" + column];\n var table = this.parent.createElement('table', { className: 'e-xlfl-table', attrs: { role: 'grid' } });\n dlgConetntEle.appendChild(table);\n var colGroup = this.parent.createElement(literals.colGroup);\n colGroup.innerHTML = '';\n table.appendChild(colGroup);\n //Renders first dropdown\n var optr = this.renderOperatorUI(column, table, '-xlfl-frstoptr', predicates, true);\n this.firstOperator = optr.operator;\n //Renders first value\n this.renderFlValueUI(column, optr, '-xlfl-frstvalue', predicates, true);\n var predicate = this.parent.createElement('tr', { className: 'e-xlfl-predicate' });\n table.appendChild(predicate);\n //Renders first radion button\n this.renderRadioButton(column, predicate, predicates);\n //Renders second dropdown\n optr = this.renderOperatorUI(column, table, '-xlfl-secndoptr', predicates, false);\n this.secondOperator = optr.operator;\n //Renders second text box\n this.renderFlValueUI(column, optr, '-xlfl-secndvalue', predicates, false);\n };\n ExcelFilterBase.prototype.renderRadioButton = function (column, tr, predicates) {\n var td = this.parent.createElement('td', { className: 'e-xlfl-radio', attrs: { 'colSpan': '2' } });\n tr.appendChild(td);\n var radioDiv = this.parent\n .createElement('div', { className: 'e-xlfl-radiodiv', attrs: { 'style': 'display: inline-block' } });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var frstpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-frstpredicate' : column + 'e-xlfl-frstpredicate', attrs: { 'type': 'radio' } });\n var secndpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-secndpredicate' : column + 'e-xlfl-secndpredicate', attrs: { 'type': 'radio' } });\n //appends into div\n radioDiv.appendChild(frstpredicate);\n radioDiv.appendChild(secndpredicate);\n td.appendChild(radioDiv);\n if (this.options.type === 'string') {\n this.renderMatchCase(column, tr, td, '-xlflmtcase', predicates);\n }\n // Initialize AND RadioButton component.\n var andRadio = new RadioButton({\n label: this.getLocalizedLabel('AND'),\n name: 'default', checked: true,\n enableRtl: this.parent.enableRtl,\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n this.childRefs.push(andRadio);\n // Initialize OR RadioButton component.\n var orRadio = new RadioButton({\n label: this.getLocalizedLabel('OR'),\n name: 'default',\n enableRtl: this.parent.enableRtl,\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n this.childRefs.push(orRadio);\n var flValue = predicates && predicates.length === 2 ? predicates[1].predicate : 'and';\n if (flValue === 'and') {\n andRadio.checked = true;\n orRadio.checked = false;\n }\n else {\n orRadio.checked = true;\n andRadio.checked = false;\n }\n // Render initialized RadioButton.\n andRadio.appendTo(frstpredicate);\n orRadio.appendTo(secndpredicate);\n andRadio.element.nextElementSibling.classList.add('e-xlfl-radio-and');\n orRadio.element.nextElementSibling.classList.add('e-xlfl-radio-or');\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ExcelFilterBase.prototype.removeObjects = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var obj = elements_1[_i];\n if (obj && !obj.isDestroyed) {\n this.removeHandlersFromComponent(obj);\n obj.destroy();\n }\n }\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderFlValueUI = function (column, optr, elementId, predicates, isFirst) {\n var value = this.parent.createElement('td', { className: 'e-xlfl-value' });\n optr.fieldElement.appendChild(value);\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var valueDiv = this.parent.createElement('div', { className: 'e-xlfl-valuediv' });\n var isFilteredCol = this.options.filteredColumns.some(function (col) { return column === col.field; });\n var fltrPredicates = this.options.filteredColumns.filter(function (col) { return col.field === column; });\n if (this.options.column.filterTemplate) {\n var data = {};\n var columnObj = this.options.column;\n if (isFilteredCol && elementId) {\n data = this.getExcelFilterData(elementId, data, columnObj, predicates, fltrPredicates);\n }\n var isReactCompiler = this.parent.isReact && typeof (this.options.column.filterTemplate) !== 'string';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.parentDetails.parentInstObj.isReact;\n var tempID = this.parent.element.id + columnObj.uid + 'filterTemplate';\n if (isReactCompiler || isReactChild) {\n this.options.column.getFilterTemplate()(data, this.parent, 'filterTemplate', tempID, null, null, valueDiv);\n }\n else {\n var element = this.options.column.getFilterTemplate()(data, this.parent, 'filterTemplate', tempID);\n appendChildren(valueDiv, element);\n }\n if (isReactCompiler || isReactChild) {\n this.parent.renderTemplates(function () {\n valueDiv.querySelector('input').id = isComplex ? complexFieldName + elementId : column + elementId;\n value.appendChild(valueDiv);\n });\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.parent.isAngular ? valueDiv.children[0] : valueDiv.querySelector('input')).id = isComplex ?\n complexFieldName + elementId : column + elementId;\n value.appendChild(valueDiv);\n }\n }\n else {\n var valueInput = this.parent\n .createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId });\n valueDiv.appendChild(valueInput);\n value.appendChild(valueDiv);\n var flValue = void 0;\n var predicate = void 0;\n if (predicates && predicates.length > 0) {\n predicate = predicates.length === 2 ?\n (isFirst ? predicates[0] : predicates[1]) :\n (isFirst ? predicates[0] : undefined);\n flValue = (predicate && predicate.operator === optr.operator) ? predicate.value : undefined;\n if (isNullOrUndefined(flValue)) {\n flValue = undefined;\n }\n }\n var types = {\n 'string': this.renderAutoComplete.bind(this),\n 'number': this.renderNumericTextBox.bind(this),\n 'date': this.renderDate.bind(this),\n 'dateonly': this.renderDate.bind(this),\n 'datetime': this.renderDateTime.bind(this)\n };\n types[this.options.type](this.options, column, valueInput, flValue, this.parent.enableRtl);\n }\n };\n ExcelFilterBase.prototype.getExcelFilterData = function (elementId, data, columnObj, predicates, fltrPredicates) {\n var predIndex = elementId === '-xlfl-frstvalue' ? 0 : 1;\n if (elementId === '-xlfl-frstvalue' || fltrPredicates.length > 1) {\n data = { column: predicates instanceof Array ? predicates[parseInt(predIndex.toString(), 10)] : predicates };\n var indx = this.options.column.columnData && fltrPredicates.length > 1 ?\n (this.options.column.columnData.length === 1 ? 0 : 1) : predIndex;\n data[this.options.field] = columnObj.foreignKeyValue ?\n this.options.column.columnData[parseInt(indx.toString(), 10)][columnObj.foreignKeyValue] :\n fltrPredicates[parseInt(indx.toString(), 10)].value;\n if (this.options.foreignKeyValue) {\n data[this.options.foreignKeyValue] = this.options.column\n .columnData[parseInt(indx.toString(), 10)][columnObj.foreignKeyValue];\n }\n }\n return data;\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderMatchCase = function (column, tr, matchCase, elementId, predicates) {\n var matchCaseDiv = this.parent.createElement('div', { className: 'e-xlfl-matchcasediv', attrs: { 'style': 'display: inline-block' } });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var matchCaseInput = this.parent.createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId, attrs: { 'type': 'checkbox' } });\n matchCaseDiv.appendChild(matchCaseInput);\n matchCase.appendChild(matchCaseDiv);\n var flValue = predicates && predicates.length > 0 ?\n (predicates && predicates.length === 2 ? predicates[1].matchCase : predicates[0].matchCase) :\n false;\n // Initialize Match Case check box.\n var checkbox = new CheckBox({\n label: this.getLocalizedLabel('MatchCase'),\n enableRtl: this.parent.enableRtl, checked: flValue,\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n this.childRefs.push(checkbox);\n // Render initialized CheckBox.\n checkbox.appendTo(matchCaseInput);\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderDate = function (options, column, inputValue, fValue, isRtl) {\n var format = getCustomDateFormat(options.format, options.type) || options.format;\n var datePicker = new DatePicker(extend({\n format: format,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n locale: this.parent.locale\n }, options.column.filter.params));\n this.childRefs.push(datePicker);\n datePicker.appendTo(inputValue);\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderDateTime = function (options, column, inputValue, fValue, isRtl) {\n var format = getCustomDateFormat(options.format, options.type);\n var dateTimePicker = new DateTimePicker(extend({\n format: format,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n locale: this.parent.locale\n }, options.column.filter.params));\n this.childRefs.push(dateTimePicker);\n dateTimePicker.appendTo(inputValue);\n };\n ExcelFilterBase.prototype.completeAction = function (e) {\n e.result = distinctStringValues(e.result);\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderNumericTextBox = function (options, column, inputValue, fValue, isRtl) {\n var numericTextBox = new NumericTextBox(extend({\n format: options.format,\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n value: fValue,\n locale: this.parent.locale,\n cssClass: this.parent.cssClass ? this.parent.cssClass : null\n }, options.column.filter.params));\n this.childRefs.push(numericTextBox);\n numericTextBox.appendTo(inputValue);\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderAutoComplete = function (options, column, inputValue, fValue, isRtl) {\n var colObj = this.options.column;\n var isForeignColumn = this.isForeignColumn(colObj);\n var dataSource = isForeignColumn ? colObj.dataSource : options.dataSource;\n var fields = { value: isForeignColumn ? colObj.foreignKeyValue : column };\n var actObj = new AutoComplete(extend({\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n query: this.getQuery(),\n sortOrder: 'Ascending',\n locale: this.parent.locale,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n autofill: true,\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n text: fValue\n }, colObj.filter.params));\n if (dataSource && 'result' in dataSource) {\n var defObj = eventPromise({ requestType: 'stringfilterrequest' }, this.getQuery());\n this.parent.trigger(events.dataStateChange, defObj.state);\n var def = defObj.deffered;\n def.promise.then(function (e) {\n actObj.dataSource = new DataManager(e);\n });\n }\n this.childRefs.push(actObj);\n var evt = { 'actionComplete': this.acActionComplete(actObj, column), 'focus': this.acFocus(actObj, column, options, inputValue) };\n registerEventHandlers(inputValue.id, [events.actionComplete, literals.focus], evt, this);\n actObj.addEventListener(literals.focus, this.eventHandlers[inputValue.id][literals.focus]);\n actObj.addEventListener(events.actionComplete, this.eventHandlers[inputValue.id][events.actionComplete]);\n actObj.appendTo(inputValue);\n };\n ExcelFilterBase.prototype.acActionComplete = function (actObj, column) {\n return function (e) {\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObject) {\n return isComplex ? performComplexDataOperation(actObj.fields.value, mapObject)\n : mapObject[actObj.fields.value];\n }).indexOf(isComplex ? performComplexDataOperation(actObj.fields.value, obj) :\n obj[actObj.fields.value]) === index;\n });\n };\n };\n ExcelFilterBase.prototype.acFocus = function (actObj, column, options, inputValue) {\n var _this = this;\n return function () {\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var columnvalue = isComplex ? complexFieldName : column;\n actObj.filterType = _this.dlgDiv.querySelector('#' + columnvalue +\n (inputValue.id === (columnvalue + '-xlfl-frstvalue') ?\n '-xlfl-frstoptr' :\n '-xlfl-secndoptr')).ej2_instances[0].value;\n actObj.ignoreCase = options.type === 'string' ?\n !_this.dlgDiv.querySelector('#' + columnvalue + '-xlflmtcase').ej2_instances[0].checked :\n true;\n actObj.filterType = !isNullOrUndefined(actObj.filterType) ? actObj.filterType :\n 'equal';\n };\n };\n return ExcelFilterBase;\n}(CheckBoxFilterBase));\nexport { ExcelFilterBase };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ExcelFilterBase } from '../common/excel-filter-base';\nimport { CheckBoxFilter } from './checkbox-filter';\nimport * as events from '../base/constant';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilter = /** @class */ (function (_super) {\n __extends(ExcelFilter, _super);\n /**\n * Constructor for excelbox filtering module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {FilterSettings} filterSettings - specifies the Filtersettings\n * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n * @param {object} customFltrOperators - specifies the customFltrOperators\n * @hidden\n */\n function ExcelFilter(parent, filterSettings, serviceLocator, customFltrOperators) {\n var _this = _super.call(this, parent, filterSettings, serviceLocator) || this;\n _this.parent = parent;\n _this.isresetFocus = true;\n _this.excelFilterBase = new ExcelFilterBase(parent, customFltrOperators);\n return _this;\n }\n /**\n * To destroy the excel filter.\n *\n * @returns {void}\n * @hidden\n */\n ExcelFilter.prototype.destroy = function () {\n this.excelFilterBase.closeDialog();\n };\n ExcelFilter.prototype.openDialog = function (options) {\n this.excelFilterBase.openDialog(options);\n };\n ExcelFilter.prototype.closeDialog = function () {\n this.excelFilterBase.closeDialog();\n if (this.isresetFocus) {\n this.parent.notify(events.restoreFocus, {});\n }\n };\n ExcelFilter.prototype.clearCustomFilter = function (col) {\n this.excelFilterBase.clearFilter(col);\n };\n ExcelFilter.prototype.closeResponsiveDialog = function (isCustomFilter) {\n if (isCustomFilter) {\n this.excelFilterBase.removeDialog();\n }\n else {\n this.closeDialog();\n }\n };\n ExcelFilter.prototype.applyCustomFilter = function (args) {\n if (!args.isCustomFilter) {\n this.excelFilterBase.fltrBtnHandler();\n this.excelFilterBase.closeDialog();\n }\n else {\n this.excelFilterBase.filterBtnClick(args.col.field);\n }\n };\n ExcelFilter.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n this.excelFilterBase.filterByColumn(fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue);\n };\n /**\n * @returns {FilterUI} returns the filterUI\n * @hidden\n */\n ExcelFilter.prototype.getFilterUIInfo = function () {\n return this.excelFilterBase.getFilterUIInfo();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n ExcelFilter.prototype.getModuleName = function () {\n return 'excelFilter';\n };\n return ExcelFilter;\n}(CheckBoxFilter));\nexport { ExcelFilter };\n","import { EventHandler, isNullOrUndefined, extend, closest, getValue } from '@syncfusion/ej2-base';\nimport { getActualPropFromColl, isActionPrevent, getColumnByForeignKeyValue } from '../base/util';\nimport { remove, matches } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { CellType, ResponsiveDialogAction } from '../base/enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport { FilterCellRenderer } from '../renderer/filter-cell-renderer';\nimport { parentsUntil } from '../base/util';\nimport { FilterMenuRenderer } from '../renderer/filter-menu-renderer';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { ExcelFilter } from '../actions/excel-filter';\nimport * as literals from '../base/string-literals';\nimport { Input } from '@syncfusion/ej2-inputs';\n/**\n *\n * The `Filter` module is used to handle filtering action.\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Grid filtering module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {FilterSettings} filterSettings - specifies the filterSettings\n * @param {ServiceLocator} serviceLocator - specifes the serviceLocator\n * @hidden\n */\n function Filter(parent, filterSettings, serviceLocator) {\n this.predicate = 'and';\n this.contentRefresh = true;\n this.filterByMethod = true;\n this.refresh = true;\n this.values = {};\n this.operators = {};\n this.cellText = {};\n this.nextFlMenuOpen = '';\n this.type = { 'Menu': FilterMenuRenderer, 'CheckBox': CheckBoxFilter, 'Excel': ExcelFilter };\n /** @hidden */\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith', wildCard: 'wildcard',\n isNull: 'isnull', notNull: 'notnull', like: 'like'\n };\n this.fltrDlgDetails = { field: '', isOpen: false };\n /** @hidden */\n this.skipNumberInput = ['=', ' ', '!'];\n this.skipStringInput = ['>', '<', '='];\n this.actualPredicate = {};\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n this.setFullScreenDialog();\n }\n /**\n * To render filter bar when filtering enabled.\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Filter.prototype.render = function (e) {\n if (DataUtil.getObject('args.isFrozen', e) || (this.parent.getFrozenMode() === literals.leftRight &&\n DataUtil.getObject('args.renderFrozenRightContent', e))) {\n return;\n }\n var gObj = this.parent;\n this.l10n = this.serviceLocator.getService('localization');\n this.getLocalizedCustomOperators();\n if (this.parent.filterSettings.type === 'FilterBar') {\n if (gObj.columns.length) {\n var fltrElem = this.parent.element.querySelector('.e-filterbar');\n if (fltrElem) {\n remove(fltrElem);\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Filter, gObj);\n var cellrender = this.serviceLocator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Filter, new FilterCellRenderer(this.parent, this.serviceLocator));\n this.valueFormatter = this.serviceLocator.getService('valueFormatter');\n rowRenderer.element = this.parent.createElement('tr', { className: 'e-filterbar' });\n var row = this.generateRow();\n row.data = this.values;\n if (gObj.getFrozenMode() === 'Right') {\n var thead = gObj.getFrozenRightHeader().querySelector('thead');\n thead.appendChild(rowRenderer.element);\n }\n else {\n this.parent.getHeaderContent().querySelector('thead:not(.e-masked-thead)').appendChild(rowRenderer.element);\n }\n var rowdrag = this.parent.element.querySelector('.e-rowdragheader');\n this.element = rowRenderer.render(row, gObj.getColumns(), null, null, rowRenderer.element);\n var detail = this.element.querySelector('.e-detailheadercell');\n if (detail) {\n detail.className = 'e-filterbarcell e-mastercell';\n }\n if (rowdrag) {\n rowdrag.className = 'e-dragheadercell e-mastercell';\n }\n var gCells = [].slice.call(this.element.getElementsByClassName('e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n this.wireEvents();\n this.parent.notify(events.freezeRender, { case: 'filter' });\n }\n }\n };\n /**\n * To show the responsive custom filter dialog\n *\n * @param {boolean} enable - specifes dialog open\n * @returns {void}\n * @hidden\n */\n Filter.prototype.showCustomFilter = function (enable) {\n this.responsiveDialogRenderer.isCustomDialog = enable;\n this.responsiveDialogRenderer.showResponsiveDialog(this.column);\n };\n /**\n * To create the filter module.\n *\n * @param {Column} col - specifies the filtering column name\n * @returns {void}\n * @hidden\n */\n Filter.prototype.setFilterModel = function (col) {\n var type = col.filter.type || this.parent.filterSettings.type;\n this.filterModule = new this.type[\"\" + type](this.parent, this.parent.filterSettings, this.serviceLocator, this.customOperators, this);\n };\n /**\n * To destroy the filter bar.\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.destroy();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.parent.refreshing && (this.parent.isDestroyed || !this.parent.allowFiltering)) {\n this.filterSettings.columns = [];\n }\n this.updateFilterMsg();\n this.removeEventListener();\n this.unWireEvents();\n if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator) {\n var dropdownlist = [].slice.call(this.element.getElementsByClassName('e-filterbaroperator'));\n for (var i = 0; i < dropdownlist.length; i++) {\n if (dropdownlist[parseInt(i.toString(), 10)].ej2_instances[0]) {\n dropdownlist[parseInt(i.toString(), 10)].ej2_instances[0].destroy();\n }\n }\n }\n if (this.element) {\n if (this.element.parentElement) {\n remove(this.element);\n }\n var filterBarElement = this.parent.getHeaderContent().querySelector('.e-filterbar');\n if (this.parent.isFrozenGrid() && filterBarElement) {\n remove(filterBarElement);\n }\n }\n };\n Filter.prototype.setFullScreenDialog = function () {\n if (this.serviceLocator) {\n this.serviceLocator.registerAdaptiveService(this, this.parent.enableAdaptiveUI, ResponsiveDialogAction.isFilter);\n }\n };\n Filter.prototype.generateRow = function () {\n var options = {};\n var row = new Row(options);\n row.cells = this.generateCells();\n return row;\n };\n Filter.prototype.generateCells = function () {\n //TODO: generate dummy column for group, detail, stacked row here for filtering;\n var cells = [];\n if (this.parent.allowGrouping) {\n for (var c = 0, len = this.parent.groupSettings.columns.length; c < len; c++) {\n cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n cells.push(this.generateCell({}, CellType.RowDragHIcon));\n }\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var dummy = _a[_i];\n cells.push(this.generateCell(dummy));\n }\n if (this.parent.getFrozenMode() === 'Right') {\n cells.push(this.generateCell({}, CellType.RowDragHIcon));\n }\n return cells;\n };\n Filter.prototype.generateCell = function (column, cellType) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': false,\n 'rowId': '',\n 'column': column,\n 'cellType': cellType ? cellType : CellType.Filter,\n 'attributes': { title: this.l10n.getConstant('FilterbarTitle') }\n };\n return new Cell(opt);\n };\n /**\n * To update filterSettings when applying filter.\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.updateModel = function () {\n var col = this.column.isForeignColumn() ? this.parent.getColumnByUid(this.column.uid) :\n this.parent.getColumnByField(this.fieldName);\n this.filterObjIndex = this.getFilteredColsIndexByField(col);\n this.prevFilterObject = this.filterSettings.columns[this.filterObjIndex];\n var arrayVal = Array.isArray(this.value) ? this.value : [this.value];\n var moduleName = this.parent.dataSource.adaptor && this.parent.dataSource.adaptor.getModuleName ? this.parent.dataSource.adaptor.getModuleName() : undefined;\n for (var i = 0, len = arrayVal.length; i < len; i++) {\n var field = col.isForeignColumn() ? col.foreignKeyValue : this.fieldName;\n var isMenuNotEqual = this.operator === 'notequal';\n this.currentFilterObject = {\n field: field, uid: col.uid, isForeignKey: col.isForeignColumn(), operator: this.operator,\n value: arrayVal[parseInt(i.toString(), 10)], predicate: this.predicate,\n matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n };\n var index = this.getFilteredColsIndexByField(col);\n if (index > -1 && !Array.isArray(this.value)) {\n this.filterSettings.columns[parseInt(index.toString(), 10)] = this.currentFilterObject;\n }\n else {\n this.filterSettings.columns.push(this.currentFilterObject);\n }\n if (!this.column.isForeignColumn() && isNullOrUndefined(this.value) && (this.operator === 'equal' ||\n this.operator === 'notequal') && (moduleName !== 'ODataAdaptor' && moduleName !== 'ODataV4Adaptor')) {\n for (var i_1 = 0; i_1 < this.filterSettings.columns.length; i_1++) {\n if (this.filterSettings.columns[\"\" + i_1].field === field &&\n (this.filterSettings.columns[\"\" + i_1].operator === 'equal' || this.filterSettings.columns[\"\" + i_1].operator === 'notequal')\n && isNullOrUndefined(this.filterSettings.columns[\"\" + i_1].value)) {\n this.filterSettings.columns.splice(i_1, 1);\n i_1 = i_1 - 1;\n }\n }\n if (col.type === 'string') {\n this.filterSettings.columns.push({\n field: field, ignoreAccent: this.ignoreAccent, matchCase: this.matchCase,\n operator: this.operator, predicate: isMenuNotEqual ? 'and' : 'or', value: ''\n });\n }\n this.filterSettings.columns.push({\n field: field, ignoreAccent: this.ignoreAccent, matchCase: this.matchCase,\n operator: this.operator, predicate: isMenuNotEqual ? 'and' : 'or', value: undefined\n });\n this.filterSettings.columns.push({\n field: field, ignoreAccent: this.ignoreAccent, matchCase: this.matchCase,\n operator: this.operator, predicate: isMenuNotEqual ? 'and' : 'or', value: null\n });\n }\n }\n // eslint-disable-next-line no-self-assign\n this.filterSettings.columns = this.filterSettings.columns;\n this.parent.dataBind();\n };\n Filter.prototype.getFilteredColsIndexByField = function (col) {\n var cols = this.filterSettings.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[parseInt(i.toString(), 10)].uid === col.uid || (col.isForeignColumn()\n && this.parent.getColumnByUid(col.uid).field === col.foreignKeyValue)) {\n return i;\n }\n }\n return -1;\n };\n /**\n * To trigger action complete event.\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Filter.prototype.onActionComplete = function (e) {\n var args = !this.isRemove ? {\n currentFilterObject: this.currentFilterObject,\n /* tslint:disable:no-string-literal */\n currentFilteringColumn: !isNullOrUndefined(this.column) ? this.column.field : undefined,\n /* tslint:enable:no-string-literal */\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionComplete\n } : {\n requestType: 'filtering', type: events.actionComplete\n };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.isRemove = false;\n };\n Filter.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), 'keyup', this.keyUpHandlerImmediate, this);\n };\n Filter.prototype.unWireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), 'keyup', this.keyUpHandlerImmediate);\n };\n Filter.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.parent.getHeaderTable().classList.add('e-sortfilter');\n this.render();\n }\n };\n Filter.prototype.refreshFilterValue = function () {\n this.parent.removeEventListener(events.beforeDataBound, this.refreshFilterValueFn);\n if (this.filterSettings.type === 'FilterBar' && this.filterSettings.columns.length &&\n !this.parent.getCurrentViewRecords().length) {\n this.initialEnd();\n }\n };\n Filter.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.filterSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n this.initialLoad = true;\n for (var _i = 0, _a = gObj.filterSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.filterByColumn(col.field, col.operator, col.value, col.predicate, col.matchCase, col.ignoreAccent, col.actualFilterValue, col.actualOperator);\n }\n this.initialLoad = false;\n this.updateFilterMsg();\n this.contentRefresh = true;\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Filter.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.setFullScreenDialog, this.setFullScreenDialog, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.filterComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.keyPressed, this.keyUpHandler, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.headerRefreshed, this.render, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.filterMenuClose, this.filterMenuClose, this);\n this.docClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.docClickHandler, this);\n EventHandler.add(this.parent.element, 'mousedown', this.refreshClearIcon, this);\n this.parent.on(events.filterOpen, this.columnMenuFilter, this);\n this.parent.on(events.click, this.filterIconClickHandler, this);\n this.parent.on('persist-data-changed', this.initialEnd, this);\n this.parent.on(events.closeFilterDialog, this.clickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.refreshFilterValueFn = this.refreshFilterValue.bind(this);\n this.parent.addEventListener(events.beforeDataBound, this.refreshFilterValueFn);\n };\n /**\n * @returns {void}\n * @hidden\n */\n Filter.prototype.removeEventListener = function () {\n EventHandler.remove(document, 'click', this.docClickHandler);\n EventHandler.remove(this.parent.element, 'mousedown', this.refreshClearIcon);\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.setFullScreenDialog, this.setFullScreenDialog);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.filterComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.keyPressed, this.keyUpHandler);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.off(events.headerRefreshed, this.render);\n this.parent.off(events.filterOpen, this.columnMenuFilter);\n this.parent.off(events.filterMenuClose, this.filterMenuClose);\n this.parent.off(events.click, this.filterIconClickHandler);\n this.parent.off(events.closeFilterDialog, this.clickHandler);\n this.parent.off(events.destroy, this.destroy);\n };\n Filter.prototype.refreshClearIcon = function (e) {\n if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar' &&\n e.target.closest('th') && e.target.closest('th').classList.contains('e-filterbarcell') &&\n e.target.classList.contains('e-clear-icon')) {\n var targetText = e.target.previousElementSibling;\n Input.setValue(null, targetText, 'Never', true);\n if (this.filterSettings.mode === 'Immediate') {\n this.removeFilteredColsByField(targetText.id.slice(0, -14)); //Length of _filterBarcell = 14\n }\n }\n };\n Filter.prototype.filterMenuClose = function () {\n this.fltrDlgDetails.isOpen = false;\n };\n /**\n * Filters the Grid row by fieldName, filterOperator, and filterValue.\n *\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value which is used to filter records.\n * @param {string} predicate - Defines the relationship of one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, then the filter records\n * the exact match or
      filters records that are case insensitive (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then filter ignores the diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for the filter column.\n * @param {string} actualOperator - Defines the actual filter operator for the filter column.\n * @returns {void}\n */\n Filter.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n var _this = this;\n var gObj = this.parent;\n var filterCell;\n this.column = gObj.grabColumnByFieldFromAllCols(fieldName);\n if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator\n && isNullOrUndefined(this.column.filterBarTemplate) && isNullOrUndefined(this.column.filterTemplate)) {\n filterOperator = this.getOperatorName(fieldName);\n }\n if (filterOperator === 'like' && filterValue.indexOf('%') === -1) {\n filterValue = '%' + filterValue + '%';\n }\n if (!this.column) {\n return;\n }\n if (this.filterSettings.type === 'FilterBar') {\n filterCell = gObj.getHeaderContent().querySelector('[id=\\'' + this.column.field + '_filterBarcell\\']');\n }\n if (!isNullOrUndefined(this.column.allowFiltering) && !this.column.allowFiltering) {\n this.parent.log('action_disabled_column', { moduleName: this.getModuleName(), columnName: this.column.headerText });\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: filterOperator, arg3: filterValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: actualFilterValue, arg8: actualOperator\n });\n return;\n }\n this.predicate = predicate ? predicate : Array.isArray(filterValue) ? 'or' : 'and';\n this.value = filterValue;\n this.matchCase = matchCase || false;\n this.ignoreAccent = this.ignoreAccent = !isNullOrUndefined(ignoreAccent) ? ignoreAccent : this.parent.filterSettings.ignoreAccent;\n this.fieldName = fieldName;\n this.operator = filterOperator;\n filterValue = !isNullOrUndefined(filterValue) ? filterValue.toString() : filterValue;\n if (filterValue === '') {\n filterValue = null;\n }\n if (this.column.type === 'number' || this.column.type === 'date') {\n this.matchCase = true;\n }\n gObj.getColumnHeaderByField(this.column.isForeignColumn() ? this.column.field : fieldName).setAttribute('aria-filtered', 'true');\n if (filterCell && this.filterSettings.type === 'FilterBar') {\n if ((filterValue && filterValue.length < 1) || (!this.filterByMethod &&\n this.checkForSkipInput(this.column, filterValue))) {\n this.filterStatusMsg = (filterValue && filterValue.length < 1) ? '' : this.l10n.getConstant('InvalidFilterMessage');\n this.updateFilterMsg();\n return;\n }\n if (filterCell.value !== filterValue) {\n filterCell.value = filterValue;\n }\n }\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n if (this.initialLoad && this.filterSettings.type === 'FilterBar') {\n filterCell.value = this.values[this.column.field];\n }\n }\n else {\n this.values[this.column.field] = filterValue; //this line should be above updateModel\n }\n var predObj = {\n field: this.fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: this.operator,\n value: this.value,\n type: this.column.type\n };\n var filterColumn = this.parent.filterSettings.columns.filter(function (fColumn) {\n return (fColumn.field === _this.fieldName);\n });\n if (filterColumn.length > 1 && !isNullOrUndefined(this.actualPredicate[this.fieldName])) {\n this.actualPredicate[this.fieldName].push(predObj);\n }\n else {\n this.actualPredicate[this.fieldName] = [predObj];\n }\n if (this.checkAlreadyColFiltered(this.column.field)) {\n return;\n }\n this.updateModel();\n };\n Filter.prototype.applyColumnFormat = function (filterValue) {\n var _this = this;\n var getFlvalue = (this.column.type === 'date' || this.column.type === 'datetime' || this.column.type === 'dateonly') ?\n new Date(filterValue) : parseFloat(filterValue);\n if ((this.column.type === 'date' || this.column.type === 'datetime' || this.column.type === 'dateonly') && filterValue &&\n Array.isArray(this.value) && filterValue.split(',').length > 1) {\n this.values[this.column.field] = ((filterValue).split(',')).map(function (val) {\n if (val === '') {\n val = null;\n }\n return _this.setFormatForFlColumn(new Date(val), _this.column);\n });\n }\n else {\n this.values[this.column.field] = this.setFormatForFlColumn(getFlvalue, this.column);\n }\n };\n // To skip the second time request to server while applying initial filtering - EJ2-44361\n Filter.prototype.skipUid = function (col) {\n var flag = true;\n var colLen = Object.keys((col));\n for (var i = 0; i < colLen.length; i++) {\n var key = Object.keys(col[colLen[parseInt(i.toString(), 10)]]);\n if (key.length === 1 && key[0] === 'uid') {\n flag = false;\n }\n }\n return flag;\n };\n Filter.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'columns':\n // eslint-disable-next-line no-case-declarations\n var col = 'columns';\n // eslint-disable-next-line no-case-declarations\n var args = {\n currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column ?\n this.column.field : undefined, action: 'filter', columns: this.filterSettings.columns,\n requestType: 'filtering', type: events.actionBegin, cancel: false\n };\n if (this.contentRefresh && this.skipUid(e.properties[\"\" + col])) {\n this.parent.notify(events.modelChanged, args);\n if (args.cancel) {\n if (isNullOrUndefined(this.prevFilterObject)) {\n this.filterSettings.columns.splice(this.filterSettings.columns.length - 1, 1);\n }\n else {\n this.filterSettings.columns[this.filterObjIndex] = this.prevFilterObject;\n }\n return;\n }\n this.updateFilterIcon();\n this.refreshFilterSettings();\n this.updateFilterMsg();\n this.updateFilter();\n }\n break;\n case 'showFilterBarStatus':\n if (e.properties[\"\" + prop]) {\n this.updateFilterMsg();\n }\n else if (this.parent.allowPaging) {\n this.parent.updateExternalMessage('');\n }\n break;\n case 'showFilterBarOperator':\n case 'type':\n this.parent.refreshHeader();\n this.refreshFilterSettings();\n break;\n }\n }\n };\n Filter.prototype.refreshFilterSettings = function () {\n if (this.filterSettings.type === 'FilterBar') {\n for (var i = 0; i < this.filterSettings.columns.length; i++) {\n this.column = this.parent.grabColumnByUidFromAllCols(this.filterSettings.columns[parseInt(i.toString(), 10)].uid);\n var filterValue = this.filterSettings.columns[parseInt(i.toString(), 10)].value;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n var key = this.filterSettings.columns[parseInt(i.toString(), 10)].field;\n this.values[\"\" + key] = this.filterSettings.columns[parseInt(i.toString(), 10)].value;\n }\n var filterElement = this.getFilterBarElement(this.column.field);\n if (filterElement) {\n if (this.cellText[this.filterSettings.columns[parseInt(i.toString(), 10)].field] !== ''\n && !isNullOrUndefined(this.cellText[this.filterSettings.columns[parseInt(i.toString(), 10)].field])) {\n filterElement.value = this.cellText[this.column.field];\n }\n else {\n filterElement.value = this.filterSettings.columns[parseInt(i.toString(), 10)].value;\n }\n }\n }\n if (this.filterSettings.columns.length === 0) {\n var col = this.parent.getColumns();\n for (var i = 0; i < col.length; i++) {\n var filterElement = this.getFilterBarElement(col[parseInt(i.toString(), 10)].field);\n if (filterElement && filterElement.value !== '') {\n filterElement.value = '';\n delete this.values[col[parseInt(i.toString(), 10)].field];\n }\n }\n }\n }\n };\n Filter.prototype.updateFilterIcon = function () {\n if (this.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n var fltrIconElement = [].slice.call(this.parent.element.getElementsByClassName('e-filtered'));\n for (var i = 0, len = fltrIconElement.length; i < len; i++) {\n fltrIconElement[parseInt(i.toString(), 10)].removeAttribute('aria-filtered');\n fltrIconElement[parseInt(i.toString(), 10)].classList.remove('e-filtered');\n }\n }\n };\n Filter.prototype.getFilterBarElement = function (col) {\n var selector = '[id=\\'' + col + '_filterBarcell\\']';\n var filterElement;\n if (selector && !isNullOrUndefined(this.element)) {\n filterElement = this.element.querySelector(selector);\n }\n return filterElement;\n };\n /**\n * @private\n * @returns {void}\n */\n Filter.prototype.refreshFilter = function () {\n this.refreshFilterSettings();\n this.updateFilterMsg();\n };\n /**\n * Clears all the filtered rows of the Grid.\n *\n * @param {string[]} fields - returns the fields\n * @returns {void}\n */\n Filter.prototype.clearFiltering = function (fields) {\n var _this = this;\n var cols = getActualPropFromColl(this.filterSettings.columns);\n if (!isNullOrUndefined(fields)) {\n this.refresh = false;\n fields.forEach(function (field) { _this.removeFilteredColsByField(field, false); });\n this.parent.setProperties({ filterSettings: { columns: this.filterSettings.columns } }, true);\n this.parent.renderModule.refresh();\n this.refresh = true;\n return;\n }\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFiltering });\n return;\n }\n for (var i = 0; i < cols.length; i++) {\n cols[parseInt(i.toString(), 10)].uid = cols[parseInt(i.toString(), 10)].uid\n || this.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field).uid;\n }\n var colUid = cols.map(function (f) { return f.uid; });\n var filteredcols = colUid.filter(function (item, pos) { return colUid.indexOf(item) === pos; });\n this.refresh = false;\n for (var i = 0, len = filteredcols.length; i < len; i++) {\n this.removeFilteredColsByField(this.parent.getColumnByUid(filteredcols[parseInt(i.toString(), 10)]).field, false);\n }\n this.refresh = true;\n if (filteredcols.length) {\n this.parent.renderModule.refresh();\n }\n if (this.parent.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n var fltrElement = [].slice.call(this.parent.element.getElementsByClassName('e-filtered'));\n for (var i = 0, len = fltrElement.length; i < len; i++) {\n fltrElement[0].removeAttribute('aria-filtered');\n fltrElement[0].classList.remove('e-filtered');\n }\n }\n this.isRemove = true;\n this.filterStatusMsg = '';\n this.updateFilterMsg();\n };\n Filter.prototype.checkAlreadyColFiltered = function (field) {\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n if (col.field === field && col.value === this.value &&\n col.operator === this.operator && col.predicate === this.predicate) {\n return true;\n }\n }\n return false;\n };\n Filter.prototype.columnMenuFilter = function (args) {\n this.column = args.col;\n var ele = closest(args.target, '#' + args.id);\n if (args.isClose && !ele) {\n this.filterModule.closeDialog();\n }\n else if (ele) {\n this.filterDialogOpen(this.column, args.target);\n }\n };\n Filter.prototype.filterDialogOpen = function (col, target, left, top) {\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.setFilterModel(col);\n this.filterModule.openDialog(this.createOptions(col, target, left, top));\n };\n /**\n * Create filter dialog options\n *\n * @param {Column} col - Filtering column detail.\n * @param {Element} target - Filter dialog target.\n * @param {number} left - Filter dialog left position.\n * @param {number} top - Filter dialog top position.\n * @returns {Object} returns the created dialog options\n * @hidden\n */\n Filter.prototype.createOptions = function (col, target, left, top) {\n var gObj = this.parent;\n var dataSource = col.filter.dataSource || gObj.dataSource && 'result' in gObj.dataSource ? gObj.dataSource :\n gObj.getDataModule().dataManager;\n var type = col.filter.type || this.parent.filterSettings.type;\n var options = {\n type: col.type, field: col.field, displayName: col.headerText,\n dataSource: dataSource, format: col.format, height: 800, columns: gObj.getColumns(),\n filteredColumns: gObj.filterSettings.columns, target: target, dataManager: gObj.getDataModule().dataManager,\n formatFn: col.getFormatter(), ignoreAccent: gObj.filterSettings.ignoreAccent,\n parserFn: col.getParser(), query: gObj.query, template: col.getFilterItemTemplate(),\n hideSearchbox: isNullOrUndefined(col.filter.hideSearchbox) ? false : col.filter.hideSearchbox,\n handler: this.filterHandler.bind(this), localizedStrings: gObj.getLocaleConstants(),\n position: { X: left, Y: top }, column: col, foreignKeyValue: col.foreignKeyValue,\n actualPredicate: this.actualPredicate, localeObj: gObj.localeObj,\n isRemote: gObj.getDataModule().isRemote(), allowCaseSensitive: this.filterSettings.enableCaseSensitivity,\n isResponsiveFilter: this.parent.enableAdaptiveUI,\n operator: this.actualPredicate[col.field] && type === 'Menu' ? this.actualPredicate[col.field][0].operator : 'equal'\n };\n return options;\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @returns {void}\n * @hidden\n */\n Filter.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n var fCell;\n var cols = this.filterSettings.columns;\n if (isActionPrevent(this.parent)) {\n var args = { instance: this, handler: this.removeFilteredColsByField, arg1: field, arg2: isClearFilterBar };\n this.parent.notify(events.preventBatch, args);\n return;\n }\n var colUid = cols.map(function (f) { return f.uid; });\n var filteredColsUid = colUid.filter(function (item, pos) { return colUid.indexOf(item) === pos; });\n var _loop_1 = function (i, len) {\n cols[parseInt(i.toString(), 10)].uid = cols[parseInt(i.toString(), 10)].uid\n || this_1.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field).uid;\n var len_1 = cols.length;\n var column = this_1.parent.grabColumnByUidFromAllCols(filteredColsUid[parseInt(i.toString(), 10)]);\n if (column.field === field || (column.field === column.foreignKeyValue && column.isForeignColumn())) {\n var currentPred = this_1.filterSettings.columns.filter(function (e) {\n return e.uid === column.uid;\n })[0];\n if (this_1.filterSettings.type === 'FilterBar' && !isClearFilterBar) {\n var selector = '[id=\\'' + column.field + '_filterBarcell\\']';\n fCell = this_1.parent.getHeaderContent().querySelector(selector);\n if (fCell) {\n fCell.value = '';\n delete this_1.values[\"\" + field];\n }\n }\n while (len_1--) {\n if (cols[parseInt(len_1.toString(), 10)].uid === column.uid) {\n cols.splice(len_1, 1);\n }\n }\n var fltrElement = this_1.parent.getColumnHeaderByField(column.field);\n fltrElement.removeAttribute('aria-filtered');\n if (this_1.filterSettings.type !== 'FilterBar' || this_1.parent.showColumnMenu) {\n var iconClass = this_1.parent.showColumnMenu && column.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n fltrElement.querySelector(iconClass).classList.remove('e-filtered');\n }\n this_1.isRemove = true;\n if (this_1.actualPredicate[\"\" + field]) {\n delete this_1.actualPredicate[\"\" + field];\n }\n if (this_1.values[\"\" + field]) {\n delete this_1.values[\"\" + field];\n }\n if (this_1.refresh) {\n this_1.parent.notify(events.modelChanged, {\n requestType: 'filtering', type: events.actionBegin, currentFilterObject: currentPred,\n currentFilterColumn: column, action: 'clearFilter'\n });\n }\n return \"break\";\n }\n };\n var this_1 = this;\n for (var i = 0, len = filteredColsUid.length; i < len; i++) {\n var state_1 = _loop_1(i, len);\n if (state_1 === \"break\")\n break;\n }\n this.updateFilterMsg();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n Filter.prototype.keyUpHandlerImmediate = function (e) {\n if (e.keyCode !== 13) {\n this.keyUpHandler(e);\n }\n };\n Filter.prototype.keyUpHandler = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (target && matches(target, '.e-filterbar input')) {\n var closeHeaderEle = closest(target, 'th.e-filterbarcell');\n this.column = gObj.getColumnByUid(closeHeaderEle.getAttribute('e-mappinguid'));\n if (!this.column) {\n return;\n }\n if (e.action === 'altDownArrow' && this.parent.filterSettings.showFilterBarOperator) {\n var dropDownListInput = closest(target, 'span').querySelector('.e-filterbaroperator');\n dropDownListInput.ej2_instances[0].showPopup();\n dropDownListInput.focus();\n }\n if ((this.filterSettings.mode === 'Immediate' || (e.keyCode === 13 &&\n !e.target.classList.contains('e-filterbaroperator')))\n && e.keyCode !== 9 && !this.column.filterTemplate) {\n this.value = target.value.trim();\n this.processFilter(e);\n }\n }\n if (e.action === 'altDownArrow' && this.filterSettings.type !== 'FilterBar') {\n var element = gObj.focusModule.currentInfo.element;\n if (element && element.classList.contains('e-headercell')) {\n var column = gObj.getColumnByUid(element.firstElementChild.getAttribute('e-mappinguid'));\n this.openMenuByField(column.field);\n this.parent.focusModule.clearIndicator();\n }\n }\n if (e.action === 'escape' && this.filterSettings.type === 'Menu' && this.filterModule) {\n this.filterModule.closeDialog();\n gObj.notify(events.restoreFocus, {});\n }\n };\n Filter.prototype.updateCrossIcon = function (element) {\n if (element.value.length) {\n element.nextElementSibling.classList.remove('e-hide');\n }\n };\n Filter.prototype.updateFilterMsg = function () {\n if (this.filterSettings.type === 'FilterBar') {\n var gObj = this.parent;\n var getFormatFlValue = void 0;\n var columns = this.filterSettings.columns;\n var column = void 0;\n if (!this.filterSettings.showFilterBarStatus) {\n return;\n }\n if (columns.length > 0 && this.filterStatusMsg !== this.l10n.getConstant('InvalidFilterMessage')) {\n this.filterStatusMsg = '';\n for (var index = 0; index < columns.length; index++) {\n column = gObj.grabColumnByUidFromAllCols(columns[parseInt(index.toString(), 10)].uid)\n || gObj.grabColumnByFieldFromAllCols(columns[parseInt(index.toString(), 10)].field);\n if (index) {\n this.filterStatusMsg += ' && ';\n }\n if (!isNullOrUndefined(column.format)) {\n var flValue = (column.type === 'date' || column.type === 'datetime' || column.type === 'dateonly') ?\n this.valueFormatter.fromView(this.values[column.field], column.getParser(), (column.type === 'dateonly' ? 'date' : column.type)) :\n this.values[column.field];\n if (!(column.type === 'date' || column.type === 'datetime' || column.type === 'dateonly')) {\n var formater = this.serviceLocator.getService('valueFormatter');\n getFormatFlValue = formater.toView(flValue, column.getParser()).toString();\n }\n else {\n getFormatFlValue = this.setFormatForFlColumn(flValue, column);\n }\n this.filterStatusMsg += column.headerText + ': ' + getFormatFlValue;\n }\n else {\n this.filterStatusMsg += column.headerText + ': ' + this.values[column.field];\n }\n }\n }\n if (gObj.allowPaging) {\n gObj.updateExternalMessage(this.filterStatusMsg);\n }\n //TODO: virtual paging\n this.filterStatusMsg = '';\n }\n };\n Filter.prototype.setFormatForFlColumn = function (value, column) {\n var formater = this.serviceLocator.getService('valueFormatter');\n return formater.toView(value, column.getFormatter()).toString();\n };\n Filter.prototype.checkForSkipInput = function (column, value) {\n var isSkip;\n if (column.type === 'number') {\n if (DataUtil.operatorSymbols[\"\" + value] || this.skipNumberInput.indexOf(value) > -1) {\n isSkip = true;\n }\n }\n else if (column.type === 'string') {\n for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {\n var val = value_1[_i];\n if (this.skipStringInput.indexOf(val) > -1) {\n isSkip = true;\n }\n }\n }\n return isSkip;\n };\n Filter.prototype.processFilter = function (e) {\n this.stopTimer();\n this.startTimer(e);\n };\n Filter.prototype.startTimer = function (e) {\n var _this = this;\n this.timer = window.setInterval(function () { _this.onTimerTick(); }, e.keyCode === 13 ? 0 : this.filterSettings.immediateModeDelay);\n };\n Filter.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Filter.prototype.onTimerTick = function () {\n var selector = '[id=\\'' + this.column.field + '_filterBarcell\\']';\n var filterElement = this.element.querySelector(selector);\n if (!filterElement && this.parent.isFrozenGrid()) {\n filterElement = this.parent.getHeaderContent().querySelector(selector);\n }\n var filterValue;\n this.cellText[this.column.field] = filterElement.value;\n this.stopTimer();\n if (!isNullOrUndefined(this.column.filterBarTemplate)) {\n var templateRead = this.column.filterBarTemplate.read;\n if (typeof templateRead === 'string') {\n templateRead = getValue(templateRead, window);\n }\n if (!isNullOrUndefined(templateRead)) {\n this.value = templateRead.call(this, filterElement);\n }\n }\n else {\n filterValue = JSON.parse(JSON.stringify(filterElement.value));\n }\n if (isNullOrUndefined(this.value) || this.value === '') {\n this.removeFilteredColsByField(this.column.field);\n return;\n }\n this.validateFilterValue(this.value);\n this.filterByMethod = false;\n this.filterByColumn(this.column.field, this.operator, this.value, this.predicate, this.filterSettings.enableCaseSensitivity, this.ignoreAccent);\n this.filterByMethod = true;\n filterElement.value = filterValue;\n this.updateFilterMsg();\n };\n Filter.prototype.validateFilterValue = function (value) {\n var skipInput;\n var index;\n this.matchCase = this.filterSettings.enableCaseSensitivity;\n switch (this.column.type) {\n case 'number':\n if (this.column.filter.operator) {\n this.operator = this.column.filter.operator;\n }\n else {\n this.operator = this.filterOperators.equal;\n }\n skipInput = ['>', '<', '=', '!'];\n for (var i = 0; i < value.length; i++) {\n if (skipInput.indexOf(value[parseInt(i.toString(), 10)]) > -1) {\n index = i;\n break;\n }\n }\n this.getOperator(value.substring(index));\n if (index !== 0) {\n this.value = value.substring(0, index);\n }\n if (this.value !== '' && value.length >= 1) {\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n }\n if (isNaN(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n break;\n case 'date':\n case 'datetime':\n this.operator = this.filterOperators.equal;\n if (this.value !== '' && !(this.value instanceof Date)) {\n this.getOperator(value);\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n if (isNullOrUndefined(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n }\n break;\n case 'string':\n this.matchCase = false;\n if (this.column.filter.operator) {\n this.operator = this.column.filter.operator;\n }\n else {\n if (value.indexOf('*') !== -1 || value.indexOf('?') !== -1 || value.indexOf('%3f') !== -1) {\n this.operator = this.filterOperators.wildCard;\n }\n else if (value.indexOf('%') !== -1) {\n this.operator = this.filterOperators.like;\n }\n else {\n this.operator = this.filterOperators.startsWith;\n }\n }\n break;\n case 'boolean':\n if (value.toLowerCase() === 'true' || value === '1') {\n this.value = true;\n }\n else if (value.toLowerCase() === 'false' || value === '0') {\n this.value = false;\n }\n else if (value.length) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n this.operator = this.filterOperators.equal;\n break;\n default:\n if (this.column.filter.operator) {\n this.operator = this.column.filter.operator;\n }\n else {\n this.operator = this.filterOperators.equal;\n }\n }\n };\n Filter.prototype.getOperator = function (value) {\n var singleOp = value.charAt(0);\n var multipleOp = value.slice(0, 2);\n var operators = extend({ '=': this.filterOperators.equal, '!': this.filterOperators.notEqual }, DataUtil.operatorSymbols);\n // eslint-disable-next-line no-prototype-builtins\n if (operators.hasOwnProperty(singleOp) || operators.hasOwnProperty(multipleOp)) {\n this.operator = operators[\"\" + singleOp];\n this.value = value.substring(1);\n if (!this.operator) {\n this.operator = operators[\"\" + multipleOp];\n this.value = value.substring(2);\n }\n }\n if (this.operator === this.filterOperators.lessThan || this.operator === this.filterOperators.greaterThan) {\n if (this.value.charAt(0) === '=') {\n this.operator = this.operator + 'orequal';\n this.value = this.value.substring(1);\n }\n }\n };\n Filter.prototype.columnPositionChanged = function () {\n if (this.parent.filterSettings.type !== 'FilterBar') {\n return;\n }\n };\n Filter.prototype.getLocalizedCustomOperators = function () {\n var numOptr = [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', text: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', text: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', text: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', text: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') },\n { value: 'isnull', text: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', text: this.l10n.getConstant('NotNull') }\n ];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', text: this.l10n.getConstant('StartsWith') },\n { value: 'endswith', text: this.l10n.getConstant('EndsWith') },\n { value: 'contains', text: this.l10n.getConstant('Contains') },\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'isempty', text: this.l10n.getConstant('IsEmpty') },\n { value: 'doesnotstartwith', text: this.l10n.getConstant('NotStartsWith') },\n { value: 'doesnotendwith', text: this.l10n.getConstant('NotEndsWith') },\n { value: 'doesnotcontain', text: this.l10n.getConstant('NotContains') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') },\n { value: 'isnotempty', text: this.l10n.getConstant('IsNotEmpty') },\n { value: 'like', text: this.l10n.getConstant('Like') }\n ],\n numberOperator: numOptr,\n dateOperator: numOptr,\n datetimeOperator: numOptr,\n dateonlyOperator: numOptr,\n booleanOperator: [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ]\n };\n };\n /**\n * @param {string} field - specifies the field name\n * @returns {void}\n * @hidden\n */\n Filter.prototype.openMenuByField = function (field) {\n var gObj = this.parent;\n if (gObj.enableAdaptiveUI) {\n this.showCustomFilter(false);\n return;\n }\n var column = gObj.getColumnByField(field);\n var header = gObj.getColumnHeaderByField(field);\n var target = header.querySelector('.e-filtermenudiv');\n if (!target) {\n return;\n }\n var gClient = gObj.element.getBoundingClientRect();\n var fClient = target.getBoundingClientRect();\n this.filterDialogOpen(column, target, fClient.right - gClient.left, fClient.bottom - gClient.top);\n };\n Filter.prototype.filterIconClickHandler = function (e) {\n var target = e.target;\n if (target.classList.contains('e-filtermenudiv') && (this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel')) {\n var gObj = this.parent;\n var col = gObj.getColumnByUid(parentsUntil(target, 'e-headercell').firstElementChild.getAttribute('e-mappinguid'));\n this.column = col;\n if (this.fltrDlgDetails.field === col.field && this.fltrDlgDetails.isOpen) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.fltrDlgDetails = { field: col.field, isOpen: true };\n this.openMenuByField(col.field);\n }\n };\n Filter.prototype.clickHandler = function (e) {\n if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator) {\n if (parentsUntil(e.target, 'e-filterbarcell') &&\n e.target.classList.contains('e-input-group-icon')) {\n var filterOperatorElement = closest(e.target, 'div').\n querySelector('.e-filterbaroperator');\n if (filterOperatorElement) {\n filterOperatorElement.focus();\n }\n else {\n e.target.focus();\n }\n }\n if (e.target.classList.contains('e-list-item')) {\n var inputId = document.querySelector('.e-popup-open').getAttribute('id').replace('_popup', '');\n if (inputId.indexOf('grid-column') !== -1) {\n closest(document.getElementById(inputId), 'div').querySelector('.e-filtertext').focus();\n }\n }\n }\n if (this.filterSettings.mode === 'Immediate' || this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel') {\n var target = e.target;\n var datepickerEle = target.classList.contains('e-day'); // due to datepicker popup cause\n var dialog = parentsUntil(this.parent.element, 'e-dialog');\n var hasDialog = false;\n var popupEle = parentsUntil(target, 'e-popup');\n var hasDialogClosed = this.parent.element.classList.contains('e-device') ? document.querySelector('.e-filter-popup')\n : this.parent.element.querySelector('.e-filter-popup');\n if (dialog && popupEle) {\n hasDialog = dialog.id === popupEle.id;\n }\n if ((hasDialogClosed && (parentsUntil(target, 'e-excel-ascending') ||\n parentsUntil(target, 'e-excel-descending')))) {\n this.filterModule.closeDialog(target);\n }\n if (parentsUntil(target, 'e-filter-popup') || target.classList.contains('e-filtermenudiv')) {\n return;\n }\n else if (this.filterModule && (!parentsUntil(target, 'e-popup-wrapper')\n && (!closest(target, '.e-filter-item.e-menu-item'))) && !datepickerEle) {\n if ((hasDialog && (!parentsUntil(target, 'e-filter-popup'))\n && (!parentsUntil(target, 'e-popup-flmenu'))) || (!popupEle && hasDialogClosed)) {\n this.filterModule.isresetFocus = parentsUntil(target, 'e-grid') &&\n parentsUntil(target, 'e-grid').id === this.parent.element.id;\n this.filterModule.closeDialog(target);\n }\n }\n }\n };\n Filter.prototype.filterHandler = function (args) {\n this.actualPredicate[args.field] = args.actualPredicate;\n var dataManager = new DataManager(this.filterSettings.columns);\n var query = new Query().where('field', this.filterOperators.equal, args.field);\n var result = dataManager.executeLocal(query);\n for (var i = 0; i < result.length; i++) {\n var index = -1;\n for (var j = 0; j < this.filterSettings.columns.length; j++) {\n if (result[parseInt(i.toString(), 10)].field === this.filterSettings.columns[parseInt(j.toString(), 10)].field) {\n index = j;\n break;\n }\n }\n if (index !== -1) {\n this.filterSettings.columns.splice(index, 1);\n }\n }\n if (this.values[args.field]) {\n delete this.values[args.field];\n }\n var col = this.parent.getColumnByField(args.field);\n var iconClass = this.parent.showColumnMenu && col.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var filterIconElement = this.parent.getColumnHeaderByField(args.field).querySelector(iconClass);\n if (args.action === 'filtering') {\n this.filterSettings.columns = this.filterSettings.columns.concat(args.filterCollection);\n if (this.filterSettings.columns.length && filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n }\n else {\n if (filterIconElement) {\n filterIconElement.classList.remove('e-filtered');\n }\n args.requestType = 'filtering';\n this.parent.renderModule.refresh(args); //hot-fix onpropertychanged not working for object { array }\n }\n this.parent.dataBind();\n };\n Filter.prototype.updateFilter = function () {\n var cols = this.filterSettings.columns;\n this.actualPredicate = {};\n for (var i = 0; i < cols.length; i++) {\n this.column = this.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field) ||\n getColumnByForeignKeyValue(cols[parseInt(i.toString(), 10)].field, this.parent.getForeignKeyColumns());\n var fieldName = cols[parseInt(i.toString(), 10)].field;\n if (!this.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field)) {\n fieldName = getColumnByForeignKeyValue(cols[parseInt(i.toString(), 10)].field, this.parent.getForeignKeyColumns()).field;\n }\n this.refreshFilterIcon(fieldName, cols[parseInt(i.toString(), 10)].operator, cols[parseInt(i.toString(), 10)].value, cols[parseInt(i.toString(), 10)].type, cols[parseInt(i.toString(), 10)].predicate, cols[parseInt(i.toString(), 10)].matchCase, cols[parseInt(i.toString(), 10)].ignoreAccent, cols[parseInt(i.toString(), 10)].uid);\n }\n };\n Filter.prototype.refreshFilterIcon = function (fieldName, operator, value, type, predicate, matchCase, ignoreAccent, uid) {\n var obj = {\n field: fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: operator,\n value: value,\n type: type\n };\n if (this.actualPredicate[\"\" + fieldName]) {\n this.actualPredicate[\"\" + fieldName].push(obj);\n }\n else {\n this.actualPredicate[\"\" + fieldName] = [obj];\n }\n var field = uid ? this.parent.grabColumnByUidFromAllCols(uid).field : fieldName;\n this.addFilteredClass(field);\n };\n Filter.prototype.addFilteredClass = function (fieldName) {\n var filterIconElement;\n var col = this.parent.getColumnByField(fieldName);\n if (this.parent.showColumnMenu && col.showColumnMenu) {\n filterIconElement = this.parent.getColumnHeaderByField(fieldName).querySelector('.e-columnmenu');\n }\n else if (col) {\n filterIconElement = this.parent.getColumnHeaderByField(fieldName).querySelector('.e-icon-filter');\n }\n if (filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n };\n /**\n * @hidden\n * @returns {FilterUI} returns the FilterUI\n */\n Filter.prototype.getFilterUIInfo = function () {\n return this.filterModule ? this.filterModule.getFilterUIInfo() : {};\n };\n /**\n * @param {string} field - specifies the field name\n * @returns {string} returns the operator name\n * @hidden\n */\n Filter.prototype.getOperatorName = function (field) {\n return document.getElementById(this.parent.getColumnByField(field).uid).ej2_instances[0].value;\n };\n /**\n * Renders checkbox items in Menu filter dialog.\n *\n * @returns {void}\n */\n Filter.prototype.renderCheckboxOnFilterMenu = function () {\n return this.filterModule.renderCheckBoxMenu();\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[parseInt(f.toString(), 10)];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[parseInt(count.toString(), 10)].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[parseInt(count.toString(), 10)].uniqueID)) {\n this.filteredResult.push(childRec[parseInt(count.toString(), 10)]);\n setValue('uniqueIDFilterCollection.' + childRec[parseInt(count.toString(), 10)].uniqueID, childRec[parseInt(count.toString(), 10)], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[parseInt(count.toString(), 10)]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[parseInt(count.toString(), 10)]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[parseInt(c.toString(), 10)].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[parseInt(c.toString(), 10)].parentUniqueID, true);\n record[parseInt(c.toString(), 10)].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[parseInt(c.toString(), 10)].filterLevel = 0;\n this.filteredParentRecs.push(record[parseInt(c.toString(), 10)]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[parseInt(count.toString(), 10)];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { EventHandler, Browser } from '@syncfusion/ej2-base';\nimport { debounce } from '@syncfusion/ej2-base';\n/**\n * InterSectionObserver - class watch whether it enters the viewport.\n *\n * @hidden\n */\nvar InterSectionObserver = /** @class */ (function () {\n function InterSectionObserver(element, options, movableEle) {\n var _this = this;\n this.fromWheel = false;\n this.touchMove = false;\n this.options = {};\n this.sentinelInfo = {\n 'up': {\n check: function (rect, info) {\n var top = rect.top - _this.containerRect.top;\n var bottom = _this.containerRect.bottom > rect.bottom ? _this.containerRect.bottom - rect.bottom : 0;\n info.entered = top >= 0;\n return top + (_this.options.pageHeight / 2) >= 0 || (bottom > 0 && rect.bottom > 0);\n },\n axis: 'Y'\n },\n 'down': {\n check: function (rect, info) {\n var bottom = rect.bottom;\n info.entered = rect.bottom <= _this.containerRect.bottom;\n return ((bottom - _this.containerRect.top) - (_this.options.pageHeight / 2)) <= _this.options.pageHeight / 2;\n }, axis: 'Y'\n },\n 'right': {\n check: function (rect, info) {\n var right = rect.right;\n if (_this.movableEle) {\n info.entered = right < _this.movableContainerRect.right;\n return right - _this.movableContainerRect.width <= _this.movableContainerRect.right;\n }\n info.entered = right < _this.containerRect.right;\n return right - _this.containerRect.width <= _this.containerRect.right;\n }, axis: 'X'\n },\n 'left': {\n check: function (rect, info) {\n var left = rect.left;\n info.entered = left > 0;\n if (_this.movableEle) {\n return left + _this.movableContainerRect.width >= _this.movableContainerRect.left;\n }\n return left + _this.containerRect.width >= _this.containerRect.left;\n }, axis: 'X'\n }\n };\n this.element = element;\n this.options = options;\n this.movableEle = movableEle;\n }\n InterSectionObserver.prototype.observe = function (callback, onEnterCallback) {\n var _this = this;\n this.containerRect = this.options.container.getBoundingClientRect();\n EventHandler.add(this.options.container, 'wheel', function () { return _this.fromWheel = true; }, this);\n EventHandler.add(this.options.container, 'scroll', this.virtualScrollHandler(callback, onEnterCallback), this);\n if (this.options.movableContainer) {\n this.movableContainerRect = this.options.movableContainer.getBoundingClientRect();\n EventHandler.add(this.options.scrollbar, 'wheel', function () { return _this.fromWheel = true; }, this);\n EventHandler.add(this.options.scrollbar, 'scroll', this.virtualScrollHandler(callback, onEnterCallback), this);\n }\n };\n InterSectionObserver.prototype.check = function (direction) {\n var info = this.sentinelInfo[\"\" + direction];\n if (this.movableContainerRect && (direction === 'left' || direction === 'right')) {\n return info.check(this.movableEle.getBoundingClientRect(), info);\n }\n return info.check(this.element.getBoundingClientRect(), info);\n };\n InterSectionObserver.prototype.virtualScrollHandler = function (callback, onEnterCallback) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this.options.prevTop = this.options.prevLeft = 0;\n return function (e) {\n var top = _this.options.movableContainer ? _this.options.container.scrollTop : e.target.scrollTop;\n var left = _this.options.movableContainer ? _this.options.scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this.options.prevTop < top ? 'down' : 'up';\n direction = _this.options.prevLeft === left ? direction : _this.options.prevLeft < left ? 'right' : 'left';\n _this.options.prevTop = top;\n _this.options.prevLeft = left;\n var current = _this.sentinelInfo[\"\" + direction];\n if (_this.options.axes.indexOf(current.axis) === -1) {\n return;\n }\n _this.containerRect = _this.options.container.getBoundingClientRect();\n var check = _this.check(direction);\n if (current.entered) {\n if (_this.movableEle && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this.movableEle, current, direction, { top: top, left: left }, _this.fromWheel, check);\n }\n else {\n onEnterCallback(_this.element, current, direction, { top: top, left: left }, _this.fromWheel, check);\n }\n }\n if (check) {\n var fn = debounced100;\n //this.fromWheel ? this.options.debounceEvent ? debounced100 : callback : debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n }\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n _this.fromWheel = false;\n };\n };\n InterSectionObserver.prototype.setPageHeight = function (value) {\n this.options.pageHeight = value;\n };\n return InterSectionObserver;\n}());\nexport { InterSectionObserver };\n","import { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isGroupAdaptive } from '../base/util';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * Content module is used to render grid content\n */\nvar VirtualRowModelGenerator = /** @class */ (function () {\n function VirtualRowModelGenerator(parent) {\n this.cOffsets = {};\n this.cache = {};\n this.movableCache = {};\n this.frozenRightCache = {};\n this.rowCache = {};\n this.data = {};\n this.groups = {};\n this.currentInfo = {};\n this.parent = parent;\n this.model = this.parent.pageSettings;\n this.rowModelGenerator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n }\n VirtualRowModelGenerator.prototype.generateRows = function (data, e) {\n var _this = this;\n var isFrozen = this.parent.isFrozenGrid();\n var isManualRefresh = false;\n var info = e.virtualInfo = e.virtualInfo || this.getData();\n var xAxis = info.sentinelInfo && info.sentinelInfo.axis === 'X';\n var page = !xAxis && info.loadNext && !info.loadSelf ? info.nextInfo.page : info.page;\n var result = [];\n var indexes = this.getBlockIndexes(page);\n var loadedBlocks = [];\n if (this.currentInfo.blockIndexes) {\n indexes = info.blockIndexes = e.virtualInfo.blockIndexes = this.includePrevPage ? this.currentInfo.blockIndexes.slice(1)\n : this.currentInfo.blockIndexes.slice(0, this.currentInfo.blockIndexes.length - 1);\n isManualRefresh = true;\n }\n if ((isFrozen && (this.parent.getFrozenMode() !== literals.leftRight && !e.renderMovableContent)\n || this.parent.getFrozenMode() === literals.leftRight && !e.renderMovableContent && !e.renderFrozenRightContent) || !isFrozen) {\n this.checkAndResetCache(e.requestType);\n }\n if (isGroupAdaptive(this.parent) && this.parent.vcRows.length) {\n var dataRows = this.parent.vcRows.filter(function (row) { return row.isDataRow; });\n if ((this.parent.isManualRefresh && dataRows.length === data['records'].length) || !this.parent.isManualRefresh) {\n return result = this.parent.vcRows;\n }\n }\n if (this.parent.enableColumnVirtualization) {\n for (var i = 0; i < info.blockIndexes.length; i++) {\n if (this.isBlockAvailable(info.blockIndexes[parseInt(i.toString(), 10)])) {\n this.cache[info.blockIndexes[parseInt(i.toString(), 10)]] =\n this.rowModelGenerator.refreshRows(this.cache[info.blockIndexes[parseInt(i.toString(), 10)]]);\n }\n if ((e.renderMovableContent && this.isMovableBlockAvailable(info.blockIndexes[parseInt(i.toString(), 10)]))\n || (e.renderFrozenRightContent && this.isFrozenRightBlockAvailable(info.blockIndexes[parseInt(i.toString(), 10)]))) {\n var cache = e.renderMovableContent\n ? this.movableCache : this.frozenRightCache;\n cache[info.blockIndexes[parseInt(i.toString(), 10)]] =\n this.rowModelGenerator.refreshRows(cache[info.blockIndexes[parseInt(i.toString(), 10)]]);\n }\n }\n }\n var values = info.blockIndexes;\n for (var i = 0; i < values.length; i++) {\n if (!this.isBlockAvailable(values[parseInt(i.toString(), 10)])) {\n var startIdx = !isNullOrUndefined(this.startIndex) ? this.startIndex :\n this.getStartIndex(values[parseInt(i.toString(), 10)], data);\n var rows = this.rowModelGenerator.generateRows(data, {\n virtualInfo: info, startIndex: startIdx\n });\n if (isGroupAdaptive(this.parent) && !this.parent.vcRows.length) {\n this.parent.vRows = rows;\n this.parent.vcRows = rows;\n this.parent.notify(events.refreshVirtualMaxPage, {});\n }\n var median = void 0;\n if (isGroupAdaptive(this.parent)) {\n this.getGroupVirtualRecordsByIndex(rows);\n }\n else {\n if (isManualRefresh) {\n this.setBlockForManualRefresh(this.cache, indexes, rows);\n }\n else {\n median = ~~Math.max(rows.length, this.model.pageSize) / 2;\n if (!this.isBlockAvailable(indexes[0])) {\n this.cache[indexes[0]] = rows.slice(0, median);\n }\n if (!this.isBlockAvailable(indexes[1])) {\n this.cache[indexes[1]] = rows.slice(median);\n }\n }\n }\n }\n if (this.parent.groupSettings.columns.length && !xAxis && this.cache[values[parseInt(i.toString(), 10)]] &&\n !this.parent.groupSettings.enableLazyLoading) {\n this.cache[values[parseInt(i.toString(), 10)]] =\n this.updateGroupRow(this.cache[values[parseInt(i.toString(), 10)]], values[parseInt(i.toString(), 10)]);\n }\n if ((e.renderMovableContent && !this.isMovableBlockAvailable(values[parseInt(i.toString(), 10)]))\n || (e.renderFrozenRightContent && !this.isFrozenRightBlockAvailable(values[parseInt(i.toString(), 10)]))) {\n var cache = e.renderMovableContent\n ? this.movableCache : this.frozenRightCache;\n var startIdx = !isNullOrUndefined(this.startIndex) ? this.startIndex :\n this.getStartIndex(values[parseInt(i.toString(), 10)], data);\n var rows = this.rowModelGenerator.generateRows(data, {\n virtualInfo: info, startIndex: startIdx\n });\n if (isManualRefresh) {\n this.setBlockForManualRefresh(cache, indexes, rows);\n }\n else {\n var median = ~~Math.max(rows.length, this.model.pageSize) / 2;\n if ((e.renderFrozenRightContent && !this.isFrozenRightBlockAvailable(indexes[0]))\n || (e.renderMovableContent && !this.isMovableBlockAvailable(indexes[0]))) {\n cache[indexes[0]] = rows.slice(0, median);\n }\n if ((e.renderFrozenRightContent && !this.isFrozenRightBlockAvailable(indexes[1]))\n || (e.renderMovableContent && !this.isMovableBlockAvailable(indexes[1]))) {\n cache[indexes[1]] = rows.slice(median);\n }\n }\n }\n if (!e.renderMovableContent && !e.renderFrozenRightContent && this.cache[values[parseInt(i.toString(), 10)]]) {\n result.push.apply(result, this.cache[values[parseInt(i.toString(), 10)]]);\n }\n else {\n var cache = e.renderMovableContent\n ? this.movableCache : this.frozenRightCache;\n if (cache[values[parseInt(i.toString(), 10)]]) {\n result.push.apply(result, cache[values[parseInt(i.toString(), 10)]]);\n }\n }\n if (this.isBlockAvailable(values[parseInt(i.toString(), 10)])) {\n loadedBlocks.push(values[parseInt(i.toString(), 10)]);\n }\n }\n info.blockIndexes = loadedBlocks;\n var grouping = 'records';\n if (this.parent.allowGrouping && this.parent.groupSettings.columns.length) {\n this.parent.currentViewData[\"\" + grouping] = result.map(function (m) { return m.data; });\n }\n else if (isFrozen) {\n if ((e.renderMovableContent && (this.parent.getFrozenMode() === 'Left'\n || this.parent.getFrozenMode() === 'Right' || this.parent.getFrozenColumns())) || e.renderFrozenRightContent) {\n this.parent.currentViewData = result.map(function (m) { return m.data; });\n }\n }\n else {\n this.parent.currentViewData = result.map(function (m) { return m.data; });\n }\n if (e.requestType === 'grouping') {\n this.parent.currentViewData[\"\" + grouping] = this.parent.currentViewData[\"\" + grouping].filter(function (item, index) {\n return _this.parent.currentViewData[\"\" + grouping].indexOf(item) === index;\n });\n }\n if (isGroupAdaptive(this.parent) && this.parent.vcRows.length) {\n if (['save', 'delete'].some(function (value) { return e.requestType === value; })) {\n return result = this.parent.vcRows;\n }\n }\n return result;\n };\n VirtualRowModelGenerator.prototype.setBlockForManualRefresh = function (cache, blocks, rows) {\n var size = this.model.pageSize / 2;\n if (this.includePrevPage) {\n cache[blocks[0] - 1] = rows.slice(0, size);\n cache[blocks[0]] = rows.slice(size, size * 2);\n cache[blocks[1]] = rows.slice(size * 2, size * 3);\n cache[blocks[2]] = rows.slice(size * 3, size * 4);\n }\n else {\n cache[blocks[0]] = rows.slice(0, size);\n cache[blocks[1]] = rows.slice(size, size * 2);\n cache[blocks[2]] = rows.slice(size * 2, size * 3);\n cache[blocks[2] + 1] = rows.slice(size * 3, size * 4);\n }\n };\n VirtualRowModelGenerator.prototype.getBlockIndexes = function (page) {\n return [page + (page - 1), page * 2];\n };\n VirtualRowModelGenerator.prototype.getPage = function (block) {\n return block % 2 === 0 ? block / 2 : (block + 1) / 2;\n };\n VirtualRowModelGenerator.prototype.isBlockAvailable = function (value) {\n return value in this.cache;\n };\n VirtualRowModelGenerator.prototype.isMovableBlockAvailable = function (value) {\n return value in this.movableCache;\n };\n VirtualRowModelGenerator.prototype.isFrozenRightBlockAvailable = function (value) {\n return value in this.frozenRightCache;\n };\n VirtualRowModelGenerator.prototype.getData = function () {\n return {\n page: this.model.currentPage,\n blockIndexes: this.getBlockIndexes(this.model.currentPage),\n direction: 'down',\n columnIndexes: this.parent.getColumnIndexesInView()\n };\n };\n VirtualRowModelGenerator.prototype.getStartIndex = function (blk, data, full) {\n if (full === void 0) { full = true; }\n var page = this.getPage(blk);\n var even = blk % 2 === 0;\n var index = (page - 1) * this.model.pageSize;\n return full || !even ? index : index + ~~(this.model.pageSize / 2);\n };\n VirtualRowModelGenerator.prototype.getColumnIndexes = function (content) {\n var _this = this;\n if (content === void 0) { content = this.parent.getHeaderContent().querySelector('.' + literals.headerContent); }\n if (this.parent.isFrozenGrid()) {\n content = content.querySelector('.' + literals.movableHeader);\n }\n var indexes = [];\n var sLeft = content.scrollLeft | 0;\n var keys = Object.keys(this.cOffsets);\n var cWidth = content.getBoundingClientRect().width;\n sLeft = Math.min(this.cOffsets[keys.length - 1] - cWidth, sLeft);\n var calWidth = Browser.isDevice ? 2 * cWidth : cWidth / 2;\n var left = sLeft + cWidth + (sLeft === 0 ? calWidth : 0);\n keys.some(function (offset) {\n var iOffset = Number(offset);\n var offsetVal = _this.cOffsets[\"\" + offset];\n var border = sLeft - calWidth <= offsetVal && left + calWidth >= offsetVal;\n if (border) {\n indexes.push(iOffset);\n }\n return left + calWidth < offsetVal;\n });\n this.addFrozenIndex(indexes);\n return indexes;\n };\n VirtualRowModelGenerator.prototype.addFrozenIndex = function (indexes) {\n if (this.parent.getFrozenColumns() && this.parent.enableColumnVirtualization && indexes[0] === 0) {\n for (var i = 0; i < this.parent.getFrozenColumns(); i++) {\n indexes.push(indexes[indexes.length - 1] + 1);\n }\n }\n };\n VirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var actions = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder',\n 'save', 'delete'];\n if (this.parent.getFrozenColumns() && this.parent.frozenRows && this.parent.enableColumnVirtualization && action === 'reorder') {\n actions.splice(actions.indexOf(action), 1);\n }\n var clear = actions.some(function (value) { return action === value; });\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n this.movableCache = {};\n this.frozenRightCache = {};\n }\n return clear;\n };\n VirtualRowModelGenerator.prototype.refreshColOffsets = function () {\n var _this = this;\n var col = 0;\n this.cOffsets = {};\n var gLen = this.parent.groupSettings.columns.length;\n var cols = this.parent.columns;\n var cLen = cols.length;\n var isVisible = function (column) { return column.visible &&\n (!_this.parent.groupSettings.showGroupedColumn ? _this.parent.groupSettings.columns.indexOf(column.field) < 0 : column.visible); };\n var c = this.parent.groupSettings.columns;\n for (var i = 0; i < c.length; i++) {\n this.cOffsets[parseInt(i.toString(), 10)] = (this.cOffsets[i - 1] | 0) + 30;\n }\n // eslint-disable-next-line prefer-spread\n var blocks = Array.apply(null, Array(cLen)).map(function () { return col++; });\n for (var j = 0; j < blocks.length; j++) {\n blocks[parseInt(j.toString(), 10)] = blocks[parseInt(j.toString(), 10)] + gLen;\n this.cOffsets[blocks[parseInt(j.toString(), 10)]] =\n (this.cOffsets[blocks[parseInt(j.toString(), 10)] - 1] | 0) + (isVisible(cols[parseInt(j.toString(), 10)]) ?\n parseInt(cols[parseInt(j.toString(), 10)].width, 10) : 0);\n }\n };\n VirtualRowModelGenerator.prototype.updateGroupRow = function (current, block) {\n var currentFirst = current[0];\n var rows = [];\n var keys = Object.keys(this.cache);\n for (var i = 0; i < keys.length; i++) {\n if (Number(keys[parseInt(i.toString(), 10)]) < block) {\n rows = rows.concat(this.cache[keys[parseInt(i.toString(), 10)]]);\n }\n }\n if ((currentFirst && currentFirst.isDataRow) || block % 2 === 0) {\n return current;\n }\n return this.iterateGroup(current, rows);\n };\n VirtualRowModelGenerator.prototype.iterateGroup = function (current, rows) {\n var currentFirst = current[0];\n var offset = 0;\n if (currentFirst && currentFirst.isDataRow) {\n return current;\n }\n var isPresent = current.some(function (row) {\n return rows.some(function (oRow, index) {\n var res = oRow && oRow.data.field !== undefined\n && oRow.data.field === row.data.field &&\n oRow.data.key === row.data.key;\n if (res) {\n offset = index;\n }\n return res;\n });\n });\n if (isPresent) {\n current.shift();\n current = this.iterateGroup(current, rows.slice(offset));\n }\n return current;\n };\n VirtualRowModelGenerator.prototype.getRows = function () {\n var rows = [];\n var keys = Object.keys(this.cache);\n for (var i = 0; i < keys.length; i++) {\n rows = rows.concat(this.cache[keys[parseInt(i.toString(), 10)]]);\n }\n return rows;\n };\n VirtualRowModelGenerator.prototype.generateCells = function (foreignKeyData) {\n var cells = [];\n var cols = this.parent.columnModel;\n for (var i = 0; i < cols.length; i++) {\n cells.push(this.rowModelGenerator.generateCell(cols[parseInt(i.toString(), 10)], null, null, null, null, foreignKeyData));\n }\n return cells;\n };\n VirtualRowModelGenerator.prototype.getGroupVirtualRecordsByIndex = function (rows) {\n var blocks = this.parent.contentModule.getGroupedTotalBlocks();\n var blockSize = this.parent.contentModule.getBlockSize();\n for (var i = 1; i <= blocks; i++) {\n var count = 0;\n this.cache[parseInt(i.toString(), 10)] = [];\n for (var j = ((i - 1) * blockSize); j < rows.length; j++) {\n if (count === blockSize) {\n break;\n }\n this.cache[parseInt(i.toString(), 10)].push(rows[parseInt(j.toString(), 10)]);\n if (rows[parseInt(j.toString(), 10)].isDataRow) {\n count++;\n }\n }\n }\n };\n return VirtualRowModelGenerator;\n}());\nexport { VirtualRowModelGenerator };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { remove, createElement, closest, formatUnit, Browser, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { dataReady, modelChanged, refreshVirtualBlock, contentReady } from '../base/constant';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { ContentRender } from './content-renderer';\nimport { HeaderRender } from './header-renderer';\nimport { InterSectionObserver } from '../services/intersection-observer';\nimport { VirtualRowModelGenerator } from '../services/virtual-row-model-generator';\nimport { isGroupAdaptive, ensureLastRow, ensureFirstRow, getEditedDataIndex, getTransformValues } from '../base/util';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\nimport * as literals from '../base/string-literals';\n/**\n * VirtualContentRenderer\n *\n * @hidden\n */\nvar VirtualContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualContentRenderer, _super);\n function VirtualContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.prevHeight = 0;\n /** @hidden */\n _this.startIndex = 0;\n _this.preStartIndex = 0;\n _this.preventEvent = false;\n _this.actions = ['filtering', 'searching', 'grouping', 'ungrouping'];\n /** @hidden */\n _this.offsets = {};\n _this.tmpOffsets = {};\n /** @hidden */\n _this.virtualEle = new VirtualElementHandler();\n _this.offsetKeys = [];\n _this.isFocused = false;\n _this.isSelection = false;\n _this.isBottom = false;\n /** @hidden */\n _this.isTop = false;\n _this.rndrCount = 0;\n _this.diff = 0;\n _this.heightChange = false;\n _this.empty = undefined;\n _this.isCancel = false;\n _this.requestTypes = ['beginEdit', 'cancel', 'delete', 'add', 'save', 'sorting'];\n _this.isNormaledit = _this.parent.editSettings.mode === 'Normal';\n /** @hidden */\n _this.virtualData = {};\n _this.emptyRowData = {};\n _this.vfColIndex = [];\n _this.frzIdx = 1;\n _this.isContextMenuOpen = false;\n _this.isSelectionScroll = false;\n _this.validationCheck = false;\n _this.locator = locator;\n _this.eventListener('on');\n _this.parent.on(events.columnVisibilityChanged, _this.setVisible, _this);\n _this.vgenerator = _this.generator;\n return _this;\n }\n VirtualContentRenderer.prototype.renderTable = function () {\n this.header = this.locator.getService('rendererFactory').getRenderer(RenderType.Header);\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.content = this.getPanel().querySelector('.' + literals.content);\n this.virtualEle.renderWrapper(this.parent.height);\n this.virtualEle.renderPlaceHolder();\n this.virtualEle.wrapper.style.position = 'absolute';\n var debounceEvent = (this.parent.dataSource instanceof DataManager && !this.parent.dataSource.dataSource.offline);\n var opt = {\n container: this.content, pageHeight: this.getBlockHeight() * 2, debounceEvent: debounceEvent,\n axes: this.parent.enableColumnVirtualization ? ['X', 'Y'] : ['Y']\n };\n this.observer = new InterSectionObserver(this.virtualEle.wrapper, opt);\n };\n VirtualContentRenderer.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector(literals.tbody).innerHTML = '';\n }\n this.virtualEle.adjustTable(0, 0);\n };\n VirtualContentRenderer.prototype.getReorderedFrozenRows = function (args) {\n var blockIndex = args.virtualInfo.blockIndexes;\n var colsIndex = args.virtualInfo.columnIndexes;\n var page = args.virtualInfo.page;\n args.virtualInfo.blockIndexes = [1, 2];\n args.virtualInfo.page = 1;\n if (!args.renderMovableContent) {\n args.virtualInfo.columnIndexes = [];\n }\n var recordslength = this.parent.getCurrentViewRecords().length;\n var firstRecords = this.parent.renderModule.data.dataManager.dataSource.json.slice(0, recordslength);\n var virtualRows = this.vgenerator.generateRows(firstRecords, args);\n args.virtualInfo.blockIndexes = blockIndex;\n args.virtualInfo.columnIndexes = colsIndex;\n args.virtualInfo.page = page;\n return virtualRows.splice(0, this.parent.frozenRows);\n };\n VirtualContentRenderer.prototype.scrollListener = function (scrollArgs) {\n this.scrollAfterEdit();\n if (this.parent.enablePersistence) {\n this.parent.scrollPosition = scrollArgs.offset;\n }\n if (this.preventEvent || this.parent.isDestroyed) {\n this.preventEvent = false;\n return;\n }\n if (this.parent.islazyloadRequest && scrollArgs.direction === 'down') {\n this.parent.removeMaskRow();\n this.parent.islazyloadRequest = false;\n return;\n }\n if (isNullOrUndefined(document.activeElement)) {\n this.isFocused = false;\n }\n else {\n this.isFocused = this.content === closest(document.activeElement, '.' + literals.content) || this.content === document.activeElement;\n }\n var info = scrollArgs.sentinel;\n var viewInfo = this.currentInfo = this.getInfoFromView(scrollArgs.direction, info, scrollArgs.offset);\n if (isGroupAdaptive(this.parent)) {\n if (viewInfo.blockIndexes && this.prevInfo.blockIndexes.toString() === viewInfo.blockIndexes.toString()) {\n this.parent.removeMaskRow();\n return;\n }\n else {\n viewInfo.event = 'refresh-virtual-block';\n if (!isNullOrUndefined(viewInfo.offsets)) {\n viewInfo.offsets.top = this.content.scrollTop;\n }\n this.parent.pageSettings.currentPage = viewInfo.page;\n if (this.parent.enableVirtualMaskRow) {\n this.parent.showMaskRow(info.axis);\n this.parent.addShimmerEffect();\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n return;\n }\n }\n if (this.prevInfo && ((info.axis === 'Y' && this.prevInfo.blockIndexes.toString() === viewInfo.blockIndexes.toString())\n || (info.axis === 'X' && this.prevInfo.columnIndexes.toString() === viewInfo.columnIndexes.toString()))) {\n this.parent.removeMaskRow();\n if (Browser.isIE) {\n this.parent.hideSpinner();\n }\n this.requestType = this.requestType === 'virtualscroll' ? this.empty : this.requestType;\n if (info.axis === 'Y') {\n this.restoreEdit();\n }\n if (this.parent.groupSettings.enableLazyLoading && this.prevInfo.blockIndexes[0] === 1 && viewInfo.blockIndexes[0] === 1 &&\n scrollArgs.direction === 'up') {\n this.virtualEle.adjustTable(0, viewInfo.offsets.top < this.offsets[1] ? 0 : this.getBlockHeight());\n }\n return;\n }\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n this.parent.pageSettings.currentPage = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.requestType = 'virtualscroll';\n if (this.parent.enableVirtualMaskRow) {\n this.parent.showMaskRow(info.axis);\n this.parent.addShimmerEffect();\n }\n this.parent.islazyloadRequest = false;\n this.parent.notify(viewInfo.event, {\n requestType: 'virtualscroll', virtualInfo: viewInfo,\n focusElement: scrollArgs.focusElement\n });\n if (this.parent.enableColumnVirtualization && !this.parent.getContentTable().querySelector('tr.e-row')) {\n this.parent.removeMaskRow();\n this.appendContent(undefined, undefined, {\n requestType: 'virtualscroll', virtualInfo: viewInfo,\n focusElement: scrollArgs.focusElement\n });\n this.prevInfo = viewInfo;\n }\n };\n VirtualContentRenderer.prototype.block = function (blk) {\n return this.vgenerator.isBlockAvailable(blk);\n };\n VirtualContentRenderer.prototype.getInfoFromView = function (direction, info, e) {\n var isBlockAdded = false;\n var tempBlocks = [];\n var infoType = { direction: direction, sentinelInfo: info, offsets: e,\n startIndex: this.preStartIndex, endIndex: this.preEndIndex };\n infoType.page = this.getPageFromTop(e.top, infoType);\n infoType.blockIndexes = tempBlocks = this.vgenerator.getBlockIndexes(infoType.page);\n infoType.loadSelf = !this.vgenerator.isBlockAvailable(tempBlocks[infoType.block]);\n var blocks = this.ensureBlocks(infoType);\n if (this.activeKey === 'upArrow' && infoType.blockIndexes.toString() !== blocks.toString()) {\n // To avoid dupilcate row index problem in key focus support\n var newBlock = blocks[blocks.length - 1];\n if (infoType.blockIndexes.indexOf(newBlock) === -1) {\n isBlockAdded = true;\n }\n }\n infoType.blockIndexes = blocks;\n infoType.loadNext = !blocks.filter(function (val) { return tempBlocks.indexOf(val) === -1; })\n .every(this.block.bind(this));\n infoType.event = (infoType.loadNext || infoType.loadSelf) ? modelChanged : refreshVirtualBlock;\n infoType.nextInfo = infoType.loadNext ? { page: Math.max(1, infoType.page + (direction === 'down' ? 1 : -1)) } : {};\n if (isBlockAdded) {\n infoType.blockIndexes = [infoType.blockIndexes[0] - 1, infoType.blockIndexes[0], infoType.blockIndexes[0] + 1];\n }\n if (this.activeKey === 'downArrow' && !isNaN(this.rowIndex)) {\n var firstBlock = Math.ceil(this.rowIndex / this.getBlockSize());\n if (firstBlock !== 1 && (infoType.blockIndexes[1] !== firstBlock || infoType.blockIndexes.length < 3)) {\n infoType.blockIndexes = [firstBlock - 1, firstBlock, firstBlock + 1];\n }\n }\n infoType.columnIndexes = info.axis === 'X' ? this.vgenerator.getColumnIndexes() : this.parent.getColumnIndexesInView();\n if (this.parent.enableColumnVirtualization && info.axis === 'X') {\n infoType.event = refreshVirtualBlock;\n }\n return infoType;\n };\n VirtualContentRenderer.prototype.setKeyboardNavIndex = function () {\n this.blazorDataLoad = true;\n if (this.activeKey === 'downArrow' || this.activeKey === 'upArrow') {\n this.blzRowIndex = this.activeKey === 'downArrow' ? this.rowIndex + 1 : this.rowIndex - 1;\n document.activeElement.blur();\n }\n };\n VirtualContentRenderer.prototype.ensureBlocks = function (info) {\n var _this = this;\n var index = info.blockIndexes[info.block];\n var mIdx;\n var old = index;\n var max = Math.max;\n var indexes = info.direction === 'down' ? [max(index, 1), ++index, ++index] : [max(index - 1, 1), index, index + 1];\n this.prevInfo = this.prevInfo || this.vgenerator.getData();\n if (this.parent.enableColumnVirtualization && this.parent.isFrozenGrid()) {\n // To avoid frozen content white space issue\n if (info.sentinelInfo.axis === 'X' || (info.sentinelInfo.axis === 'Y' && (info.page === this.prevInfo.page))) {\n indexes = this.prevInfo.blockIndexes;\n }\n }\n indexes = indexes.filter(function (val, ind) { return indexes.indexOf(val) === ind; });\n if (this.prevInfo.blockIndexes.toString() === indexes.toString()) {\n return indexes;\n }\n if (info.loadSelf || (info.direction === 'down' && this.isEndBlock(old))) {\n indexes = this.vgenerator.getBlockIndexes(info.page);\n }\n indexes.some(function (val, ind) {\n var result = val === (isGroupAdaptive(_this.parent) ? _this.getGroupedTotalBlocks() : _this.getTotalBlocks());\n if (result) {\n mIdx = ind;\n }\n return result;\n });\n if (mIdx !== undefined) {\n indexes = indexes.slice(0, mIdx + 1);\n if (info.block === 0 && indexes.length === 1 && this.vgenerator.isBlockAvailable(indexes[0] - 1)) {\n indexes = [indexes[0] - 1, indexes[0]];\n }\n }\n return indexes;\n };\n // tslint:disable-next-line:max-func-body-length\n VirtualContentRenderer.prototype.appendContent = function (target, newChild, e) {\n var _this = this;\n // currentInfo value will be used if there are multiple dom updates happened due to mousewheel\n var isFrozen = this.parent.isFrozenGrid();\n var frzCols = this.parent.getFrozenColumns() || this.parent.getFrozenLeftColumnsCount();\n var colVFtable = this.parent.enableColumnVirtualization && isFrozen;\n this.checkFirstBlockColIndexes(e);\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' && this.currentInfo.page &&\n this.currentInfo.page !== e.virtualInfo.page ? this.currentInfo : e.virtualInfo;\n this.prevInfo = this.prevInfo || e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n if (colVFtable && info.columnIndexes[0] === frzCols) {\n cBlock = (info.columnIndexes[0] - frzCols) - 1;\n }\n var cOffset = this.getColumnOffset(cBlock);\n var width;\n var blocks = info.blockIndexes;\n if (this.parent.groupSettings.columns.length) {\n this.refreshOffsets();\n }\n if (this.parent.height === '100%') {\n this.parent.element.style.height = '100%';\n }\n var vHeight = this.parent.height.toString().indexOf('%') < 0 ? this.content.getBoundingClientRect().height :\n this.parent.element.getBoundingClientRect().height;\n if (!this.requestTypes.some(function (value) { return value === _this.requestType; })) {\n var translate = this.getTranslateY(this.content.scrollTop, vHeight, info);\n if (this.parent.groupSettings.enableLazyLoading && info && this.prevInfo && this.prevInfo.blockIndexes[0] === 1 &&\n info.blockIndexes[0] === 1 && info.direction === 'up') {\n this.virtualEle.adjustTable(0, this.content.scrollTop < this.offsets[1] ? 0 : this.getBlockHeight());\n }\n else {\n this.virtualEle.adjustTable(colVFtable ? 0 : cOffset, translate);\n }\n if (colVFtable) {\n this.virtualEle.adjustMovableTable(cOffset, 0);\n }\n }\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(colVFtable ? 0 : cOffset, 0);\n if (colVFtable) {\n this.header.virtualEle.adjustMovableTable(cOffset, 0);\n }\n }\n if (this.parent.enableColumnVirtualization) {\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n if (colVFtable) {\n this.header.virtualEle.setMovableWrapperWidth(width);\n }\n else {\n this.header.virtualEle.setWrapperWidth(width);\n }\n }\n if (colVFtable) {\n this.virtualEle.setMovableWrapperWidth(width, Browser.isIE || Browser.info.name === 'edge');\n }\n else {\n this.virtualEle.setWrapperWidth(width, Browser.isIE || Browser.info.name === 'edge');\n }\n if (this.parent.enableColumnVirtualization && isNullOrUndefined(target) && isNullOrUndefined(newChild)) {\n return;\n }\n if (!isNullOrUndefined(target) && !isNullOrUndefined(target.parentNode)) {\n remove(target);\n }\n var tbody;\n if (isFrozen) {\n if (e.renderFrozenRightContent) {\n tbody = this.parent.getContent().querySelector('.e-frozen-right-content').querySelector(literals.tbody);\n }\n else if (!e.renderMovableContent) {\n tbody = this.parent.getFrozenVirtualContent().querySelector(literals.tbody);\n }\n else if (e.renderMovableContent) {\n tbody = this.parent.getMovableVirtualContent().querySelector(literals.tbody);\n }\n }\n else {\n tbody = this.parent.element.querySelector('.' + literals.content).querySelector(literals.tbody);\n }\n if (tbody) {\n remove(tbody);\n target = null;\n }\n var isReact = this.parent.isReact && !isNullOrUndefined(this.parent.rowTemplate);\n if (!isReact) {\n target = this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n target.appendChild(newChild);\n }\n else {\n target = newChild;\n }\n if (this.parent.frozenRows && e.requestType === 'virtualscroll' && this.parent.pageSettings.currentPage === 1) {\n for (var i = 0; i < this.parent.frozenRows; i++) {\n target.children[0].remove();\n }\n }\n if (isFrozen) {\n if (e.renderFrozenRightContent) {\n this.parent.getContent().querySelector('.e-frozen-right-content').querySelector('.' + literals.table).appendChild(target);\n this.requestType = this.requestType === 'virtualscroll' ? this.empty : this.requestType;\n this.parent.notify(events.freezeRender, { case: 'refreshHeight' });\n }\n else if (!e.renderMovableContent) {\n this.parent.getFrozenVirtualContent().querySelector('.' + literals.table).appendChild(target);\n }\n else if (e.renderMovableContent) {\n this.parent.getMovableVirtualContent().querySelector('.' + literals.table).appendChild(target);\n if (this.parent.getFrozenMode() !== literals.leftRight) {\n this.requestType = this.requestType === 'virtualscroll' ? this.empty : this.requestType;\n this.parent.notify(events.freezeRender, { case: 'refreshHeight' });\n }\n }\n if (this.vfColIndex.length) {\n e.virtualInfo.columnIndexes = info.columnIndexes = extend([], this.vfColIndex);\n this.vfColIndex = e.renderMovableContent ? [] : this.vfColIndex;\n }\n }\n else {\n this.getTable().appendChild(target);\n this.requestType = this.requestType === 'virtualscroll' ? this.empty : this.requestType;\n }\n if (this.parent.groupSettings.columns.length) {\n if (!isGroupAdaptive(this.parent) && info.direction === 'up') {\n var blk = this.offsets[this.getTotalBlocks()] - this.prevHeight;\n if (!this.parent.groupSettings.enableLazyLoading) {\n this.preventEvent = true;\n }\n var sTop = this.content.scrollTop;\n this.content.scrollTop = sTop + blk;\n }\n this.setVirtualHeight();\n if (!this.parent.groupSettings.enableLazyLoading) {\n this.observer.setPageHeight(this.getOffset(blocks[blocks.length - 1]) - this.getOffset(blocks[0] - 1));\n }\n }\n this.prevInfo = info;\n if (this.isFocused && this.activeKey !== 'downArrow' && this.activeKey !== 'upArrow') {\n this.content.focus();\n }\n var lastPage = Math.ceil(this.getTotalBlocks() / 2);\n if (this.isBottom) {\n this.isBottom = false;\n this.parent.getContent().firstElementChild.scrollTop = this.offsets[this.offsetKeys.length - 1];\n }\n if ((this.parent.pageSettings.currentPage + 1 === lastPage || this.parent.pageSettings.currentPage === lastPage) &&\n blocks.length === 2 && e.requestType === 'delete') {\n this.parent.getContent().firstElementChild.scrollTop = this.offsets[this.offsetKeys.length - 1];\n }\n if ((this.parent.pageSettings.currentPage === lastPage) && blocks.length === 1) {\n this.isBottom = true;\n this.parent.getContent().firstElementChild.scrollTop = this.offsets[this.offsetKeys.length - 2];\n }\n if (this.parent.isFrozenGrid() && (this.parent.pageSettings.currentPage === lastPage - 1) && info.direction === 'up') {\n this.parent.getContent().firstElementChild.scrollTop = this.offsets[this.offsetKeys.length - 3];\n }\n if (this.isTop) {\n this.parent.getContent().firstElementChild.scrollTop = 0;\n this.isTop = false;\n }\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n this.focusCell(e);\n this.restoreEdit(e);\n this.restoreAdd(e);\n this.ensureSelectedRowPosition();\n this.validationScrollLeft(e, isFrozen);\n if (!this.initialRowTop) {\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (this.parent.getRowByIndex(0)) {\n this.initialRowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n }\n var tableName = e.tableName;\n var isLoaded = this.parent.getFrozenMode() === 'Left-Right' ? tableName === 'frozen-right' : tableName === 'movable';\n if (!isFrozen || isLoaded) {\n this.vgenerator.startIndex = null;\n this.vgenerator.currentInfo = {};\n this.vgenerator.includePrevPage = null;\n }\n };\n VirtualContentRenderer.prototype.validationScrollLeft = function (e, isFrozen) {\n var left = this.parent.getFrozenColumns();\n var table = this.parent.getFrozenMode();\n var trigger = !isFrozen || e && (left || table === 'Left' || table === 'Right' ? e.renderMovableContent\n : e.renderFrozenRightContent);\n if (this.validationCheck && trigger) {\n if (this.validationCol) {\n var offset = this.vgenerator.cOffsets[(this.validationCol.index - this.parent.getVisibleFrozenColumns()) - 1];\n this.validationCol = null;\n if (this.parent.isFrozenGrid()) {\n this.movableContent.scrollLeft = offset;\n }\n else {\n this.content.scrollLeft = offset;\n }\n }\n else {\n this.validationCheck = false;\n this.parent.editModule.editFormValidate();\n }\n }\n };\n VirtualContentRenderer.prototype.ensureSelectedRowPosition = function () {\n if (!this.isSelection && this.isSelectionScroll && !isNullOrUndefined(this.selectRowIndex)) {\n this.isSelectionScroll = false;\n var row = this.parent.getRowByIndex(this.selectRowIndex);\n if (row && !this.isRowInView(row)) {\n this.rowSelected({ rowIndex: this.selectRowIndex, row: row }, true);\n }\n }\n };\n VirtualContentRenderer.prototype.checkFirstBlockColIndexes = function (e) {\n if (this.parent.enableColumnVirtualization && this.parent.isFrozenGrid() && e.virtualInfo.columnIndexes[0] === 0) {\n var indexes = [];\n var frozenCols = this.parent.getFrozenColumns() || this.parent.getFrozenLeftColumnsCount();\n if (!e.renderMovableContent && e.virtualInfo.columnIndexes.length > frozenCols) {\n this.vfColIndex = e.virtualInfo.columnIndexes;\n for (var i = 0; i < frozenCols; i++) {\n indexes.push(i);\n }\n e.virtualInfo.columnIndexes = indexes;\n }\n else if (e.renderMovableContent) {\n if (!this.vfColIndex.length) {\n this.vfColIndex = extend([], e.virtualInfo.columnIndexes);\n }\n e.virtualInfo.columnIndexes = extend([], this.vfColIndex);\n e.virtualInfo.columnIndexes.splice(0, frozenCols);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n VirtualContentRenderer.prototype.focusCell = function (e) {\n if (this.activeKey !== 'upArrow' && this.activeKey !== 'downArrow') {\n return;\n }\n var row = this.parent.getRowByIndex(this.rowIndex);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var cell = row.cells[this.cellIndex];\n cell.focus({ preventScroll: true });\n if (!this.parent.selectionSettings.checkboxOnly) {\n this.parent.selectRow(parseInt(row.getAttribute(literals.dataRowIndex), 10));\n }\n this.activeKey = this.empty;\n };\n VirtualContentRenderer.prototype.restoreEdit = function (e) {\n if (this.isNormaledit) {\n var left = this.parent.getFrozenColumns();\n var isFrozen = e && this.parent.isFrozenGrid();\n var table = this.parent.getFrozenMode();\n var trigger = e && (left || table === 'Left' || table === 'Right' ? e.renderMovableContent\n : e.renderFrozenRightContent);\n if ((!isFrozen || (isFrozen && trigger)) && this.parent.editSettings.allowEditing\n && this.parent.editModule && !isNullOrUndefined(this.editedRowIndex)) {\n var row = this.getRowByIndex(this.editedRowIndex);\n var content = this.content;\n var keys = Object.keys(this.virtualData);\n var isXaxis = e && e.virtualInfo && e.virtualInfo.sentinelInfo.axis === 'X';\n if (isFrozen && isXaxis) {\n row = this.parent.getMovableRowByIndex(this.editedRowIndex);\n content = this.movableContent;\n }\n if (keys.length && row && !content.querySelector('.' + literals.editedRow)) {\n var top_1 = row.getBoundingClientRect().top;\n if (isXaxis || (top_1 < this.content.offsetHeight && top_1 > this.parent.getRowHeight())) {\n this.parent.isEdit = false;\n this.parent.editModule.startEdit(row);\n }\n }\n if (row && this.content.querySelector('.' + literals.editedRow) && !keys.length) {\n var rowData = extend({}, this.getRowObjectByIndex(this.editedRowIndex));\n this.virtualData = this.getVirtualEditedData(rowData);\n }\n }\n this.restoreAdd(e);\n }\n };\n VirtualContentRenderer.prototype.getVirtualEditedData = function (rowData) {\n var editForms = [].slice.call(this.parent.element.getElementsByClassName('e-gridform'));\n var isFormDestroyed = this.parent.editModule && this.parent.editModule.formObj\n && this.parent.editModule.formObj.isDestroyed;\n if (!isFormDestroyed) {\n for (var i = 0; i < editForms.length; i++) {\n rowData = this.parent.editModule.getCurrentEditedData(editForms[parseInt(i.toString(), 10)], rowData);\n }\n }\n return rowData;\n };\n VirtualContentRenderer.prototype.restoreAdd = function (e) {\n var left = this.parent.getFrozenColumns();\n var isFrozen = e && this.parent.isFrozenGrid();\n var table = this.parent.getFrozenMode();\n var isXaxis = e && e.virtualInfo && e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'X';\n var startAdd = isXaxis && isFrozen ? !(this.parent.getMovableVirtualHeader().querySelector('.' + literals.addedRow)\n || this.parent.getMovableVirtualContent().querySelector('.' + literals.addedRow)) : !this.parent.element.querySelector('.' + literals.addedRow);\n var trigger = e && (left || table === 'Left' || table === 'Right' ? e.renderMovableContent : e.renderFrozenRightContent);\n if ((!isFrozen || (isFrozen && trigger)) && this.isNormaledit && this.isAdd && startAdd) {\n var isTop = this.parent.editSettings.newRowPosition === 'Top' && this.content.scrollTop < this.parent.getRowHeight();\n var isBottom = this.parent.editSettings.newRowPosition === 'Bottom'\n && this.parent.pageSettings.currentPage === this.maxPage;\n if (isTop || isBottom) {\n this.parent.isEdit = false;\n this.parent.addRecord();\n }\n }\n };\n VirtualContentRenderer.prototype.onDataReady = function (e) {\n if (!isNullOrUndefined(e.count)) {\n this.count = e.count;\n this.maxPage = Math.ceil(e.count / this.parent.pageSettings.pageSize);\n }\n this.vgenerator.checkAndResetCache(e.requestType);\n if (['refresh', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder', undefined]\n .some(function (value) { return e.requestType === value; })) {\n this.refreshOffsets();\n }\n this.setVirtualHeight();\n this.resetScrollPosition(e.requestType);\n };\n /**\n * @param {number} height - specifies the height\n * @returns {void}\n * @hidden\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n VirtualContentRenderer.prototype.setVirtualHeight = function (height) {\n var width = this.parent.enableColumnVirtualization ?\n this.getColumnOffset(this.parent.columns.length + this.parent.groupSettings.columns.length - 1) + 'px' : '100%';\n if (this.parent.isFrozenGrid()) {\n var virtualHeightTemp = (this.parent.pageSettings.currentPage === 1 && Object.keys(this.offsets).length <= 2) ?\n this.offsets[1] : this.offsets[this.getTotalBlocks() - 2];\n var scrollableElementHeight = this.content.clientHeight;\n virtualHeightTemp = virtualHeightTemp > scrollableElementHeight ? virtualHeightTemp : 0;\n // To overcome the white space issue in last page (instead of position absolute)\n this.virtualEle.setVirtualHeight(virtualHeightTemp, width);\n }\n else {\n var virtualHeight = (this.offsets[isGroupAdaptive(this.parent) && this.count !== 0 ? this.getGroupedTotalBlocks() :\n this.getTotalBlocks()]);\n var lastPage = Math.ceil(this.getTotalBlocks() / 2);\n var placeHolderBottom = Math.round(this.virtualEle.placeholder.getBoundingClientRect().bottom);\n var wrapperBottom = Math.round(this.virtualEle.wrapper.getBoundingClientRect().bottom);\n if ((this.currentInfo.page === lastPage || this.currentInfo.page + 1 === lastPage) && this.currentInfo.direction === 'down' &&\n placeHolderBottom > wrapperBottom && !this.diff) {\n this.diff = placeHolderBottom - wrapperBottom;\n }\n if (this.diff && (this.currentInfo.page === lastPage) && placeHolderBottom > wrapperBottom) {\n virtualHeight -= this.diff;\n this.heightChange = true;\n }\n else if (this.diff && this.heightChange && this.requestType === 'virtualscroll') {\n virtualHeight -= this.diff;\n this.heightChange = false;\n }\n this.virtualEle.setVirtualHeight(virtualHeight, width);\n if (this.virtualEle && this.virtualEle.wrapper) {\n this.virtualEle.wrapper.style.minHeight = !isNullOrUndefined(virtualHeight) ? formatUnit(this.parent.height) : '0px';\n }\n }\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.setVirtualHeight(1, width);\n if (this.parent.isFrozenGrid()) {\n this.virtualEle.setMovableVirtualHeight(1, width);\n this.header.virtualEle.setMovableVirtualHeight(1, width);\n }\n }\n };\n VirtualContentRenderer.prototype.getPageFromTop = function (sTop, info) {\n var _this = this;\n var total = (isGroupAdaptive(this.parent)) ? this.getGroupedTotalBlocks() : this.getTotalBlocks();\n var page = 0;\n this.offsetKeys.some(function (offset) {\n var iOffset = Number(offset);\n var border = sTop <= _this.offsets[\"\" + offset] || (iOffset === total && sTop > _this.offsets[\"\" + offset]);\n if (border) {\n if (_this.offsetKeys.length % 2 !== 0 && iOffset.toString() === _this.offsetKeys[_this.offsetKeys.length - 2]\n && sTop <= _this.offsets[_this.offsetKeys.length - 1]) {\n iOffset = iOffset + 1;\n }\n info.block = iOffset % 2 === 0 ? 1 : 0;\n page = Math.max(1, Math.min(_this.vgenerator.getPage(iOffset), _this.maxPage));\n }\n return border;\n });\n return page;\n };\n VirtualContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if (info === undefined) {\n info = { page: this.getPageFromTop(sTop, {}) };\n info.blockIndexes = this.vgenerator.getBlockIndexes(info.page);\n }\n var block = (info.blockIndexes[0] || 1) - 1;\n var translate = this.getOffset(block);\n var endTranslate = this.getOffset(info.blockIndexes[info.blockIndexes.length - 1]);\n if (isOnenter) {\n info = this.prevInfo;\n }\n var result = translate > sTop ?\n this.getOffset(block - 1) : endTranslate < (sTop + cHeight) ? this.getOffset(block + 1) : translate;\n var blockHeight = this.offsets[info.blockIndexes[info.blockIndexes.length - 1]] -\n this.tmpOffsets[info.blockIndexes[0]];\n var totalBlocks = isGroupAdaptive(this.parent) ? this.getGroupedTotalBlocks() : this.getTotalBlocks();\n if (result + blockHeight > this.offsets[parseInt(totalBlocks.toString(), 10)]) {\n result -= (result + blockHeight) - this.offsets[parseInt(totalBlocks.toString(), 10)];\n }\n return result;\n };\n VirtualContentRenderer.prototype.getOffset = function (block) {\n return Math.min(this.offsets[parseInt(block.toString(), 10)] | 0, this.offsets[this.maxBlock] | 0);\n };\n VirtualContentRenderer.prototype.onEntered = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n if (Browser.isIE && !isWheel && check && !_this.preventEvent && !_this.parent.enableVirtualMaskRow) {\n _this.parent.showSpinner();\n }\n if (_this.parent.enableVirtualMaskRow && !_this.preventEvent) {\n var firstOffSetKey = parseInt(_this.offsetKeys[0], 10);\n var lastOffSetKey = parseInt(_this.offsetKeys[_this.offsetKeys.length - 1], 10);\n var blockIndex = _this.currentInfo.blockIndexes;\n if (!((blockIndex && blockIndex[0] === firstOffSetKey && direction === 'up') ||\n (blockIndex && blockIndex[blockIndex.length - 1] === lastOffSetKey && direction === 'down'))) {\n setTimeout(function () {\n _this.parent.showMaskRow(current.axis);\n }, 0);\n }\n }\n var colVFtable = _this.parent.enableColumnVirtualization && _this.parent.isFrozenGrid();\n _this.prevInfo = _this.prevInfo || _this.vgenerator.getData();\n var xAxis = current.axis === 'X';\n var top = _this.prevInfo.offsets ? _this.prevInfo.offsets.top : null;\n var height = _this.content.getBoundingClientRect().height;\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0] - 1);\n if (xAxis && !colVFtable) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n var y = _this.getTranslateY(e.top, height, xAxis && top === e.top ? _this.prevInfo : undefined, true);\n _this.virtualEle.adjustTable(colVFtable ? 0 : x, Math.min(y, _this.offsets[_this.maxBlock]));\n if (colVFtable) {\n _this.virtualEle.adjustMovableTable(x, 0);\n }\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(colVFtable ? 0 : x, 0);\n if (colVFtable) {\n _this.header.virtualEle.adjustMovableTable(x, 0);\n }\n }\n };\n };\n VirtualContentRenderer.prototype.dataBound = function () {\n this.parent.notify(events.refreshVirtualFrozenHeight, {});\n if (this.isSelection && this.activeKey !== 'upArrow' && this.activeKey !== 'downArrow') {\n this.parent.selectRow(this.selectedRowIndex);\n }\n else {\n this.activeKey = this.empty;\n }\n };\n VirtualContentRenderer.prototype.rowSelected = function (args, isSelection) {\n if ((this.isSelection || isSelection) && !this.isLastBlockRow(args.rowIndex)) {\n var transform = getTransformValues(this.content.firstElementChild);\n var gridTop = this.parent.element.getBoundingClientRect().top;\n var rowTop = args.row.getBoundingClientRect().top - gridTop;\n var height = this.content.getBoundingClientRect().height;\n var isBottom = height < rowTop;\n var remainHeight = isBottom ? rowTop - height : this.initialRowTop - rowTop;\n var translateY = isBottom ? transform.height - remainHeight : transform.height + remainHeight;\n this.virtualEle.adjustTable(transform.width, translateY);\n var lastRowTop = this.content.querySelector('tbody').lastElementChild.getBoundingClientRect().top - gridTop;\n if (lastRowTop < height) {\n translateY = translateY + (height - (args.row.getBoundingClientRect().top - gridTop));\n this.virtualEle.adjustTable(transform.width, translateY - (this.parent.getRowHeight() / 2));\n }\n }\n this.isSelection = false;\n };\n VirtualContentRenderer.prototype.isLastBlockRow = function (index) {\n var scrollEle = this.parent.getContent().firstElementChild;\n var visibleRowCount = Math.floor(scrollEle.offsetHeight / this.parent.getRowHeight()) - 1;\n var startIdx = (this.maxPage * this.parent.pageSettings.pageSize) - visibleRowCount;\n return index >= startIdx;\n };\n VirtualContentRenderer.prototype.refreshMaxPage = function () {\n if (this.parent.groupSettings.columns.length && this.parent.vcRows.length) {\n this.maxPage = Math.ceil(this.parent.vcRows.length / this.parent.pageSettings.pageSize);\n }\n };\n VirtualContentRenderer.prototype.setVirtualPageQuery = function (args) {\n var row = this.parent.getContent().querySelector('.e-row');\n if (row && this.parent.isManualRefresh && this.currentInfo.blockIndexes && this.currentInfo.blockIndexes.length === 3) {\n this.vgenerator.startIndex = parseInt(row.getAttribute('data-rowindex'), 10);\n this.vgenerator.currentInfo = extend({}, this.currentInfo);\n this.vgenerator.currentInfo.blockIndexes = this.currentInfo.blockIndexes.slice();\n var includePrevPage = this.vgenerator.includePrevPage = this.currentInfo.blockIndexes[0] % 2 === 0;\n if (includePrevPage) {\n this.vgenerator.startIndex = this.vgenerator.startIndex - this.getBlockSize();\n this.vgenerator.currentInfo.blockIndexes.unshift(this.currentInfo.blockIndexes[0] - 1);\n }\n else {\n this.vgenerator.currentInfo.blockIndexes.push(this.currentInfo.blockIndexes[this.currentInfo.blockIndexes.length - 1] + 1);\n }\n var skip = (this.vgenerator.currentInfo.blockIndexes[0] - 1) * this.getBlockSize();\n var take = this.vgenerator.currentInfo.blockIndexes.length * this.getBlockSize();\n args.query.skip(skip);\n args.query.take(take);\n args.skipPage = true;\n }\n };\n VirtualContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n this.parent[\"\" + action](dataReady, this.onDataReady, this);\n this.parent.addEventListener(events.dataBound, this.dataBound.bind(this));\n this.parent.addEventListener(events.actionBegin, this.actionBegin.bind(this));\n this.parent.addEventListener(events.actionComplete, this.actionComplete.bind(this));\n this.parent.addEventListener(events.rowSelected, this.rowSelected.bind(this));\n this.parent[\"\" + action](refreshVirtualBlock, this.refreshContentRows, this);\n this.parent[\"\" + action](events.refreshVirtualLazyLoadCache, this.refreshVirtualLazyLoadCache, this);\n this.parent[\"\" + action](events.selectVirtualRow, this.selectVirtualRow, this);\n this.parent[\"\" + action](events.virtaulCellFocus, this.virtualCellFocus, this);\n this.parent[\"\" + action](events.virtualScrollEditActionBegin, this.editActionBegin, this);\n this.parent[\"\" + action](events.virtualScrollAddActionBegin, this.addActionBegin, this);\n this.parent[\"\" + action](events.virtualScrollEdit, this.restoreEdit, this);\n this.parent[\"\" + action](events.virtualScrollEditSuccess, this.editSuccess, this);\n this.parent[\"\" + action](events.refreshVirtualCache, this.refreshCache, this);\n this.parent[\"\" + action](events.editReset, this.resetIsedit, this);\n this.parent[\"\" + action](events.getVirtualData, this.getVirtualData, this);\n this.parent[\"\" + action](events.virtualScrollEditCancel, this.editCancel, this);\n this.parent[\"\" + action](events.refreshVirtualMaxPage, this.refreshMaxPage, this);\n this.parent[\"\" + action](events.setVirtualPageQuery, this.setVirtualPageQuery, this);\n this.parent[\"\" + action](events.selectRowOnContextOpen, this.selectRowOnContextOpen, this);\n this.parent[\"\" + action](events.resetVirtualFocus, this.resetVirtualFocus, this);\n this.parent[\"\" + action](events.refreshVirtualEditFormCells, this.refreshCells, this);\n this.parent[\"\" + action](events.scrollToEdit, this.scrollToEdit, this);\n var event = this.actions;\n for (var i = 0; i < event.length; i++) {\n this.parent[\"\" + action](event[parseInt(i.toString(), 10)] + \"-begin\", this.onActionBegin, this);\n }\n var fn = function () {\n _this.observer.observe(function (scrollArgs) { return _this.scrollListener(scrollArgs); }, _this.onEntered());\n var gObj = _this.parent;\n if (gObj.enablePersistence && gObj.scrollPosition) {\n _this.content.scrollTop = gObj.scrollPosition.top;\n var scrollValues = { direction: 'down', sentinel: _this.observer.sentinelInfo.down,\n offset: gObj.scrollPosition, focusElement: gObj.element };\n _this.scrollListener(scrollValues);\n if (gObj.enableColumnVirtualization) {\n _this.content.scrollLeft = gObj.scrollPosition.left;\n }\n }\n _this.parent.off(contentReady, fn);\n };\n this.parent.on(contentReady, fn, this);\n };\n VirtualContentRenderer.prototype.refreshVirtualLazyLoadCache = function (e) {\n var blockIndex = this.currentInfo.blockIndexes;\n if (isNullOrUndefined(this.currentInfo.blockIndexes)) {\n blockIndex = [1, 2];\n }\n var block;\n var index;\n var cache;\n for (var i = 0; i < blockIndex.length; i++) {\n var rows = this.vgenerator.cache[blockIndex[parseInt(i.toString(), 10)]];\n for (var j = 0; j < rows.length; j++) {\n if (rows[parseInt(j.toString(), 10)].uid === e.uid) {\n block = blockIndex[parseInt(i.toString(), 10)];\n index = j;\n cache = rows;\n break;\n }\n }\n }\n if (e.count) {\n this.vgenerator.cache[parseInt(block.toString(), 10)].splice(index + 1, e.count);\n }\n else if (e.rows && e.rows.length) {\n this.vgenerator.cache[parseInt(block.toString(), 10)] = ([].slice.call(cache.slice(0, index + 1)).concat([].slice.call(e.rows))).concat([].slice.call(cache.slice(index + 1, cache.length)));\n }\n this.refreshOffsets();\n };\n VirtualContentRenderer.prototype.scrollToEdit = function (col) {\n var isFrozen = this.parent.isFrozenGrid();\n var allowScroll = true;\n this.validationCheck = true;\n if (this.isAdd && this.content.scrollTop > 0) {\n allowScroll = false;\n var keys = Object.keys(this.offsets);\n this.content.scrollTop = this.parent.editSettings.newRowPosition === 'Top' ? 0 : this.offsets[keys.length - 1];\n }\n var row = this.parent.getRowByIndex(this.editedRowIndex);\n if (!row && !isNullOrUndefined(this.editedRowIndex)) {\n if (!row || !this.isRowInView(row)) {\n var rowIndex = this.parent.getRowHeight();\n var scrollTop = this.editedRowIndex * rowIndex;\n if (!isNullOrUndefined(scrollTop)) {\n allowScroll = false;\n this.content.scrollTop = scrollTop;\n }\n }\n }\n if (col && allowScroll) {\n var offset = this.vgenerator.cOffsets[(col.index - this.parent.getVisibleFrozenColumns()) - 1];\n if (!this.parent.enableColumnVirtualization) {\n var header = this.parent.getHeaderContent().querySelector('.e-headercelldiv[e-mappinguid=\"' + col.uid + '\"]');\n offset = isFrozen ? header.parentElement.offsetLeft\n - this.parent.getFrozenVirtualHeader().offsetWidth\n : header.parentElement.offsetLeft;\n }\n if (isFrozen) {\n this.parent.getMovableVirtualContent().scrollLeft = this.parent.enableRtl ? -Math.abs(offset) : offset;\n }\n else {\n this.content.scrollLeft = this.parent.enableRtl ? -Math.abs(offset) : offset;\n }\n }\n if (col && !allowScroll) {\n this.validationCol = col;\n }\n };\n VirtualContentRenderer.prototype.refreshCells = function (rowObj) {\n rowObj.cells = this.vgenerator.generateCells(rowObj.foreignKeyData);\n };\n VirtualContentRenderer.prototype.resetVirtualFocus = function (e) {\n this.isCancel = e.isCancel;\n };\n /**\n * @param {Object} data - specifies the data\n * @param {Object} data.virtualData -specifies the data\n * @param {boolean} data.isAdd - specifies isAdd\n * @param {boolean} data.isCancel - specifies boolean in cancel\n * @param {boolean} data.isScroll - specifies boolean for scroll\n * @returns {void}\n * @hidden\n */\n VirtualContentRenderer.prototype.getVirtualData = function (data) {\n if (this.isNormaledit) {\n var error = this.parent.element.querySelector('.e-griderror:not([style*=\"display: none\"])');\n var keys = Object.keys(this.virtualData);\n data.isScroll = keys.length !== 0 && this.currentInfo.sentinelInfo && this.currentInfo.sentinelInfo.axis === 'X';\n if (error) {\n return;\n }\n this.virtualData = keys.length ? this.virtualData : data.virtualData;\n this.getVirtualEditedData(this.virtualData);\n data.virtualData = this.virtualData;\n data.isAdd = this.isAdd;\n data.isCancel = this.isCancel;\n }\n };\n VirtualContentRenderer.prototype.selectRowOnContextOpen = function (args) {\n this.isContextMenuOpen = args.isOpen;\n };\n VirtualContentRenderer.prototype.editCancel = function (args) {\n var dataIndex = getEditedDataIndex(this.parent, args.data);\n if (!isNullOrUndefined(dataIndex)) {\n args.data = this.parent.getCurrentViewRecords()[parseInt(dataIndex.toString(), 10)];\n }\n };\n VirtualContentRenderer.prototype.editSuccess = function (args) {\n if (this.isNormaledit) {\n if (!this.isAdd && args.data) {\n this.updateCurrentViewData(args.data);\n }\n this.isAdd = false;\n }\n };\n VirtualContentRenderer.prototype.updateCurrentViewData = function (data) {\n var dataIndex = getEditedDataIndex(this.parent, data);\n if (!isNullOrUndefined(dataIndex)) {\n this.parent.getCurrentViewRecords()[parseInt(dataIndex.toString(), 10)] = data;\n }\n };\n VirtualContentRenderer.prototype.actionBegin = function (args) {\n if (args.requestType !== 'virtualscroll') {\n this.requestType = args.requestType;\n }\n if (!args.cancel) {\n this.parent.notify(events.refreshVirtualFrozenRows, args);\n }\n };\n VirtualContentRenderer.prototype.virtualCellFocus = function (e) {\n // To decide the action (select or scroll), when using arrow keys for cell focus\n var ele = document.activeElement;\n if (!ele.classList.contains(literals.rowCell) && ele instanceof HTMLInputElement) {\n ele = ele.closest('.e-rowcell');\n }\n if (ele && ele.classList.contains(literals.rowCell)\n && e && (e.action === 'upArrow' || e.action === 'downArrow')) {\n var rowIndex = parseInt(ele.parentElement.getAttribute(literals.dataRowIndex), 10);\n if (e && (e.action === 'downArrow' || e.action === 'upArrow')) {\n var scrollEle = this.parent.getContent().firstElementChild;\n if (e.action === 'downArrow') {\n rowIndex += 1;\n }\n else {\n rowIndex -= 1;\n }\n this.rowIndex = rowIndex;\n this.cellIndex = parseInt(ele.getAttribute(literals.dataColIndex), 10);\n var row = this.parent.getRowByIndex(rowIndex);\n var page = this.parent.pageSettings.currentPage;\n var visibleRowCount = Math.floor(scrollEle.offsetHeight / this.parent.getRowHeight()) - 1;\n var emptyRow = false;\n if (isNullOrUndefined(row)) {\n emptyRow = true;\n if ((e.action === 'downArrow' && page === this.maxPage - 1) || (e.action === 'upArrow' && page === 1)) {\n emptyRow = false;\n }\n }\n if (emptyRow || (ensureLastRow(row, this.parent) && e.action === 'downArrow')\n || (ensureFirstRow(row, this.parent.getRowHeight() * 2) && e.action === 'upArrow')) {\n this.activeKey = e.action;\n scrollEle.scrollTop = e.action === 'downArrow' ?\n (rowIndex - visibleRowCount) * this.parent.getRowHeight() : rowIndex * this.parent.getRowHeight();\n }\n else {\n this.activeKey = this.empty;\n }\n if (!this.parent.selectionSettings.checkboxOnly) {\n this.parent.selectRow(rowIndex);\n }\n }\n }\n };\n VirtualContentRenderer.prototype.editActionBegin = function (e) {\n this.editedRowIndex = e.index;\n var rowData = extend({}, this.getRowObjectByIndex(e.index));\n var keys = Object.keys(this.virtualData);\n e.data = keys.length ? this.virtualData : rowData;\n e.isScroll = keys.length !== 0 && this.currentInfo.sentinelInfo && this.currentInfo.sentinelInfo.axis === 'X';\n };\n VirtualContentRenderer.prototype.getEditedRowObject = function () {\n var rowObjects = this.parent.vcRows;\n var editedrow;\n for (var i = 0; i < rowObjects.length; i++) {\n if (rowObjects[parseInt(i.toString(), 10)].index === this.editedRowIndex) {\n editedrow = rowObjects[parseInt(i.toString(), 10)];\n }\n }\n return editedrow;\n };\n VirtualContentRenderer.prototype.refreshCache = function (args) {\n var block = Math.ceil((this.editedRowIndex + 1) / this.getBlockSize());\n var index = this.editedRowIndex - ((block - 1) * this.getBlockSize());\n if (this.parent.groupSettings.columns.length) {\n this.getEditedRowObject().data = args.data;\n }\n else {\n this.vgenerator.cache[parseInt(block.toString(), 10)][parseInt(index.toString(), 10)].data = args.data;\n if (this.vgenerator.movableCache[parseInt(block.toString(), 10)]) {\n this.vgenerator.movableCache[parseInt(block.toString(), 10)][parseInt(index.toString(), 10)].data = args.data;\n }\n if (this.vgenerator.frozenRightCache[parseInt(block.toString(), 10)]) {\n this.vgenerator.frozenRightCache[parseInt(block.toString(), 10)][parseInt(index.toString(), 10)].data = args.data;\n }\n }\n };\n VirtualContentRenderer.prototype.actionComplete = function (args) {\n if (!this.parent.enableVirtualization) {\n return;\n }\n var editRequestTypes = ['delete', 'save', 'cancel'];\n var dataActionRequestTypes = ['sorting', 'filtering', 'grouping', 'refresh', 'searching', 'ungrouping', 'reorder'];\n if (editRequestTypes.some(function (value) { return value === args.requestType; })) {\n this.refreshOffsets();\n if (this.parent.isFrozenGrid()) {\n this.vgenerator.refreshColOffsets();\n this.parent.contentModule.virtualRenderer.virtualEle.setVirtualHeight();\n }\n else {\n this.refreshVirtualElement();\n }\n }\n if (this.isNormaledit && (dataActionRequestTypes.some(function (value) { return value === args.requestType; })\n || editRequestTypes.some(function (value) { return value === args.requestType; }))) {\n this.isCancel = true;\n this.isAdd = false;\n this.editedRowIndex = this.empty;\n this.virtualData = {};\n if (this.parent.editModule) {\n this.parent.editModule.editModule.previousData = undefined;\n }\n }\n if (this.parent.enableColumnVirtualization && args.requestType === 'filterafteropen'\n && this.currentInfo.columnIndexes && this.currentInfo.columnIndexes[0] > 0) {\n this.parent.resetFilterDlgPosition(args.columnName);\n }\n };\n VirtualContentRenderer.prototype.resetIsedit = function () {\n if (this.parent.enableVirtualization && this.isNormaledit) {\n if ((this.parent.editSettings.allowEditing && Object.keys(this.virtualData).length)\n || (this.parent.editSettings.allowAdding && this.isAdd)) {\n this.parent.isEdit = true;\n }\n }\n };\n VirtualContentRenderer.prototype.scrollAfterEdit = function () {\n if (this.parent.editModule && this.parent.editSettings.allowEditing && this.isNormaledit) {\n if (this.parent.element.querySelector('.e-gridform')) {\n var editForm = this.parent.element.querySelector('.' + literals.editedRow);\n var addForm = this.parent.element.querySelector('.' + literals.addedRow);\n if (editForm || addForm) {\n var rowData = editForm ? extend({}, this.getRowObjectByIndex(this.editedRowIndex))\n : extend({}, this.emptyRowData);\n var keys = Object.keys(this.virtualData);\n this.virtualData = keys.length ? this.getVirtualEditedData(this.virtualData) : this.getVirtualEditedData(rowData);\n }\n }\n }\n };\n VirtualContentRenderer.prototype.createEmptyRowdata = function () {\n var _this = this;\n this.parent.columnModel.filter(function (e) {\n _this.emptyRowData[e.field] = _this.empty;\n });\n };\n VirtualContentRenderer.prototype.addActionBegin = function (args) {\n if (this.isNormaledit) {\n if (!Object.keys(this.emptyRowData).length) {\n this.createEmptyRowdata();\n }\n this.isAdd = true;\n var page = this.parent.pageSettings.currentPage;\n if (!this.parent.frozenRows && this.content.scrollTop > 0 && this.parent.editSettings.newRowPosition === 'Top') {\n this.isAdd = true;\n this.onActionBegin();\n args.startEdit = false;\n this.content.scrollTop = 0;\n }\n if (page < this.maxPage - 1 && this.parent.editSettings.newRowPosition === 'Bottom') {\n this.isAdd = true;\n this.parent.setProperties({ pageSettings: { currentPage: this.maxPage - 1 } }, true);\n args.startEdit = false;\n this.content.scrollTop = this.offsets[this.offsetKeys.length];\n }\n }\n };\n /**\n * @param {number} index - specifies the index\n * @returns {Object} returns the object\n * @hidden\n */\n VirtualContentRenderer.prototype.getRowObjectByIndex = function (index) {\n var data = this.getRowCollection(index, false, true);\n return data;\n };\n VirtualContentRenderer.prototype.getBlockSize = function () {\n return this.parent.pageSettings.pageSize >> 1;\n };\n VirtualContentRenderer.prototype.getBlockHeight = function () {\n return this.getBlockSize() * this.parent.getRowHeight();\n };\n VirtualContentRenderer.prototype.isEndBlock = function (index) {\n var totalBlocks = isGroupAdaptive(this.parent) ? this.getGroupedTotalBlocks() : this.getTotalBlocks();\n return index >= totalBlocks || index === totalBlocks - 1;\n };\n VirtualContentRenderer.prototype.getGroupedTotalBlocks = function () {\n var rows = this.parent.vcRows;\n return Math.floor((rows.length / this.getBlockSize()) < 1 ? 1 : rows.length / this.getBlockSize());\n };\n VirtualContentRenderer.prototype.getTotalBlocks = function () {\n return Math.ceil(this.count / this.getBlockSize());\n };\n VirtualContentRenderer.prototype.getColumnOffset = function (block) {\n return this.vgenerator.cOffsets[parseInt(block.toString(), 10)] | 0;\n };\n VirtualContentRenderer.prototype.getModelGenerator = function () {\n return new VirtualRowModelGenerator(this.parent);\n };\n VirtualContentRenderer.prototype.resetScrollPosition = function (action) {\n if (this.actions.some(function (value) { return value === action; })) {\n this.preventEvent = this.content.scrollTop !== 0;\n this.content.scrollTop = 0;\n }\n if (action !== 'virtualscroll') {\n this.isAdd = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n VirtualContentRenderer.prototype.onActionBegin = function (e) {\n //Update property silently..\n this.parent.setProperties({ pageSettings: { currentPage: 1 } }, true);\n };\n VirtualContentRenderer.prototype.getRows = function () {\n return this.vgenerator.getRows();\n };\n VirtualContentRenderer.prototype.getRowByIndex = function (index) {\n var row;\n if (isGroupAdaptive(this.parent)) {\n row = !isNullOrUndefined(index) ? this.parent.getDataRows()[parseInt(index.toString(), 10)] : undefined;\n }\n else if (this.prevInfo) {\n row = this.getRowCollection(index, false);\n }\n return row;\n };\n VirtualContentRenderer.prototype.getMovableVirtualRowByIndex = function (index) {\n return this.getRowCollection(index, true);\n };\n VirtualContentRenderer.prototype.getFrozenRightVirtualRowByIndex = function (index) {\n return this.getRowCollection(index, false, false, true);\n };\n VirtualContentRenderer.prototype.getRowCollection = function (index, isMovable, isRowObject, isFrozenRight) {\n var prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n if (this.parent.pageSettings.pageSize % 2 !== 0) {\n startIdx += Math.floor((startIdx / this.getBlockSize()) / 2);\n }\n var rowCollection = isMovable ? this.parent.getMovableDataRows() : this.parent.getDataRows();\n rowCollection = isFrozenRight ? this.parent.getFrozenRightDataRows() : rowCollection;\n var collection = isRowObject ? this.parent.getCurrentViewRecords() : rowCollection;\n if (isRowObject && this.parent.allowGrouping && this.parent.groupSettings.columns.length) {\n startIdx = parseInt(this.parent.getRows()[0].getAttribute(literals.dataRowIndex), 10);\n collection = collection.filter(function (m) { return isNullOrUndefined(m.items); });\n }\n var selectedRow = collection[index - startIdx];\n if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n if (!isRowObject) {\n selectedRow = index <= this.parent.frozenRows ? rowCollection[parseInt(index.toString(), 10)]\n : rowCollection[(index - startIdx) + this.parent.frozenRows];\n }\n else {\n selectedRow = index <= this.parent.frozenRows ? this.parent.getRowsObject()[parseInt(index.toString(), 10)].data\n : selectedRow;\n }\n }\n return selectedRow;\n };\n VirtualContentRenderer.prototype.getVirtualRowIndex = function (index) {\n var prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n return startIdx + index;\n };\n /**\n * @returns {void}\n * @hidden */\n VirtualContentRenderer.prototype.refreshOffsets = function () {\n var gObj = this.parent;\n var row = 0;\n var bSize = this.getBlockSize();\n var total = isGroupAdaptive(this.parent) ? this.getGroupedTotalBlocks() : this.getTotalBlocks();\n this.prevHeight = this.offsets[parseInt(total.toString(), 10)];\n this.maxBlock = total % 2 === 0 ? total - 2 : total - 1;\n this.offsets = {};\n //Row offset update\n // eslint-disable-next-line prefer-spread\n var blocks = Array.apply(null, Array(total)).map(function () { return ++row; });\n for (var i = 0; i < blocks.length; i++) {\n var tmp = (this.vgenerator.cache[blocks[parseInt(i.toString(), 10)]] || []).length;\n var rem = !isGroupAdaptive(this.parent) ? this.count % bSize : (gObj.vcRows.length % bSize);\n var size = !isGroupAdaptive(this.parent) && blocks[parseInt(i.toString(), 10)] in this.vgenerator.cache ?\n tmp * this.parent.getRowHeight() : rem && blocks[parseInt(i.toString(), 10)] === total ? rem * this.parent.getRowHeight() :\n this.getBlockHeight();\n // let size: number = this.parent.groupSettings.columns.length && block in this.vgenerator.cache ?\n // tmp * getRowHeight() : this.getBlockHeight();\n this.offsets[blocks[parseInt(i.toString(), 10)]] = (this.offsets[blocks[parseInt(i.toString(), 10)] - 1] | 0) + size;\n this.tmpOffsets[blocks[parseInt(i.toString(), 10)]] = this.offsets[blocks[parseInt(i.toString(), 10)] - 1] | 0;\n }\n this.offsetKeys = Object.keys(this.offsets);\n if (isGroupAdaptive(this.parent)) {\n this.parent.vGroupOffsets = this.offsets;\n }\n //Column offset update\n if (this.parent.enableColumnVirtualization) {\n this.vgenerator.refreshColOffsets();\n }\n };\n VirtualContentRenderer.prototype.refreshVirtualElement = function () {\n this.vgenerator.refreshColOffsets();\n this.setVirtualHeight();\n };\n VirtualContentRenderer.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var frozenCols = this.parent.getFrozenColumns();\n var fcntColGrp;\n var mcntColGrp;\n if (frozenCols) {\n fcntColGrp = [].slice.call(this.parent.getFrozenVirtualContent().querySelectorAll('col'));\n mcntColGrp = [].slice.call(this.parent.getMovableVirtualContent().querySelectorAll('col'));\n }\n var rows = [];\n rows = this.getRows();\n var testRow;\n rows.some(function (r) { if (r.isDataRow) {\n testRow = r;\n } return r.isDataRow; });\n var isRefresh = true;\n if (!gObj.groupSettings.columns.length && testRow) {\n isRefresh = false;\n }\n var tr = gObj.getDataRows();\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[parseInt(c.toString(), 10)];\n var idx = gObj.getNormalizedColumnIndex(column.uid);\n var displayVal = column.visible === true ? '' : 'none';\n var colGrp = void 0;\n if (fcntColGrp && mcntColGrp) {\n if (idx >= frozenCols) {\n colGrp = mcntColGrp;\n tr = this.parent.getMovableRows();\n idx = idx - frozenCols;\n }\n else {\n colGrp = fcntColGrp;\n }\n }\n else {\n colGrp = this.getColGroup().children;\n }\n if (idx !== -1 && testRow && idx < testRow.cells.length) {\n setStyleAttribute(colGrp[parseInt(idx.toString(), 10)], { 'display': displayVal });\n }\n if (!isRefresh) {\n var width = void 0;\n if (column.width) {\n if (column.visible) {\n width = this.virtualEle.wrapper.offsetWidth + parseInt(column.width.toString(), 10);\n }\n else {\n width = this.virtualEle.wrapper.offsetWidth - parseInt(column.width.toString(), 10);\n }\n }\n if (width > gObj.width) {\n this.setDisplayNone(tr, idx, displayVal, rows);\n if (this.parent.enableColumnVirtualization) {\n this.virtualEle.setWrapperWidth(width + '');\n }\n this.refreshVirtualElement();\n }\n else {\n isRefresh = true;\n }\n }\n if (!this.parent.invokedFromMedia && column.hideAtMedia) {\n this.parent.updateMediaColumns(column);\n }\n this.parent.invokedFromMedia = false;\n }\n if (isRefresh || frozenCols) {\n this.refreshContentRows({ requestType: 'refresh' });\n }\n else {\n this.parent.notify(events.partialRefresh, { rows: rows, args: { isFrozen: false, rows: rows } });\n }\n };\n VirtualContentRenderer.prototype.selectVirtualRow = function (args) {\n var _this = this;\n args.isAvailable = args.selectedIndex < this.count;\n if (args.isAvailable && !this.isContextMenuOpen && this.activeKey !== 'upArrow'\n && this.activeKey !== 'downArrow' && !this.isSelection && !this.requestTypes.some(function (value) { return value === _this.requestType; })\n && !this.parent.selectionModule.isInteracted) {\n var selectedRow = this.parent.getRowByIndex(args.selectedIndex);\n var rowHeight = this.parent.getRowHeight();\n if (!selectedRow || !this.isRowInView(selectedRow)) {\n this.isSelection = true;\n this.selectedRowIndex = args.selectedIndex;\n var scrollTop = (args.selectedIndex + 1) * rowHeight;\n if (!isNullOrUndefined(scrollTop)) {\n var direction = this.content.scrollTop < scrollTop ? 'down' : 'up';\n this.selectRowIndex = args.selectedIndex;\n this.content.scrollTop = scrollTop;\n this.isSelectionScroll = this.observer.check(direction);\n }\n }\n }\n if (this.parent.isFrozenGrid() && this.requestType) {\n if (this.parent.getTablesCount() === this.frzIdx) {\n this.requestType = this.empty;\n this.frzIdx = 1;\n }\n else {\n this.frzIdx++;\n }\n }\n else {\n this.requestType = this.empty;\n }\n };\n VirtualContentRenderer.prototype.isRowInView = function (row) {\n var top = row.getBoundingClientRect().top;\n var bottom = row.getBoundingClientRect().bottom;\n return (top >= this.content.getBoundingClientRect().top && bottom <= this.content.getBoundingClientRect().bottom);\n };\n return VirtualContentRenderer;\n}(ContentRender));\nexport { VirtualContentRenderer };\n/**\n * @hidden\n */\nvar VirtualHeaderRenderer = /** @class */ (function (_super) {\n __extends(VirtualHeaderRenderer, _super);\n function VirtualHeaderRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.virtualEle = new VirtualElementHandler();\n _this.isMovable = false;\n _this.gen = new VirtualRowModelGenerator(_this.parent);\n _this.parent.on(events.columnVisibilityChanged, _this.setVisible, _this);\n _this.parent.on(refreshVirtualBlock, function (e) { return e.virtualInfo.sentinelInfo.axis === 'X' ? _this.refreshUI() : null; }, _this);\n return _this;\n }\n VirtualHeaderRenderer.prototype.renderTable = function () {\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().querySelector('.' + literals.headerContent)));\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.getPanel().querySelector('.' + literals.headerContent);\n this.virtualEle.content.style.position = 'relative';\n this.virtualEle.renderWrapper();\n this.virtualEle.renderPlaceHolder('absolute');\n };\n VirtualHeaderRenderer.prototype.appendContent = function (table) {\n if (!this.isMovable) {\n this.virtualEle.wrapper.appendChild(table);\n }\n else {\n this.virtualEle.movableWrapper.appendChild(table);\n this.isMovable = false;\n }\n };\n VirtualHeaderRenderer.prototype.refreshUI = function () {\n this.isMovable = this.parent.isFrozenGrid();\n this.setFrozenTable(this.parent.getMovableVirtualContent());\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().querySelector('.' + literals.headerContent)));\n _super.prototype.refreshUI.call(this);\n this.setFrozenTable(this.parent.getFrozenVirtualContent());\n };\n VirtualHeaderRenderer.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var displayVal;\n var idx;\n var needFullRefresh;\n var frozenCols = this.parent.getFrozenColumns();\n var fhdrColGrp;\n var mhdrColGrp;\n if (frozenCols) {\n fhdrColGrp = [].slice.call(this.parent.getFrozenVirtualHeader().querySelectorAll('col'));\n mhdrColGrp = [].slice.call(this.parent.getMovableVirtualHeader().querySelectorAll('col'));\n }\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[parseInt(c.toString(), 10)];\n idx = gObj.getNormalizedColumnIndex(column.uid);\n displayVal = column.visible ? '' : 'none';\n var colGrp = void 0;\n if (fhdrColGrp && mhdrColGrp) {\n if (idx >= frozenCols) {\n colGrp = mhdrColGrp;\n idx = idx - frozenCols;\n }\n else {\n colGrp = fhdrColGrp;\n }\n }\n else {\n colGrp = this.getColGroup().children;\n }\n setStyleAttribute(colGrp[parseInt(idx.toString(), 10)], { 'display': displayVal });\n if (gObj.enableColumnVirtualization && !gObj.groupSettings.columns.length) {\n var tablewidth = void 0;\n if (column.visible) {\n tablewidth = this.virtualEle.wrapper.offsetWidth + parseInt(column.width.toString(), 10);\n }\n else {\n tablewidth = this.virtualEle.wrapper.offsetWidth - parseInt(column.width.toString(), 10);\n }\n if (tablewidth > gObj.width) {\n this.setDisplayNone(column, displayVal);\n this.virtualEle.setWrapperWidth(tablewidth + '');\n this.gen.refreshColOffsets();\n }\n else {\n needFullRefresh = true;\n }\n }\n else {\n needFullRefresh = true;\n }\n if (needFullRefresh && !frozenCols) {\n this.refreshUI();\n }\n }\n if (frozenCols) {\n this.parent.notify(events.columnPositionChanged, {});\n }\n };\n VirtualHeaderRenderer.prototype.setFrozenTable = function (content) {\n if (this.parent.isFrozenGrid() && this.parent.enableColumnVirtualization\n && this.parent.contentModule.isXaxis()) {\n this.parent.contentModule\n .setTable(content.querySelector('.' + literals.table + ':not(.e-masked-table)'));\n }\n };\n VirtualHeaderRenderer.prototype.setDisplayNone = function (col, displayVal) {\n var frozenCols = this.parent.isFrozenGrid();\n var table = this.getTable();\n if (frozenCols && col.getFreezeTableName() === 'movable') {\n table = this.parent.getMovableVirtualHeader().querySelector('.' + literals.table);\n }\n for (var _i = 0, _a = [].slice.apply(table.querySelectorAll('th.e-headercell')); _i < _a.length; _i++) {\n var ele = _a[_i];\n if (ele.querySelector('[e-mappinguid]') &&\n ele.querySelector('[e-mappinguid]').getAttribute('e-mappinguid') === col.uid) {\n setStyleAttribute(ele, { 'display': displayVal });\n if (displayVal === '') {\n removeClass([ele], 'e-hide');\n }\n break;\n }\n }\n };\n return VirtualHeaderRenderer;\n}(HeaderRender));\nexport { VirtualHeaderRenderer };\n/**\n * @hidden\n */\nvar VirtualElementHandler = /** @class */ (function () {\n function VirtualElementHandler() {\n }\n VirtualElementHandler.prototype.renderWrapper = function (height) {\n this.wrapper = createElement('div', { className: 'e-virtualtable', styles: \"min-height:\" + formatUnit(height) });\n this.wrapper.appendChild(this.table);\n this.content.appendChild(this.wrapper);\n };\n VirtualElementHandler.prototype.renderPlaceHolder = function (position) {\n if (position === void 0) { position = 'relative'; }\n this.placeholder = createElement('div', { className: 'e-virtualtrack', styles: \"position:\" + position });\n this.content.appendChild(this.placeholder);\n };\n VirtualElementHandler.prototype.renderFrozenWrapper = function (height) {\n this.wrapper = createElement('div', { className: 'e-virtualtable', styles: \"min-height:\" + formatUnit(height) + \"; display: flex\" });\n this.content.appendChild(this.wrapper);\n };\n VirtualElementHandler.prototype.renderFrozenPlaceHolder = function () {\n this.placeholder = createElement('div', { className: 'e-virtualtrack' });\n this.content.appendChild(this.placeholder);\n };\n VirtualElementHandler.prototype.renderMovableWrapper = function (height) {\n this.movableWrapper = createElement('div', { className: 'e-virtualtable', styles: \"min-height:\" + formatUnit(height) });\n this.movableContent.appendChild(this.movableWrapper);\n };\n VirtualElementHandler.prototype.renderMovablePlaceHolder = function () {\n this.movablePlaceholder = createElement('div', { className: 'e-virtualtrack' });\n this.movableContent.appendChild(this.movablePlaceholder);\n };\n VirtualElementHandler.prototype.adjustTable = function (xValue, yValue) {\n this.wrapper.style.transform = \"translate(\" + xValue + \"px, \" + yValue + \"px)\";\n };\n VirtualElementHandler.prototype.adjustMovableTable = function (xValue, yValue) {\n this.movableWrapper.style.transform = \"translate(\" + xValue + \"px, \" + yValue + \"px)\";\n };\n VirtualElementHandler.prototype.setMovableWrapperWidth = function (width, full) {\n this.movableWrapper.style.width = width ? width + \"px\" : full ? '100%' : '';\n };\n VirtualElementHandler.prototype.setMovableVirtualHeight = function (height, width) {\n this.movablePlaceholder.style.height = height + \"px\";\n this.movablePlaceholder.style.width = width;\n };\n VirtualElementHandler.prototype.setWrapperWidth = function (width, full) {\n this.wrapper.style.width = width ? width + \"px\" : full ? '100%' : '';\n };\n VirtualElementHandler.prototype.setVirtualHeight = function (height, width) {\n this.placeholder.style.height = !isNullOrUndefined(height) ? height + \"px\" : '0px';\n this.placeholder.style.width = width;\n };\n VirtualElementHandler.prototype.setFreezeWrapperWidth = function (wrapper, width, full) {\n wrapper.style.width = width ? width + \"px\" : full ? '100%' : '';\n };\n return VirtualElementHandler;\n}());\nexport { VirtualElementHandler };\n","import { initialLoad } from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { VirtualContentRenderer, VirtualHeaderRenderer } from '../renderer/virtual-content-renderer';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { extend, getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { setComplexFieldID, setValidationRuels, getColumnModelByUid } from '../base/util';\n/**\n * Virtual Scrolling class\n */\nvar VirtualScroll = /** @class */ (function () {\n function VirtualScroll(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualscroll';\n };\n VirtualScroll.prototype.instantiateRenderer = function () {\n this.parent.log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = this.locator.getService('rendererFactory');\n if (!this.parent.isFrozenGrid()) {\n if (this.parent.enableColumnVirtualization) {\n renderer.addRenderer(RenderType.Header, new VirtualHeaderRenderer(this.parent, this.locator));\n }\n renderer.addRenderer(RenderType.Content, new VirtualContentRenderer(this.parent, this.locator));\n }\n this.ensurePageSize();\n };\n VirtualScroll.prototype.ensurePageSize = function () {\n var rowHeight = this.parent.getRowHeight();\n var vHeight = this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height;\n this.blockSize = ~~(vHeight / rowHeight);\n var height = this.blockSize * 2;\n var size = this.parent.pageSettings.pageSize;\n this.parent.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.columnWidthChanged, this.refreshVirtualElement, this);\n this.parent.on(events.createVirtualValidationForm, this.createVirtualValidationForm, this);\n this.parent.on(events.validateVirtualForm, this.virtualEditFormValidation, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(initialLoad, this.instantiateRenderer);\n this.parent.off(events.columnWidthChanged, this.refreshVirtualElement);\n this.parent.off(events.createVirtualValidationForm, this.createVirtualValidationForm);\n this.parent.off(events.validateVirtualForm, this.virtualEditFormValidation);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.getCurrentEditedData = function (prevData) {\n var data = {\n virtualData: extend({}, {}, prevData, true), isAdd: false, isScroll: false, endEdit: true\n };\n this.parent.notify(events.getVirtualData, data);\n return data.virtualData;\n };\n VirtualScroll.prototype.createVirtualValidationForm = function (e) {\n var gObj = this.parent;\n if (gObj.enableVirtualization && gObj.editSettings.mode === 'Normal') {\n var cols = gObj.columns;\n var rowRenderer = new RowRenderer(this.locator, null, this.parent);\n var rowObj = extend({}, {}, gObj.getRowObjectFromUID(e.uid), true);\n gObj.notify(events.refreshVirtualEditFormCells, rowObj);\n var args = e.argsCreator(this.getCurrentEditedData(e.prevData), {}, false);\n args.isCustomFormValidation = true;\n args.row = rowRenderer.render(rowObj, cols);\n e.renderer.update(args);\n var rules = {};\n for (var i = 0; i < cols.length; i++) {\n if (!cols[parseInt(i.toString(), 10)].visible) {\n continue;\n }\n if (cols[parseInt(i.toString(), 10)].validationRules) {\n setValidationRuels(cols[parseInt(i.toString(), 10)], 0, rules, {}, {}, cols.length, true);\n }\n }\n args.form.classList.add('e-virtual-validation');\n gObj.editModule.virtualFormObj = gObj.editModule.createFormObj(args.form, rules);\n }\n };\n VirtualScroll.prototype.virtualEditFormValidation = function (args) {\n var gObj = this.parent;\n var error = gObj.element.querySelector('.e-griderror:not([style*=\"display: none\"])');\n if (gObj.editModule.virtualFormObj) {\n if (error && error.style.display !== 'none') {\n var errorDomRect = error.getBoundingClientRect();\n var forms = gObj.element.querySelectorAll('.e-gridform');\n var form = forms[0];\n var contentLeft = gObj.getContent().getBoundingClientRect().left;\n if (forms.length > 1) {\n form = gObj.getFrozenMode() !== 'Right' ? forms[1] : forms[0];\n contentLeft = gObj.getMovableVirtualContent().getBoundingClientRect().left;\n }\n if (errorDomRect.left < contentLeft || errorDomRect.right > gObj.element.offsetWidth) {\n var tooltip = form.querySelector('.e-tooltip-wrap:not([style*=\"display: none\"])');\n this.scrollToEdit(tooltip, { editIdx: args.editIdx, addIdx: args.addIdx }, true);\n }\n }\n else if (gObj.editModule.virtualFormObj && (!error || error.style.display === 'none')) {\n var existingErrors = gObj.editModule.virtualFormObj.element.querySelectorAll('.e-tooltip-wrap:not([style*=\"display: none\"])');\n for (var i = 0; i < existingErrors.length; i++) {\n remove(existingErrors[parseInt(i.toString(), 10)]);\n }\n this.setEditedDataToValidationForm(gObj.editModule.virtualFormObj.element, this.getCurrentEditedData(args.prevData));\n args.isValid = gObj.editModule.virtualFormObj.validate();\n if (!args.isValid) {\n var tooltip = gObj.editModule.virtualFormObj.element.querySelector('.e-tooltip-wrap:not([style*=\"display: none\"])');\n this.scrollToEdit(tooltip, { editIdx: args.editIdx, addIdx: args.addIdx });\n }\n }\n }\n };\n VirtualScroll.prototype.scrollToEdit = function (tooltip, args, isRenderer) {\n var gObj = this.parent;\n if (tooltip) {\n var cols = gObj.columnModel;\n var field = setComplexFieldID(tooltip.id).split('_')[0];\n var col = gObj.getColumnByField(field);\n var scrollTop = this.parent.getContent().firstElementChild.scrollTop;\n var row = gObj.getRowByIndex(args.editIdx);\n if (isRenderer || !col || (!isNullOrUndefined(args.addIdx) && scrollTop > 0) || (!isNullOrUndefined(args.editIdx) && !row)) {\n var validationCol = void 0;\n for (var i = 0; i < cols.length && !col; i++) {\n if (cols[parseInt(i.toString(), 10)].field === field) {\n validationCol = cols[parseInt(i.toString(), 10)];\n break;\n }\n }\n if (isRenderer) {\n validationCol = col;\n }\n this.parent.notify(events.scrollToEdit, validationCol);\n }\n }\n };\n VirtualScroll.prototype.setEditedDataToValidationForm = function (form, editedData) {\n var inputs = [].slice.call(form.getElementsByClassName('e-field'));\n for (var i = 0, len = inputs.length; i < len; i++) {\n var col = getColumnModelByUid(this.parent, inputs[parseInt(i.toString(), 10)].getAttribute('e-mappinguid'));\n var value = getValue(col.field, editedData);\n value = isNullOrUndefined(value) ? '' : value;\n inputs[parseInt(i.toString(), 10)].value = value;\n }\n };\n VirtualScroll.prototype.refreshVirtualElement = function (args) {\n if (this.parent.enableColumnVirtualization && args.module === 'resize') {\n var renderer = this.locator.getService('rendererFactory');\n renderer.getRenderer(RenderType.Content).refreshVirtualElement();\n }\n };\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n if (!((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent))\n || notifyArgs.virtualInfo.blockIndexes.length === 1) {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[parseInt(r.toString(), 10)].index = (this.visualData).indexOf(rows[parseInt(r.toString(), 10)].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[\"\" + model].currentPage;\n if (clear) {\n this.cache = {};\n this.movableCache = {};\n this.frozenRightCache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[parseInt(currentPage.toString(), 10)] &&\n this.cache[parseInt(currentPage.toString(), 10)].length >\n (this.parent.contentModule).getBlockSize()) {\n delete this.cache[parseInt(currentPage.toString(), 10)];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n this.movableCache = {};\n this.frozenRightCache = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Cell, CellType } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport * as literals from '../base/constant';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('data-rowindex'), 10) === index; })[0];\n };\n VirtualTreeContentRenderer.prototype.getMovableVirtualRowByIndex = function (index) {\n return this.getRowCollection(index, true);\n };\n VirtualTreeContentRenderer.prototype.getFrozenRightVirtualRowByIndex = function (index) {\n return this.getRowCollection(index, false, false, true);\n };\n VirtualTreeContentRenderer.prototype.getRowCollection = function (index, isMovable, isRowObject, isFrozenRight) {\n var startIdx = parseInt(this.parent.getRows()[0].getAttribute(literals.dataRowIndex), 10);\n var rowCollection = isMovable ? this.parent.getMovableDataRows() : this.parent.getDataRows();\n rowCollection = isFrozenRight ? this.parent.getFrozenRightDataRows() : rowCollection;\n var collection = isRowObject ? this.parent.getCurrentViewRecords() : rowCollection;\n var selectedRow = collection[index - startIdx];\n if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n if (!isRowObject) {\n selectedRow = index <= this.parent.frozenRows ? rowCollection[parseInt(index.toString(), 10)]\n : rowCollection[(index - startIdx) + this.parent.frozenRows];\n }\n else {\n selectedRow = index <= this.parent.frozenRows ?\n this.parent.getRowsObject()[parseInt(index.toString(), 10)].data : selectedRow;\n }\n }\n return selectedRow;\n };\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if ((this.recordAdded || args.requestType === 'delete' && this.endIndex > args.count - this.parent.pageSettings.pageSize) && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else if (this.parent.root.editSettings.newRowPosition !== 'Top' && this.parent.root.editModule.selectedIndex !== -1 || this.parent.root.editModule.selectedIndex !== -1) {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n if ((this.endIndex - this.startIndex !== this.parent.pageSettings.pageSize) &&\n (this.totalRecords > this.parent.pageSettings.pageSize) &&\n (this.endIndex === this.totalRecords)) {\n args.startIndex = this.endIndex - this.parent.pageSettings.pageSize;\n args.endIndex = this.endIndex;\n }\n else {\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n }\n };\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[\"\" + action]('data-ready', this.onDataReady, this);\n this.parent[\"\" + action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction(), _this.parent);\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[\"\" + action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[\"\" + action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[\"\" + action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[\"\" + action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[\"\" + action]('edit-reset', this.resetIseditValue, this);\n this.parent[\"\" + action]('get-virtual-data', this.getData, this);\n this.parent[\"\" + action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[\"\" + action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[\"\" + action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[\"\" + action]('virtaul-cell-focus', this.cellFocus, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[\"\" + virtualCellFocus].call(this, e);\n };\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n // To overcome the white space issue in last page when records collapsed\n if (this.parent.isFrozenGrid() && e.count < Object.keys(this.parent.dataSource).length) {\n var width = this.parent.enableColumnVirtualization ?\n this.getColumnOffset(this.parent.columns.length - 1) + 'px' : '100%';\n var height = (this.parent.getRowHeight() * e.count) -\n (this.parent.getRowHeight() * this.parent.pageSettings.pageSize);\n getValue('virtualEle', this).setVirtualHeight(height, width);\n }\n if (!this.parent.enableColumnVirtualization && !this.parent.isFrozenGrid()) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || (this.isDataSourceChanged && (this.startIndex === -1 || this.startIndex === 0 && this['preStartIndex'] === 0))) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (!isNullOrUndefined(this.parent.getRowByIndex(0)) && this.parent.getRows().length && !this[\"\" + initialRowTop]) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[\"\" + initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[\"\" + initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[\"\" + dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[\"\" + rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[\"\" + containerRect])) {\n this.observer[\"\" + containerRect] = this.observers[\"\" + containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[\"\" + selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[parseInt(i.toString(), 10)]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n this['editedRowIndex'] = e.index;\n var selector = '.e-row[data-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[parseInt(index.toString(), 10)];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = addArgs.dataRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('data-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('data-rowindex') : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[\"\" + isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[\"\" + addAction].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[\"\" + restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[\"\" + isAdd]) {\n _super.prototype[\"\" + resetIsEdit].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[\"\" + isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[\"\" + editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[\"\" + selectRowOnContextOpen].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[\"\" + isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.editModule.addRecord(null, this.parent.root.editModule.selectedIndex);\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[\"\" + getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, dataRowIndex: this.dataRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.dataRowIndex = this.parent.root.editModule.selectedIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[\"\" + actionComplete].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[\"\" + directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[\"\" + preventEvent] && !_this.parent.enableVirtualMaskRow) {\n _this.parent.showSpinner();\n }\n if (_this.parent.enableVirtualMaskRow && !_this[\"\" + preventEvent]) {\n setTimeout(function () {\n _this.parent.showMaskRow(current.axis);\n _this.parent.notify('showGanttShimmer', { requestType: 'showShimmer' });\n }, 0);\n }\n var height = _this.content.getBoundingClientRect().height;\n var top_1 = _this.prevInfo.offsets ? _this.prevInfo.offsets.top : null;\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n var y = _this.getTranslateY(e.top, height, xAxis && top_1 === e.top ? _this.prevInfo : undefined, true);\n if (!_this.parent.isFrozenGrid() || _this.parent.enableVirtualMaskRow) {\n if (_this.parent.enableVirtualMaskRow) {\n var upScroll = (e.top - _this.translateY) < 0;\n y = (Math.round(_this.translateY) > y && !upScroll) ? Math.round(_this.translateY) : y;\n _this.virtualEle.adjustTable(x, y);\n }\n else {\n _this.virtualEle.adjustTable(x, _this.translateY);\n }\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n this['scrollAfterEdit']();\n var info = scrollArgs.sentinel;\n var rowHeight = this.parent.getRowHeight();\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * rowHeight;\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) + rowHeight >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n var currentViewData = this.parent.currentViewData;\n var indexValue = 'index';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? parseInt(this.parent.height.toString(), 10) :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / rowHeight)\n + Math.ceil(vHeight / rowHeight))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[\"\" + selectedRowIndex]) && this[\"\" + selectedRowIndex] !== -1 && index !== this[\"\" + selectedRowIndex]) {\n index = this[\"\" + selectedRowIndex];\n }\n this.startIndex = index;\n this.endIndex = index + this.parent.pageSettings.pageSize;\n if (this.endIndex > this.totalRecords) {\n var lastInx = this.totalRecords - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n if (currentViewData.length && (currentViewData[0][\"\" + indexValue] >= this.parent.pageSettings.pageSize / 2) &&\n ((currentViewData[0][\"\" + indexValue] - this.startIndex) < (this.parent.pageSettings.pageSize / 2)) && this.parent.selectionModule.isRowSelected) {\n this.startIndex = currentViewData[0][\"\" + indexValue] - (this.parent.pageSettings.pageSize / 2);\n this.endIndex = this.startIndex + this.parent.pageSettings.pageSize;\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / rowHeight);\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[parseInt(rowPt.toString(), 10)]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[parseInt(rowPt.toString(), 10)])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[parseInt(rowPt.toString(), 10)]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('data-rowindex');\n }\n if (firsttdinx === 0) {\n scrollArgs.offset.top = content.scrollTop;\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - rowHeight * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n else {\n this.translateY = (scrollArgs.offset.top - (outBuffer * rowHeight) > 0) ?\n scrollArgs.offset.top - (outBuffer * rowHeight) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / rowHeight);\n var isLastBlock = (this[\"\" + selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[\"\" + selectedRowIndex]) && this[\"\" + selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[\"\" + selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[\"\" + selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock || isNullOrUndefined(this['' + selectedRowIndex]) ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if ((nextSetResIndex + this.parent.pageSettings.pageSize) > this.totalRecords && (this.endIndex - this.startIndex) <\n (this.parent.pageSettings.pageSize / 2) && (this.endIndex - nextSetResIndex) < (this.parent.pageSettings.pageSize / 2)) {\n this.startIndex = lastIndex - (this.parent.pageSettings.pageSize / 2);\n }\n if (currentViewData.length && this.startIndex > currentViewData[0][\"\" + indexValue] &&\n ((this.startIndex - currentViewData[0][\"\" + indexValue]) < (this.parent.pageSettings.pageSize / 2)) && this.parent.selectionModule.isRowSelected) {\n this.startIndex = currentViewData[0][\"\" + indexValue] + (this.parent.pageSettings.pageSize / 2);\n }\n if (scrollArgs.offset.top > (rowHeight * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n if (this.totalRecords === this.endIndex) {\n this.translateY = (this.totalRecords * rowHeight) - ((this.endIndex - this.startIndex) * rowHeight);\n }\n else {\n if (this.parent.allowRowDragAndDrop) {\n this.translateY = scrollArgs.offset.top - rowHeight * 2;\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (rowHeight * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left') ||\n ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') && (downScroll || upScroll) || isCountRequired(this.parent))) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n this.requestType = 'virtualscroll';\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n if (this.parent.enableVirtualMaskRow) {\n this.parent.showMaskRow(info.axis);\n this.parent.addShimmerEffect();\n this.parent.notify('showGanttShimmer', { requestType: 'showShimmer' });\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n else {\n if (this.parent.enableVirtualMaskRow) {\n this.parent.removeMaskRow();\n this.parent.notify('removeGanttShimmer', { requestType: 'hideShimmer' });\n }\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n var isFrozen = this.parent.isFrozenGrid();\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent) || this.parent.isFrozenGrid()) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n if (isFrozen && ((isNullOrUndefined(this.requestType) && getValue('requestTypes', this).indexOf('isFrozen') === -1) ||\n (this.parent.enableVirtualMaskRow && this.requestType === 'virtualscroll'))) {\n getValue('requestTypes', this).push('isFrozen');\n this.requestType = 'isFrozen';\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n if (getValue('requestTypes', this).indexOf('isFrozen') !== -1) {\n getValue('requestTypes', this).splice(getValue('requestTypes', this).indexOf('isFrozen'), 1);\n this.requestType = this.requestType === 'isFrozen' ? undefined : this.requestType;\n }\n if (isFrozen && (!this.isExpandCollapse || this.translateY === 0)) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(0, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[\"\" + replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[\"\" + focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[\"\" + isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.dataRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[\"\" + isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[\"\" + restoreAdd].call(this);\n _super.prototype[\"\" + ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback, instance) {\n var containerRect = 'containerRect';\n _super.prototype[\"\" + containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback, instance), this);\n if (getValue('options', this).movableContainer) {\n var movableContainerRect = 'movableContainerRect';\n _super.prototype[\"\" + movableContainerRect] = getValue('options', this).movableContainer.getBoundingClientRect();\n EventHandler.add(getValue('options', this).movableContainer, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback, instance), this);\n }\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback, instance) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[\"\" + options].prevTop = this[\"\" + options].prevLeft = 0;\n return function (e) {\n var top = _this[\"\" + options].movableContainer ? _this[\"\" + options].container.scrollTop : e.target.scrollTop;\n var left = _this[\"\" + options].movableContainer ? _this[\"\" + options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[\"\" + options].prevTop < top ? 'down' : 'up';\n direction = _this[\"\" + options].prevLeft === left ? direction : _this[\"\" + options].prevLeft < left ? 'right' : 'left';\n _this[\"\" + options].prevTop = top;\n _this[\"\" + options].prevLeft = left;\n var current = _this.sentinelInfo[\"\" + direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[\"\" + options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var containerRect = 'containerRect';\n _this[\"\" + containerRect] = _this[\"\" + options].container.getBoundingClientRect();\n var check = _this.check(direction);\n if (current.entered && (current.axis === 'X' || instance.enableVirtualMaskRow)) {\n if (_this[\"\" + movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[\"\" + movableEle], current, direction, { top: top, left: left }, _this[\"\" + fromWheel], check);\n }\n else {\n onEnterCallback(_this[\"\" + element], current, direction, { top: top, left: left }, _this[\"\" + fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced50;\n if (current.axis === 'X') {\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n if ((instance.dataSource instanceof DataManager && instance.dataSource.dataSource.url !== undefined\n && !instance.dataSource.dataSource.offline && instance.dataSource.dataSource.url !== '') || isCountRequired(instance)\n || instance.enableVirtualMaskRow) {\n fn = instance.enableVirtualMaskRow ? debounced100 : fn;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n }\n _this[\"\" + fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__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 (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer, getTransformValues } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count, requestType: pageingDetails.actionArgs.requestType };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || requestType === 'searching' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n if ((requestType === 'save' && (pageingDetails.actionArgs.index >= (counts.count - this.parent.grid.pageSettings.pageSize)) || (requestType === 'refresh' && this.parent['isGantt'] && this.parent['isAddedFromGantt']) && (counts.count === this.prevendIndex + 1))) {\n startIndex = counts.startIndex + (counts.count - counts.endIndex);\n endIndex = counts.count;\n this.parent['isAddedFromGantt'] = false;\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n var virtualWrapperElement = this.parent.grid.contentModule.virtualEle.wrapper;\n var translateY = getTransformValues(virtualWrapperElement).height;\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length) && translateY === 0) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else if (!this.parent['isExpandAll']) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n startIndex = startIndex < 0 ? 0 : startIndex;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (!parentGrid.isFrozenGrid()) {\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n //renderer.addRenderer(RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this)));\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parseInt(parentGrid.height.toString(), 10) :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","import { remove, extend, isNullOrUndefined, createElement, getValue, setValue, closest, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { Grid, Edit, Toolbar as GridToolbar, Page, getObject } from '@syncfusion/ej2-grids';\nimport { ForeignKey, getActualProperties } from '@syncfusion/ej2-grids';\nimport { RichTextEditor, Toolbar as RTEToolbar, Link, HtmlEditor, QuickToolbar, Count } from '@syncfusion/ej2-richtexteditor';\nimport { TextBox, NumericTextBox, MaskedTextBox, FormValidator } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { isScheduledTask } from '../base/utils';\nimport { TreeGrid, Selection, Filter, Edit as TreeGridEdit, VirtualScroll } from '@syncfusion/ej2-treegrid';\nimport { getUid } from '../base/utils';\n/**\n *\n * @hidden\n */\nvar DialogEdit = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {Gantt} parent .\n * @returns {void} .\n */\n function DialogEdit(parent) {\n /**\n * @private\n */\n this.updatedEditFields = null;\n this.updatedAddFields = null;\n this.addedRecord = null;\n this.dialogEditValidationFlag = false;\n this.ganttResources = [];\n this.isValidData = true;\n /**\n * @private\n */\n this.previousResource = [];\n /**\n * @private\n */\n this.isResourceUpdate = false;\n this.parent = parent;\n this.localeObj = this.parent.localeObj;\n this.beforeOpenArgs = { cancel: false };\n this.types = this.getPredecessorType();\n this.rowData = {};\n this.editedRecord = {};\n this.inputs = {\n booleanedit: CheckBox,\n dropdownedit: DropDownList,\n datepickeredit: DatePicker,\n datetimepickeredit: DateTimePicker,\n maskededit: MaskedTextBox,\n numericedit: NumericTextBox,\n stringedit: TextBox,\n defaultedit: TextBox\n };\n this.processDialogFields();\n this.wireEvents();\n }\n DialogEdit.prototype.wireEvents = function () {\n this.parent.on('chartDblClick', this.dblClickHandler, this);\n };\n DialogEdit.prototype.dblClickHandler = function (e) {\n var ganttData = this.parent.ganttChartModule.getRecordByTarget(e);\n if (!isNullOrUndefined(ganttData) && this.parent.editModule && this.parent.editSettings.allowEditing) {\n this.openEditDialog(ganttData);\n }\n };\n /**\n * Method to validate add and edit dialog fields property.\n *\n * @returns {void} .\n * @private\n */\n DialogEdit.prototype.processDialogFields = function () {\n if (isNullOrUndefined(this.parent.editDialogFields) ||\n this.parent.editDialogFields && this.parent.editDialogFields.length === 0) {\n this.updatedEditFields = this.getDefaultDialogFields();\n this.updatedEditFields = this.validateDialogFields(this.updatedEditFields);\n }\n else {\n this.updatedEditFields = this.validateDialogFields(this.parent.editDialogFields);\n }\n if (isNullOrUndefined(this.parent.addDialogFields) ||\n this.parent.addDialogFields && this.parent.addDialogFields.length === 0) {\n this.updatedAddFields = this.getDefaultDialogFields();\n this.updatedAddFields = this.validateDialogFields(this.updatedAddFields);\n }\n else {\n this.updatedAddFields = this.validateDialogFields(this.parent.addDialogFields);\n }\n };\n DialogEdit.prototype.validateDialogFields = function (dialogFields) {\n var newDialogFields = [];\n var emptyCustomColumn = 0;\n for (var i = 0; i < dialogFields.length; i++) {\n var fieldItem = getActualProperties(dialogFields[i]);\n if (fieldItem.type === 'General' && (isNullOrUndefined(fieldItem.fields) || fieldItem.fields.length === 0)) {\n fieldItem.fields = this.getGeneralColumnFields();\n }\n if (fieldItem.type === 'Dependency' && isNullOrUndefined(this.parent.taskFields.dependency)\n || fieldItem.type === 'Resources' && isNullOrUndefined(this.parent.taskFields.resourceInfo)\n || fieldItem.type === 'Notes' && isNullOrUndefined(this.parent.taskFields.notes)) {\n continue;\n }\n if (fieldItem.type === 'Custom' && (isNullOrUndefined(fieldItem.fields) || fieldItem.fields.length === 0)) {\n emptyCustomColumn += 1;\n fieldItem.fields = this.getCustomColumnFields();\n }\n if (emptyCustomColumn > 1) {\n continue;\n }\n newDialogFields.push(fieldItem);\n }\n return newDialogFields;\n };\n /**\n * Method to get general column fields\n *\n * @returns {string[]} .\n */\n DialogEdit.prototype.getGeneralColumnFields = function () {\n var fields = [];\n for (var _i = 0, _a = Object.keys(this.parent.columnMapping); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'dependency' || key === 'resourceInfo' || key === 'notes') {\n continue;\n }\n fields.push(this.parent.columnMapping[key]);\n }\n return fields;\n };\n /**\n * Method to get custom column fields\n *\n * @returns {void} .\n */\n DialogEdit.prototype.getCustomColumnFields = function () {\n var fields = [];\n for (var i = 0; i < this.parent.customColumns.length; i++) {\n fields.push(this.parent.customColumns[i]);\n }\n return fields;\n };\n /**\n * Get default dialog fields when fields are not defined for add and edit dialogs\n *\n * @returns {AddDialogFieldSettings} .\n */\n DialogEdit.prototype.getDefaultDialogFields = function () {\n var dialogFields = [];\n var fieldItem = {};\n var taskFields = this.parent.taskFields;\n var columnMapping = this.parent.columnMapping;\n if (Object.keys(columnMapping).length !== 0) {\n fieldItem.type = 'General';\n dialogFields.push(fieldItem);\n }\n if (!isNullOrUndefined(getValue('dependency', columnMapping))) {\n fieldItem = {};\n if (this.parent.columnByField[columnMapping.dependency.valueOf()].visible !== false) {\n fieldItem.type = 'Dependency';\n }\n dialogFields.push(fieldItem);\n }\n if (!isNullOrUndefined(getValue('resourceInfo', columnMapping))) {\n fieldItem = {};\n if (this.parent.columnByField[columnMapping.resourceInfo.valueOf()].visible !== false) {\n fieldItem.type = 'Resources';\n }\n dialogFields.push(fieldItem);\n }\n if (!isNullOrUndefined(getValue('notes', columnMapping))) {\n fieldItem = {};\n if (this.parent.columnByField[columnMapping.notes.valueOf()].visible !== false) {\n fieldItem.type = 'Notes';\n }\n dialogFields.push(fieldItem);\n }\n if (!isNullOrUndefined(getValue('segments', taskFields))) {\n fieldItem = {};\n fieldItem.type = 'Segments';\n dialogFields.push(fieldItem);\n }\n if (this.parent.customColumns.length > 0) {\n fieldItem = {};\n fieldItem.type = 'Custom';\n dialogFields.push(fieldItem);\n }\n return dialogFields;\n };\n /**\n * @returns {void} .\n * @private\n */\n DialogEdit.prototype.openAddDialog = function () {\n this.isEdit = false;\n this.editedRecord = this.composeAddRecord();\n this.createDialog();\n };\n /**\n *\n * @returns {Date} .\n * @private\n */\n DialogEdit.prototype.getMinimumStartDate = function () {\n var minDate = DataUtil.aggregates.min(this.parent.flatData, 'ganttProperties.startDate');\n if (!isNullOrUndefined(minDate)) {\n minDate = new Date(minDate.getTime());\n }\n else {\n minDate = new Date(this.parent.timelineModule.timelineStartDate.getTime());\n }\n minDate = this.parent.dateValidationModule.checkStartDate(minDate);\n return new Date(minDate.getTime());\n };\n /**\n * @returns {IGanttData} .\n * @private\n */\n DialogEdit.prototype.composeAddRecord = function () {\n var tempData = {};\n tempData.ganttProperties = {};\n var columns = this.parent.ganttColumns;\n var taskSettings = this.parent.taskFields;\n var id = this.parent.editModule.getNewTaskId();\n for (var i = 0; i < columns.length; i++) {\n var field = columns[i].field;\n if (field === taskSettings.id) {\n tempData[field] = id;\n tempData.ganttProperties.rowUniqueID = tempData[field];\n }\n else if (columns[i].field === taskSettings.startDate) {\n if (isNullOrUndefined(tempData[taskSettings.endDate])) {\n tempData[field] = this.getMinimumStartDate();\n }\n else {\n tempData[field] = new Date(tempData[taskSettings.endDate]);\n }\n if (this.parent.timezone) {\n tempData[field] = this.parent.dateValidationModule.remove(tempData[field], this.parent.timezone);\n }\n tempData.ganttProperties.startDate = new Date(tempData[field]);\n }\n else if (columns[i].field === taskSettings.endDate) {\n if (isNullOrUndefined(tempData[taskSettings.startDate])) {\n tempData[field] = this.getMinimumStartDate();\n }\n else {\n tempData[field] = new Date(tempData[taskSettings.startDate]);\n }\n if (this.parent.timezone) {\n tempData[field] = this.parent.dateValidationModule.remove(tempData[field], this.parent.timezone);\n }\n tempData.ganttProperties.endDate = new Date(tempData[field]);\n }\n else if (columns[i].field === taskSettings.duration) {\n tempData[field] = 1;\n tempData.ganttProperties.duration = tempData[field];\n tempData.ganttProperties.durationUnit = this.parent.durationUnit.toLocaleLowerCase();\n }\n else if (columns[i].field === taskSettings.name) {\n tempData[field] = this.localeObj.getConstant('addDialogTitle') + ' ' + id;\n tempData.ganttProperties.taskName = tempData[field];\n }\n else if (columns[i].field === taskSettings.progress) {\n tempData[field] = 0;\n tempData.ganttProperties.progress = tempData[field];\n }\n else if (columns[i].field === taskSettings.work) {\n tempData[field] = 0;\n tempData.ganttProperties.work = tempData[field];\n }\n else if (columns[i].field === taskSettings.type) {\n tempData[field] = this.parent.taskType;\n tempData.ganttProperties.taskType = tempData[field];\n }\n else {\n tempData[this.parent.ganttColumns[i].field] = '';\n }\n }\n tempData.ganttProperties.isAutoSchedule = (this.parent.taskMode === 'Auto') ? true :\n (this.parent.taskMode === 'Manual') ? false :\n tempData[taskSettings.manual] === true ? false : true;\n return tempData;\n };\n /**\n * @returns {void} .\n * @private\n */\n DialogEdit.prototype.openToolbarEditDialog = function () {\n var gObj = this.parent;\n if (gObj.editModule && gObj.editSettings.allowEditing) {\n if (this.parent.ganttChartModule.focusedRowIndex > -1 && gObj.selectionModule) {\n gObj.selectionModule.selectRow(this.parent.ganttChartModule.focusedRowIndex, false, false);\n }\n var selectedRowId = gObj.selectionModule ?\n (gObj.selectionSettings.mode === 'Row' || gObj.selectionSettings.mode === 'Both') &&\n gObj.selectionModule.selectedRowIndexes.length === 1 ?\n gObj.updatedRecords[gObj.selectionModule.selectedRowIndexes[0]].ganttProperties.rowUniqueID :\n gObj.selectionSettings.mode === 'Cell' &&\n gObj.selectionModule.getSelectedRowCellIndexes().length === 1 ?\n gObj.updatedRecords[gObj.selectionModule.getSelectedRowCellIndexes()[0].rowIndex].ganttProperties.rowUniqueID :\n null : null;\n if (!isNullOrUndefined(selectedRowId)) {\n this.openEditDialog(selectedRowId);\n }\n }\n };\n /**\n * @param { number | string | object} taskId .\n * @returns {void} .\n * @private\n */\n DialogEdit.prototype.openEditDialog = function (taskId) {\n var ganttObj = this.parent;\n if (!isNullOrUndefined(taskId)) {\n if (!isNullOrUndefined(taskId['ganttProperties'])) {\n if (typeof taskId['ganttProperties']['taskId'] === 'string') {\n this.numericOrString = 'stringedit';\n }\n else {\n this.numericOrString = 'numericedit';\n }\n }\n if (isNullOrUndefined(taskId['ganttProperties']) && !isNullOrUndefined(taskId)) {\n if (isNaN(Number(taskId)) || this.parent.columnByField[this.parent.taskFields.id].editType === \"stringedit\") {\n this.numericOrString = 'stringedit';\n }\n else {\n this.numericOrString = 'numericedit';\n }\n }\n }\n if (typeof taskId === 'object' && !isNullOrUndefined(taskId)) {\n this.rowIndex = this.parent.currentViewData.indexOf(taskId);\n if (this.rowIndex > -1) {\n this.rowData = taskId;\n }\n }\n else if (!isNullOrUndefined(taskId)) {\n this.rowIndex = ganttObj.ids.indexOf(taskId.toString());\n if (this.rowIndex > -1) {\n this.rowData = ganttObj.flatData[this.rowIndex];\n }\n }\n else if (ganttObj.selectedRowIndex > -1) {\n this.rowData = ganttObj.currentViewData[ganttObj.selectedRowIndex];\n this.rowIndex = ganttObj.selectedRowIndex;\n }\n this.isEdit = true;\n if (this.parent.viewType === 'ResourceView' && this.rowData.level === 0) {\n return;\n }\n if (Object.keys(this.rowData).length !== 0) {\n this.editedRecord = extend({}, {}, this.rowData, true);\n this.createDialog();\n }\n };\n DialogEdit.prototype.createDialog = function () {\n var _this = this;\n var ganttObj = this.parent;\n var dialogModel = {};\n this.beforeOpenArgs.dialogModel = dialogModel;\n this.beforeOpenArgs.rowData = this.editedRecord;\n this.beforeOpenArgs.rowIndex = this.rowIndex;\n var dialogMaxWidth = this.parent.isAdaptive ? '' : '600px';\n var dialog = this.parent.createElement('div', { id: ganttObj.element.id + '_dialog', styles: 'max-width:' + dialogMaxWidth });\n dialog.classList.add('e-gantt-dialog');\n ganttObj.element.appendChild(dialog);\n dialogModel.animationSettings = { effect: 'None' };\n dialogModel.header = this.localeObj.getConstant(this.isEdit ? 'editDialogTitle' : 'addDialogTitle');\n dialogModel.isModal = true;\n dialogModel.enableRtl = this.parent.enableRtl;\n dialogModel.allowDragging = this.parent.isAdaptive ? false : true;\n dialogModel.showCloseIcon = true;\n var position = this.parent.isAdaptive ? { X: 'top', Y: 'left' } : { X: 'center', Y: 'center' };\n dialogModel.position = position;\n //dialogModel.width = '750px';\n dialogModel.height = this.parent.isAdaptive ? '100%' : 'auto';\n dialogModel.target = document.body;\n dialogModel.close = this.dialogClose.bind(this);\n dialogModel.closeOnEscape = true;\n dialogModel.beforeClose = function (args) {\n if (args.closedBy === \"escape\") {\n if (args.event.name === \"key-pressed\" && args.event.target.nodeName === 'INPUT') {\n args.cancel = true;\n }\n }\n };\n dialogModel.open = function (args) {\n var dialogElement = getValue('element', args);\n var generalTabElement = dialogElement.querySelector('#' + _this.parent.element.id + 'GeneralTabContainer');\n if (generalTabElement && generalTabElement.scrollHeight > generalTabElement.offsetHeight) {\n generalTabElement.classList.add('e-scroll');\n }\n if (_this.tabObj.selectedItem === 0) {\n _this.tabObj.select(0);\n }\n if (_this.parent.isAdaptive) {\n dialogElement.style.maxHeight = 'none';\n }\n if (_this.parent.focusModule) {\n _this.parent.focusModule.setActiveElement(dialogElement);\n }\n };\n dialogModel.locale = this.parent.locale;\n dialogModel.buttons = [{\n buttonModel: {\n content: this.localeObj.getConstant('saveButton'), cssClass: 'e-primary'\n },\n click: this.buttonClick.bind(this)\n }, {\n buttonModel: { cssClass: 'e-flat', content: this.localeObj.getConstant('cancel') },\n click: this.buttonClick.bind(this)\n }];\n this.createTab(dialogModel, dialog);\n };\n DialogEdit.prototype.buttonClick = function (e) {\n var target = e.target;\n target.style.pointerEvents = 'none';\n if ((this.localeObj.getConstant('cancel')).toLowerCase() === e.target.innerText.trim().toLowerCase()) {\n if (this.dialog && !this.dialogObj.isDestroyed) {\n this.dialogObj.hide();\n this.dialogClose();\n }\n }\n else {\n this.initiateDialogSave();\n target.style.pointerEvents = 'auto';\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n DialogEdit.prototype.dialogClose = function () {\n if (this.dialog) {\n this.resetValues();\n }\n if (!isNullOrUndefined(this.parent.focusModule) &&\n !isNullOrUndefined(this.parent.focusModule.getActiveElement(true))) {\n this.parent.focusModule.getActiveElement(true).focus();\n }\n };\n DialogEdit.prototype.resetValues = function () {\n this.isEdit = false;\n this.isAddNewResource = false;\n this.editedRecord = {};\n this.rowData = {};\n this.rowIndex = -1;\n this.addedRecord = null;\n this.ganttResources = [];\n this.dialogEditValidationFlag = false;\n if (this.dialog && !this.dialogObj.isDestroyed) {\n this.destroyDialogInnerElements();\n this.dialogObj.destroy();\n remove(this.dialog);\n }\n };\n DialogEdit.prototype.destroyDialogInnerElements = function () {\n var ganttObj = this.parent;\n var tabModel = this.beforeOpenArgs.tabModel;\n var items = tabModel.items;\n for (var i = 0; i < items.length; i++) {\n var element = items[i].content;\n var id = element.id;\n if (!isNullOrUndefined(id) || id !== '') {\n id = id.replace(ganttObj.element.id, '');\n id = id.replace('TabContainer', '');\n if (id === 'General') {\n this.destroyCustomField(element);\n }\n else if (id === 'Dependency') {\n var gridObj = element.ej2_instances[0];\n gridObj.destroy();\n }\n else if (id === 'Notes') {\n var rte = element.ej2_instances[0];\n rte.destroy();\n }\n else if (id === 'Resources') {\n var treeGridObj = element.ej2_instances[0];\n treeGridObj.destroy();\n }\n else if (id.indexOf('Custom') !== -1) {\n this.destroyCustomField(element);\n }\n }\n }\n };\n DialogEdit.prototype.destroyCustomField = function (element) {\n var childNodes = element.childNodes;\n var ganttObj = this.parent;\n for (var i = 0; i < childNodes.length; i++) {\n var div = childNodes[i];\n var inputElement = div.querySelector('input[id^=\"' + ganttObj.element.id + '\"]');\n if (inputElement) {\n var fieldName = inputElement.id.replace(ganttObj.element.id, '');\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var controlObj = div.querySelector('#' + ganttObj.element.id + fieldName).ej2_instances[0];\n if (!isNullOrUndefined(controlObj)) {\n var column = ganttObj.columnByField[fieldName];\n if (!isNullOrUndefined(column.edit) && isNullOrUndefined(column.edit.params)) {\n var destroy = column.edit.destroy;\n if (typeof destroy === 'string') {\n destroy = getObject(destroy, window);\n destroy();\n }\n else {\n column.edit.destroy();\n }\n }\n else {\n controlObj.destroy();\n }\n }\n }\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n DialogEdit.prototype.destroy = function () {\n this.resetValues();\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('chartDblClick', this.dblClickHandler);\n this.parent.editModule.dialogModule = undefined;\n };\n /**\n * Method to get current edit dialog fields value\n *\n * @returns {AddDialogFieldSettings} .\n */\n DialogEdit.prototype.getEditFields = function () {\n if (this.isEdit) {\n return this.updatedEditFields;\n }\n else {\n return this.updatedAddFields;\n }\n };\n DialogEdit.prototype.createTab = function (dialogModel, dialog) {\n var _this = this;\n var ganttObj = this.parent;\n var tabModel = {};\n var tabItems = [];\n var dialogSettings = this.getEditFields();\n var tabElement;\n var tasks = ganttObj.taskFields;\n var length = dialogSettings.length;\n tabModel.items = tabItems;\n tabModel.locale = this.parent.locale;\n tabModel.enableRtl = this.parent.enableRtl;\n this.beforeOpenArgs.tabModel = tabModel;\n var count = 0;\n var index = 0;\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n var dialogField = dialogSettings[i];\n var tabItem = {};\n if (dialogField.type === 'General') {\n if (Object.keys(ganttObj.columnMapping).length === 0) {\n continue;\n }\n if (isNullOrUndefined(dialogField.headerText)) {\n dialogField.headerText = this.localeObj.getConstant('generalTab');\n }\n tabItem.content = 'General';\n this.beforeOpenArgs[tabItem.content] = this.getFieldsModel(dialogField.fields);\n }\n else if (dialogField.type === 'Segments') {\n if (isNullOrUndefined(tasks.segments)) {\n continue;\n }\n if (isNullOrUndefined(dialogField.headerText)) {\n dialogField.headerText = this.localeObj.getConstant('segments');\n }\n tabItem.content = 'Segments';\n this.beforeOpenArgs[tabItem.content] = this.getSegmentsModel(dialogField.fields);\n }\n else if (dialogField.type === 'Dependency') {\n if (isNullOrUndefined(tasks.dependency)) {\n continue;\n }\n if (isNullOrUndefined(dialogField.headerText)) {\n dialogField.headerText = this.localeObj.getConstant('dependency');\n }\n tabItem.content = 'Dependency';\n this.beforeOpenArgs[tabItem.content] = this.getPredecessorModel(dialogField.fields);\n }\n else if (dialogField.type === 'Resources') {\n if (isNullOrUndefined(tasks.resourceInfo)) {\n continue;\n }\n if (isNullOrUndefined(dialogField.headerText)) {\n dialogField.headerText = this.localeObj.getConstant('resourceName');\n }\n tabItem.content = 'Resources';\n this.beforeOpenArgs[tabItem.content] = this.getResourcesModel(dialogField.fields);\n }\n else if (dialogField.type === 'Notes') {\n if (isNullOrUndefined(tasks.notes)) {\n continue;\n }\n if (isNullOrUndefined(dialogField.headerText)) {\n dialogField.headerText = this.localeObj.getConstant('notes');\n }\n tabItem.content = 'Notes';\n this.beforeOpenArgs[tabItem.content] = this.getNotesModel(dialogField.fields);\n }\n else {\n if (isNullOrUndefined(dialogField.fields) || dialogField.fields.length === 0) {\n continue;\n }\n if (isNullOrUndefined(dialogField.headerText)) {\n dialogField.headerText = this.localeObj.getConstant('customTab'); // eslint-disable-next-line\n count++;\n }\n tabItem.content = 'Custom' + '' + index++;\n this.beforeOpenArgs[tabItem.content] = this.getFieldsModel(dialogField.fields);\n }\n tabItem.header = { text: dialogField.headerText };\n tabItems.push(tabItem);\n }\n }\n this.beforeOpenArgs.requestType = this.isEdit ? 'beforeOpenEditDialog' : 'beforeOpenAddDialog';\n var args = {\n rowData: this.beforeOpenArgs.rowData,\n name: this.beforeOpenArgs.name,\n requestType: this.beforeOpenArgs.requestType,\n cancel: this.beforeOpenArgs.cancel\n };\n this.parent.trigger('actionBegin', this.beforeOpenArgs, function (arg) {\n if (!isNullOrUndefined(_this.parent.loadingIndicator) && _this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n _this.parent.showMaskRow();\n }\n else {\n _this.parent.showSpinner();\n }\n _this.renderTabItems();\n if (!arg.cancel) {\n tabModel.selected = _this.tabSelectedEvent.bind(_this);\n tabModel.height = _this.parent.isAdaptive ? '100%' : 'auto';\n tabModel.overflowMode = 'Scrollable';\n _this.tabObj = new Tab(tabModel);\n _this.tabObj.isStringTemplate = true;\n tabElement = _this.parent.createElement('div', { id: ganttObj.element.id + '_Tab' });\n _this.tabObj.appendTo(tabElement);\n dialogModel.content = tabElement;\n _this.dialog = dialog;\n _this.dialogObj = new Dialog(dialogModel);\n _this.dialogObj.isStringTemplate = true;\n _this.dialogObj.appendTo(_this.dialog);\n var actionCompleteArgs = {\n action: 'OpenDialog',\n requestType: _this.isEdit ? 'openEditDialog' : 'openAddDialog',\n data: _this.beforeOpenArgs.rowData,\n element: _this.dialog,\n cancel: false\n };\n _this.parent.trigger('actionComplete', actionCompleteArgs, function (actionCompleteArg) {\n if (!isNullOrUndefined(_this.parent.loadingIndicator) && _this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n _this.parent.hideMaskRow();\n }\n else {\n _this.parent.hideSpinner();\n }\n if (actionCompleteArg.cancel) {\n _this.resetValues();\n }\n });\n }\n });\n };\n DialogEdit.prototype.tabSelectedEvent = function (args) {\n var ganttObj = this.parent;\n var id = args.selectedContent.childNodes[0].id;\n if (this.parent.isAdaptive) {\n this.responsiveTabContent(id, ganttObj);\n }\n if (id === ganttObj.element.id + 'ResourcesTabContainer') {\n this.resourceSelection(id);\n }\n else if (id === ganttObj.element.id + 'NotesTabContainer') {\n document.getElementById(id).ej2_instances[0].refresh();\n var notesTabElement = document.querySelector('#' + this.parent.element.id + 'NotesTabContainer');\n notesTabElement.style.overflow = 'scroll';\n }\n else if (id === ganttObj.element.id + 'SegmentsTabContainer') {\n if (isNullOrUndefined(this.beforeOpenArgs.rowData.ganttProperties.startDate)) {\n document.getElementById(id).ej2_instances[0]\n .enableToolbarItems([this.parent.element.id + 'SegmentsTabContainer' + '_add'], false);\n }\n else {\n document.getElementById(id).ej2_instances[0]\n .enableToolbarItems([this.parent.element.id + 'SegmentsTabContainer' + '_add'], true);\n }\n }\n };\n DialogEdit.prototype.responsiveTabContent = function (id, ganttObj) {\n var dialogContent = document.getElementById(ganttObj.element.id + '_dialog_dialog-content');\n var dialogContentHeight = dialogContent.clientHeight;\n dialogContentHeight -= dialogContent.querySelector('.e-tab-header').offsetHeight;\n var grid = document.querySelector('#' + id);\n if (grid.classList.contains('e-grid')) {\n dialogContentHeight -= grid.ej2_instances[0].getHeaderContent().offsetHeight;\n var toolbar_1 = grid.querySelector('.e-toolbar');\n if (toolbar_1) {\n dialogContentHeight -= toolbar_1.offsetHeight;\n }\n }\n grid.parentElement.style.height = dialogContentHeight + 'px';\n };\n DialogEdit.prototype.getFieldsModel = function (fields) {\n var fieldsModel = {};\n var columnByField = this.parent.columnByField;\n for (var i = 0; i < fields.length; i++) {\n if (fields[i] === this.parent.taskFields.dependency ||\n fields[i] === this.parent.taskFields.resourceInfo ||\n fields[i] === this.parent.taskFields.notes) {\n continue;\n }\n if (!isNullOrUndefined(columnByField[fields[i]])) {\n var fieldName = fields[i];\n this.createInputModel(columnByField[fieldName], fieldsModel);\n }\n }\n return fieldsModel;\n };\n DialogEdit.prototype.createInputModel = function (column, fieldsModel) {\n var _this = this;\n var ganttObj = this.parent;\n var locale = this.parent.locale;\n var taskSettings = this.parent.taskFields;\n var common = {\n placeholder: column.headerText,\n floatLabelType: 'Auto'\n };\n if (!isNullOrUndefined(this.parent.taskFields.id) && !isNullOrUndefined(this.parent.columnMapping.id)\n && !isNullOrUndefined(this.numericOrString)) {\n if (taskSettings.id === column.field) {\n column.editType = this.numericOrString;\n }\n }\n ;\n switch (column.editType) {\n case 'booleanedit':\n {\n var checkboxModel = {\n label: column.headerText,\n locale: locale,\n enableRtl: this.parent.enableRtl\n };\n fieldsModel[column.field] = checkboxModel;\n break;\n }\n case 'defaultedit':\n case 'stringedit':\n {\n var textBox = common;\n textBox.enableRtl = this.parent.enableRtl;\n if (column.field === ganttObj.columnMapping.duration || column.field === ganttObj.columnMapping.id || column.field === ganttObj.columnMapping.startDate ||\n column.field === ganttObj.columnMapping.endDate) {\n textBox.change = function (args) {\n _this.validateScheduleFields(args, column, ganttObj);\n };\n }\n fieldsModel[column.field] = common;\n break;\n }\n case 'numericedit':\n {\n var numeric = common;\n numeric.enableRtl = this.parent.enableRtl;\n if (taskSettings.progress === column.field) {\n numeric.min = 0;\n numeric.max = 100;\n }\n if (taskSettings.work === column.field) {\n numeric.change = function (args) {\n _this.validateScheduleFields(args, column, ganttObj);\n };\n }\n fieldsModel[column.field] = numeric;\n break;\n }\n case 'datepickeredit':\n {\n var datePickerObj = common;\n datePickerObj.format = this.parent.getDateFormat();\n datePickerObj.enableRtl = this.parent.enableRtl;\n datePickerObj.strictMode = true;\n datePickerObj.firstDayOfWeek = ganttObj.timelineModule.customTimelineSettings.weekStartDay;\n if (column.field === ganttObj.columnMapping.startDate ||\n column.field === ganttObj.columnMapping.endDate) {\n datePickerObj.renderDayCell = this.parent.renderWorkingDayCell.bind(this.parent);\n datePickerObj.change = function (args) {\n _this.validateScheduleFields(args, column, ganttObj);\n };\n }\n fieldsModel[column.field] = datePickerObj;\n break;\n }\n case 'datetimepickeredit':\n {\n var dateTimePickerObj = common;\n dateTimePickerObj.format = this.parent.getDateFormat();\n dateTimePickerObj.enableRtl = this.parent.enableRtl;\n dateTimePickerObj.strictMode = true;\n dateTimePickerObj.firstDayOfWeek = ganttObj.timelineModule.customTimelineSettings.weekStartDay;\n if (column.field === ganttObj.columnMapping.startDate ||\n column.field === ganttObj.columnMapping.endDate) {\n dateTimePickerObj.renderDayCell = this.parent.renderWorkingDayCell.bind(this.parent);\n dateTimePickerObj.change = function (args) {\n _this.validateScheduleFields(args, column, ganttObj);\n };\n }\n fieldsModel[column.field] = dateTimePickerObj;\n break;\n }\n case 'dropdownedit':\n if (column.field === ganttObj.columnMapping.type || column.field === ganttObj.columnMapping.manual) {\n var dataKey = 'dataSource';\n var fieldsKey = 'fields';\n var types = [\n { 'ID': 1, 'Value': 'FixedUnit' }, { 'ID': 2, 'Value': 'FixedWork' }, { 'ID': 3, 'Value': 'FixedDuration' }\n ];\n common[dataKey] = types;\n common[fieldsKey] = { value: 'Value' };\n var dropDownListObj = common;\n dropDownListObj.enableRtl = this.parent.enableRtl;\n dropDownListObj.change = function (args) {\n if (column.field === taskSettings.manual) {\n _this.editedRecord.ganttProperties.isAutoSchedule = !args.value;\n }\n _this.validateScheduleFields(args, column, ganttObj);\n };\n }\n fieldsModel[column.field] = common;\n break;\n case 'maskededit':\n fieldsModel[column.field] = common;\n break;\n }\n if (!isNullOrUndefined(column.edit) && !isNullOrUndefined(column.edit.params)) {\n extend(fieldsModel[column.field], column.edit.params);\n }\n return fieldsModel;\n };\n DialogEdit.prototype.validateScheduleFields = function (args, column, ganttObj) {\n var _a;\n var dialog;\n if (!isNullOrUndefined(ganttObj.editModule.dialogModule.dialog)) {\n dialog = ganttObj.editModule.dialogModule.dialog;\n }\n var targetId = null;\n var inputElement;\n var currentData = ganttObj.editModule.dialogModule.editedRecord;\n var cellValue = null;\n var colName = null;\n var formObject;\n var ids = this.parent.viewType === 'ResourceView' ? this.parent.getTaskIds() : this.parent.ids;\n var strViewType = this.parent.viewType;\n if (!isNullOrUndefined(args.element)) {\n inputElement = args.element;\n targetId = inputElement.getAttribute('id');\n }\n else if (!isNullOrUndefined(args.container)) {\n inputElement = args.container;\n targetId = inputElement.querySelector('input').getAttribute('id');\n inputElement = inputElement.querySelector('#' + targetId);\n }\n else if (!isNullOrUndefined(args.event) && !isNullOrUndefined(args.event.path) && !isNullOrUndefined(args.event.path)[1]) {\n inputElement = args.event.path[1];\n targetId = inputElement.querySelector('input').getAttribute('id');\n inputElement = inputElement.querySelector('#' + targetId);\n }\n if (isNullOrUndefined(inputElement)) {\n cellValue = args.value;\n colName = column.field;\n }\n else {\n cellValue = inputElement.value;\n colName = targetId.replace(ganttObj.element.id, '');\n if (this.parent.columnByField[this.parent.taskFields.id].editType === \"stringedit\") {\n var customFn = function (args) {\n if (strViewType === 'ResourceView') {\n return ids.indexOf('T' + args['value']) === -1 && ids.indexOf('R' + args['value']) === -1;\n }\n else {\n return ids.indexOf(args['value']) === -1;\n }\n };\n var options = {\n rules: (_a = {},\n _a[this.parent.taskFields.id] = { required: true, minLength: [customFn, 'ID is already present, please enter new value'] },\n _a)\n };\n formObject = new FormValidator('#' + this.parent.element.id + 'GeneralTabContainer', options);\n }\n }\n if (colName.search('Segments') === 0) {\n colName = colName.replace('SegmentsTabContainer', '');\n this.validateSegmentFields(ganttObj, colName, cellValue, args);\n return true;\n }\n else {\n this.validateScheduleValuesByCurrentField(colName, cellValue, this.editedRecord);\n var ganttProp = currentData.ganttProperties;\n var tasks = ganttObj.taskFields;\n if (!isNullOrUndefined(tasks.startDate) && tasks.startDate !== colName) {\n this.updateScheduleFields(dialog, ganttProp, 'startDate');\n }\n if (tasks.endDate === colName && !isNullOrUndefined(ganttProp.startDate) && !isNullOrUndefined(args.value) && ganttProp.startDate.getTime() > args.value) {\n this.updateScheduleFields(dialog, ganttProp, 'endDate');\n }\n if (!isNullOrUndefined(tasks.endDate) && tasks.endDate !== colName) {\n this.updateScheduleFields(dialog, ganttProp, 'endDate');\n }\n if (!isNullOrUndefined(tasks.duration) && tasks.duration !== colName) {\n this.updateScheduleFields(dialog, ganttProp, 'duration');\n }\n if (!isNullOrUndefined(tasks.work) && tasks.work !== colName) {\n this.updateScheduleFields(dialog, ganttProp, 'work');\n }\n this.dialogEditValidationFlag = false;\n return true;\n }\n };\n DialogEdit.prototype.updateScheduleFields = function (dialog, ganttProp, ganttField) {\n var ganttObj = this.parent;\n var ganttId = ganttObj.element.id;\n var columnName = getValue(ganttField, ganttObj.columnMapping);\n var col = ganttObj.columnByField[columnName];\n var tempValue;\n var taskField = this.parent.taskFields;\n if (col.editType === 'stringedit') {\n var textBox = dialog.querySelector('#' + ganttId + columnName).ej2_instances[0];\n tempValue = !isNullOrUndefined(col.edit) && !isNullOrUndefined(col.edit.read) ? col.edit.read() :\n !isNullOrUndefined(col.valueAccessor) ? col.valueAccessor(columnName, ganttObj.editModule.dialogModule.editedRecord, col) : // eslint-disable-line\n this.parent.dataOperation.getDurationString(ganttProp.duration, ganttProp.durationUnit);\n if (textBox.value !== tempValue.toString() && taskField.duration === columnName) {\n textBox.value = tempValue;\n textBox.dataBind();\n }\n else if (taskField.startDate === columnName || taskField.endDate === columnName) {\n textBox.value = taskField.startDate === columnName ? ganttProp.startDate.toString() : ganttProp.endDate.toString();\n textBox.dataBind();\n }\n }\n else if (col.editType === 'datepickeredit' || col.editType === 'datetimepickeredit') {\n var picker = col.editType === 'datepickeredit' ?\n dialog.querySelector('#' + ganttId + columnName).ej2_instances[0] :\n dialog.querySelector('#' + ganttId + columnName).ej2_instances[0];\n tempValue = ganttProp[ganttField];\n if (((isNullOrUndefined(picker.value)) && !isNullOrUndefined(tempValue)) ||\n (isNullOrUndefined(tempValue) && !isNullOrUndefined(picker.value)) ||\n (picker.value !== tempValue && !isNullOrUndefined(picker.value) && !isNullOrUndefined(tempValue)\n && picker.value.toString() !== tempValue.toString())) {\n picker.value = tempValue;\n picker.dataBind();\n }\n }\n else if (col.editType === 'numericedit') {\n var numericTextBox = dialog.querySelector('#' + ganttId + columnName).ej2_instances[0];\n tempValue = ganttProp[ganttField];\n if (!isNullOrUndefined(tempValue) && numericTextBox.value !== tempValue) {\n numericTextBox.value = tempValue;\n numericTextBox.dataBind();\n }\n }\n };\n /**\n * @param {IGanttData} ganttData .\n * @returns {void} .\n * @private\n */\n DialogEdit.prototype.validateDuration = function (ganttData) {\n var ganttProp = ganttData.ganttProperties;\n if (!this.dialogEditValidationFlag) {\n if (isNullOrUndefined(ganttProp.duration)) {\n this.parent.setRecordValue('endDate', null, ganttProp, true);\n this.parent.setRecordValue('isMilestone', false, ganttProp, true);\n }\n else if (isScheduledTask(ganttProp) || !isNullOrUndefined(ganttProp.startDate)) {\n if (ganttData.ganttProperties.isMilestone && ganttData.ganttProperties.duration !== 0) {\n this.parent.dateValidationModule.checkStartDate(ganttProp.startDate);\n }\n this.parent.dateValidationModule.calculateEndDate(ganttData);\n }\n else if (!isScheduledTask(ganttProp) && !isNullOrUndefined(ganttProp.endDate)) {\n this.parent.dateValidationModule.calculateStartDate(ganttData);\n }\n var milestone = ganttProp.duration === 0 ? true : false;\n this.parent.setRecordValue('isMilestone', milestone, ganttProp, true);\n this.dialogEditValidationFlag = true;\n }\n };\n DialogEdit.prototype.validateStartDate = function (ganttData) {\n var ganttProp = ganttData.ganttProperties;\n var tasks = this.parent.taskFields;\n if (!this.dialogEditValidationFlag) {\n if (isNullOrUndefined(ganttProp.startDate)) {\n this.parent.setRecordValue('duration', null, ganttProp, true);\n this.parent.setRecordValue('isMilestone', false, ganttProp, true);\n if (this.parent.allowUnscheduledTasks && isNullOrUndefined(tasks.endDate)) {\n this.parent.setRecordValue('endDate', null, ganttProp, true);\n }\n }\n else if (isScheduledTask(ganttProp)) {\n if (isNullOrUndefined(tasks.duration)) {\n this.parent.dateValidationModule.calculateDuration(ganttData);\n }\n else if (isNullOrUndefined(tasks.endDate)) {\n this.parent.dateValidationModule.calculateEndDate(ganttData);\n }\n else {\n this.parent.dateValidationModule.calculateEndDate(ganttData);\n }\n }\n else {\n if (!isNullOrUndefined(ganttProp.endDate)) {\n this.parent.dateValidationModule.calculateDuration(ganttData);\n }\n else if (!isNullOrUndefined(ganttProp.duration)) {\n this.parent.dateValidationModule.calculateEndDate(ganttData);\n }\n }\n this.dialogEditValidationFlag = true;\n }\n };\n DialogEdit.prototype.validateEndDate = function (ganttData) {\n var ganttProp = ganttData.ganttProperties;\n var tasks = this.parent.taskFields;\n if (!this.dialogEditValidationFlag) {\n if (isNullOrUndefined(ganttProp.endDate)) {\n this.parent.setRecordValue('duration', null, ganttProp, true);\n this.parent.setRecordValue('isMilestone', false, ganttProp, true);\n }\n else if (isScheduledTask(ganttProp)) {\n if (isNullOrUndefined(tasks.duration)) {\n this.parent.dateValidationModule.calculateDuration(ganttData);\n }\n else if (isNullOrUndefined(ganttProp.startDate)) {\n this.parent.dateValidationModule.calculateStartDate(ganttData);\n }\n else {\n if (!isNullOrUndefined(ganttProp.segments) && ganttProp.segments.length > 0) {\n ganttProp.segments = this.parent.editModule.cellEditModule.validateEndDateWithSegments(ganttProp);\n }\n this.parent.dateValidationModule.calculateDuration(ganttData);\n }\n }\n else {\n if (!isNullOrUndefined(ganttProp.duration)) {\n this.parent.dateValidationModule.calculateStartDate(ganttData);\n }\n else if (!isNullOrUndefined(ganttProp.startDate)) {\n this.parent.dateValidationModule.calculateDuration(ganttData);\n }\n }\n this.dialogEditValidationFlag = true;\n }\n };\n /**\n *\n * @param {string} columnName .\n * @param {string} value .\n * @param {IGanttData} currentData .\n * @returns {boolean} .\n * @private\n */\n DialogEdit.prototype.validateScheduleValuesByCurrentField = function (columnName, value, currentData) {\n var ganttObj = this.parent;\n var ganttProp = currentData.ganttProperties;\n var taskSettings = ganttObj.taskFields;\n if (taskSettings.duration === columnName) {\n if (!isNullOrUndefined(value) && value !== '') {\n ganttObj.dataOperation.updateDurationValue(value, ganttProp);\n this.parent.setRecordValue(taskSettings.duration, value, currentData);\n this.parent.setRecordValue('taskData.' + taskSettings.duration, ganttProp.duration, currentData);\n }\n else {\n if (ganttObj.allowUnscheduledTasks) {\n this.parent.setRecordValue('duration', null, ganttProp, true);\n }\n }\n this.validateDuration(currentData);\n this.parent.editModule.updateResourceRelatedFields(currentData, 'duration');\n }\n if (taskSettings.startDate === columnName) {\n if (value !== '') {\n var startDate = this.parent.dateValidationModule.getDateFromFormat(value);\n startDate = this.parent.dateValidationModule.checkStartDate(startDate, ganttProp);\n this.parent.setRecordValue('startDate', startDate, ganttProp, true);\n }\n else {\n if (ganttObj.allowUnscheduledTasks && !(currentData.hasChildRecords)) {\n this.parent.setRecordValue('startDate', null, ganttProp, true);\n }\n }\n this.validateStartDate(currentData);\n }\n if (taskSettings.endDate === columnName) {\n if (value !== '') {\n var endDate = this.parent.dateValidationModule.getDateFromFormat(value);\n if (isNullOrUndefined(ganttProp.startDate) && isNullOrUndefined(endDate) && ganttProp.startDate.getTime() > endDate.getTime()) {\n endDate = ganttProp.endDate;\n }\n if (endDate.getHours() === 0 && ganttObj.defaultEndTime !== 86400) {\n this.parent.dateValidationModule.setTime(ganttObj.defaultEndTime, endDate);\n }\n endDate = this.parent.dateValidationModule.checkEndDate(endDate, ganttProp);\n if (isNullOrUndefined(ganttProp.startDate) || endDate.getTime() > (ganttProp.startDate).getTime()) {\n this.parent.setRecordValue('endDate', endDate, ganttProp, true);\n }\n }\n else {\n if (ganttObj.allowUnscheduledTasks) {\n this.parent.setRecordValue('endDate', null, ganttProp, true);\n }\n }\n this.validateEndDate(currentData);\n }\n if (taskSettings.work === columnName) {\n if (!isNullOrUndefined(value) && value !== '') {\n this.parent.setRecordValue('work', value, ganttProp, true);\n this.parent.editModule.updateResourceRelatedFields(currentData, 'work');\n this.validateDuration(currentData);\n }\n }\n if (columnName === taskSettings.type) {\n this.parent.setRecordValue('taskType', value, ganttProp, true);\n }\n if (taskSettings.manual === columnName) {\n this.parent.editModule.updateTaskScheduleModes(currentData);\n }\n return true;\n };\n DialogEdit.prototype.getSegmentsModel = function (fields) {\n var _this = this;\n var taskSettings = this.parent.taskFields;\n if (isNullOrUndefined(fields) || fields.length === 0) {\n fields = [];\n if (!isNullOrUndefined(taskSettings.startDate)) {\n fields.push('startDate');\n }\n if (!isNullOrUndefined(taskSettings.endDate)) {\n fields.push('endDate');\n }\n if (!isNullOrUndefined(taskSettings.duration)) {\n fields.push('duration');\n }\n }\n var segmentInputModel = {};\n segmentInputModel.editSettings = {\n allowEditing: true, allowAdding: true, allowDeleting: true, mode: 'Normal', newRowPosition: 'Bottom'\n };\n segmentInputModel.locale = this.parent.locale;\n segmentInputModel.dataSource = [];\n segmentInputModel.rowHeight = this.parent.isAdaptive ? 48 : null;\n segmentInputModel.toolbar = [\n {\n id: this.parent.element.id + 'SegmentsTabContainer' + '_add', prefixIcon: 'e-add',\n tooltipText: this.localeObj.getConstant('add'), align: 'Right',\n text: this.parent.isAdaptive ? '' : this.localeObj.getConstant('add')\n },\n {\n id: this.parent.element.id + 'SegmentsTabContainer' + '_delete', prefixIcon: 'e-delete',\n tooltipText: this.localeObj.getConstant('delete'), align: 'Right',\n text: this.parent.isAdaptive ? '' : this.localeObj.getConstant('delete')\n }\n ];\n var gridColumns = [];\n var _loop_1 = function (i) {\n var gridColumn = {};\n var generalTabString = 'General';\n switch (fields[i]) {\n case 'startDate':\n case 'endDate':\n gridColumn = {\n field: fields[i], headerText: this_1.localeObj.getConstant(fields[i]), editType: 'stringedit', width: '200px',\n edit: {\n write: function (args) {\n var datePickerModel;\n if (!isNullOrUndefined(_this.beforeOpenArgs[generalTabString])) {\n datePickerModel = _this.beforeOpenArgs[generalTabString][_this.parent.taskFields[fields[i]]];\n }\n else {\n var columnFields = _this.getGeneralColumnFields();\n var columnModel = _this.getFieldsModel(columnFields);\n datePickerModel = columnModel[_this.parent.taskFields[fields[i]]];\n }\n var value = args.rowData[args.column.field];\n setValue('value', value, datePickerModel);\n var datePicker = new _this.inputs[_this.parent.columnByField[_this.parent.taskFields[fields[i]]].editType](datePickerModel);\n datePicker.appendTo(args.element);\n },\n read: function (args) {\n var ej2Instance = args.ej2_instances[0];\n return ej2Instance.value;\n }\n },\n format: this_1.parent.getDateFormat()\n };\n if (fields[i] === 'startDate') {\n gridColumn.validationRules = { required: true };\n }\n gridColumns.push(gridColumn);\n break;\n case 'duration':\n gridColumn = {\n field: fields[i], headerText: this_1.localeObj.getConstant(fields[i]), editType: 'stringedit',\n width: '100px', edit: {\n write: function (args) {\n var inputTextModel;\n if (!isNullOrUndefined(_this.beforeOpenArgs[generalTabString])) {\n inputTextModel = _this.beforeOpenArgs[generalTabString][_this.parent.taskFields[fields[i]]];\n }\n else {\n var columnFields = _this.getGeneralColumnFields();\n var columnModel = _this.getFieldsModel(columnFields);\n inputTextModel = columnModel[_this.parent.taskFields[fields[i]]];\n }\n inputTextModel.floatLabelType = 'Never';\n var value = args.rowData[args.column.field];\n if (!isNullOrUndefined(value)) {\n setValue('value', value, inputTextModel);\n }\n else {\n setValue('value', null, inputTextModel);\n }\n setValue('value', value, inputTextModel);\n var inputModel = new TextBox(inputTextModel);\n inputModel.appendTo(args.element);\n },\n read: function (args) {\n var ej2Instance = args.ej2_instances[0];\n return ej2Instance.value.toString();\n }\n }\n };\n gridColumns.push(gridColumn);\n break;\n }\n };\n var this_1 = this;\n for (var i = 0; i < fields.length; i++) {\n _loop_1(i);\n }\n segmentInputModel.columns = gridColumns;\n segmentInputModel.height = this.parent.isAdaptive ? '100%' : '153px';\n return segmentInputModel;\n };\n DialogEdit.prototype.getGridColumnByField = function (fieldName, columns) {\n var column;\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].field === fieldName) {\n column = columns[i];\n }\n }\n return column;\n };\n DialogEdit.prototype.updateSegmentField = function (columnName, args, segment) {\n var dialog = this.parent.editModule.dialogModule.dialog;\n var gridModel = getValue('Segments', this.beforeOpenArgs);\n var col = this.getGridColumnByField(columnName, gridModel.columns);\n var ganttId = this.parent.element.id;\n var tempValue = segment[columnName];\n var inputValue;\n if (col.editType === 'stringedit') {\n inputValue = dialog.querySelector('#' + ganttId + 'SegmentsTabContainer' + columnName)\n .ej2_instances[0];\n }\n else if (col.editType === 'datepickeredit') {\n inputValue = dialog.querySelector('#' + ganttId + 'SegmentsTabContainer' + columnName)\n .ej2_instances[0];\n }\n if ((!isNullOrUndefined(inputValue.value)) && (inputValue.value.toString() !== tempValue.toString())) {\n inputValue.value = tempValue;\n inputValue.dataBind();\n }\n };\n DialogEdit.prototype.validateSegmentFields = function (ganttObj, columnName, cellValue, args) {\n var taskSettings = this.parent.taskFields;\n if (!isNullOrUndefined(taskSettings.duration) && taskSettings.duration.toLowerCase() === columnName.toLowerCase()) {\n if (!isNullOrUndefined(cellValue) && cellValue !== '') {\n this.selectedSegment.duration = Number(cellValue);\n var endDate = ganttObj.dataOperation.getEndDate(this.selectedSegment.startDate, Number(cellValue), this.editedRecord.ganttProperties.durationUnit, this.editedRecord.ganttProperties, false);\n endDate = ganttObj.dataOperation.checkEndDate(endDate, this.editedRecord.ganttProperties, false);\n this.selectedSegment.endDate = endDate;\n }\n }\n if (!isNullOrUndefined(taskSettings.startDate) && taskSettings.startDate.toLowerCase() === columnName.toLowerCase()) {\n if (cellValue !== '') {\n var startDate = this.parent.dateValidationModule.getDateFromFormat(cellValue);\n startDate = this.parent.dateValidationModule.checkStartDate(startDate);\n this.selectedSegment.startDate = startDate;\n if (!isNullOrUndefined(taskSettings.endDate)) {\n this.selectedSegment.endDate = this.parent.dataOperation.getEndDate(startDate, this.selectedSegment.duration, this.editedRecord.ganttProperties.durationUnit, this.editedRecord.ganttProperties, false);\n }\n }\n }\n if (!isNullOrUndefined(taskSettings.endDate) && taskSettings.endDate.toLowerCase() === columnName.toLowerCase()) {\n if (cellValue !== '') {\n var endDate = this.parent.dateValidationModule.getDateFromFormat(cellValue);\n if (endDate.getHours() === 0 && ganttObj.defaultEndTime !== 86400) {\n this.parent.dateValidationModule.setTime(ganttObj.defaultEndTime, endDate);\n }\n endDate = this.parent.dateValidationModule.checkEndDate(endDate, this.editedRecord.ganttProperties);\n this.selectedSegment.endDate = endDate;\n this.selectedSegment.duration = this.parent.dataOperation.getDuration(this.selectedSegment.startDate, this.selectedSegment.endDate, this.editedRecord.ganttProperties.durationUnit, true, false, true);\n }\n }\n if (!isNullOrUndefined(taskSettings.startDate)) {\n this.updateSegmentField('startDate', args, this.selectedSegment);\n }\n if (!isNullOrUndefined(taskSettings.endDate)) {\n this.updateSegmentField('endDate', args, this.selectedSegment);\n }\n if (!isNullOrUndefined(taskSettings.duration)) {\n this.updateSegmentField('duration', args, this.selectedSegment);\n }\n };\n DialogEdit.prototype.getPredecessorModel = function (fields) {\n if (isNullOrUndefined(fields) || fields.length === 0) {\n fields = ['ID', 'Name', 'Type', 'Offset', 'UniqueId'];\n }\n var inputModel = {};\n inputModel.editSettings = { allowEditing: true, allowAdding: true, allowDeleting: true, mode: 'Normal' };\n inputModel.locale = this.parent.locale;\n inputModel.dataSource = [];\n inputModel.rowHeight = this.parent.isAdaptive ? 48 : null;\n inputModel.toolbar = [\n {\n id: this.parent.element.id + 'DependencyTabContainer' + '_add', prefixIcon: 'e-add',\n tooltipText: this.localeObj.getConstant('add'), align: 'Right',\n text: this.parent.isAdaptive ? '' : this.localeObj.getConstant('add')\n },\n {\n id: this.parent.element.id + 'DependencyTabContainer' + '_delete', prefixIcon: 'e-delete',\n tooltipText: this.localeObj.getConstant('delete'), align: 'Right',\n text: this.parent.isAdaptive ? '' : this.localeObj.getConstant('delete')\n }\n ];\n var columns = [];\n for (var i = 0; i < fields.length; i++) {\n var column = {};\n if (fields[i].toLowerCase() === 'id') {\n column = {\n field: 'id', headerText: this.localeObj.getConstant('id'), allowEditing: false, width: '70px'\n };\n columns.push(column);\n }\n else if (fields[i].toLowerCase() === 'name') {\n column = {\n field: 'name', headerText: this.localeObj.getConstant('name'), editType: 'stringedit', width: '250px',\n validationRules: { required: true }\n };\n columns.push(column);\n }\n else if (fields[i].toLowerCase() === 'type') {\n column = {\n field: 'type', headerText: this.localeObj.getConstant('type'), editType: 'dropdownedit',\n dataSource: this.types, foreignKeyField: 'id', foreignKeyValue: 'text',\n defaultValue: 'FS', validationRules: { required: true }, width: '150px'\n };\n columns.push(column);\n }\n else if (fields[i].toLowerCase() === 'offset') {\n column = {\n field: 'offset', headerText: this.localeObj.getConstant('offset'), editType: 'stringedit',\n defaultValue: this.parent.dataOperation.getDurationString(0, this.beforeOpenArgs.rowData.ganttProperties.durationUnit),\n validationRules: { required: true }, width: '100px'\n };\n columns.push(column);\n }\n else if (fields[i].toLowerCase() === 'uniqueid') {\n column = {\n field: 'uniqueId', isPrimaryKey: true, visible: false, defaultValue: getUid().toString()\n };\n columns.push(column);\n }\n }\n inputModel.columns = columns;\n inputModel.height = this.parent.isAdaptive ? '100%' : '153px';\n return inputModel;\n };\n DialogEdit.prototype.getResourcesModel = function (fields) {\n var ganttObj = this.parent;\n var resourceSettings = ganttObj.resourceFields;\n if (isNullOrUndefined(fields) || fields.length === 0) {\n fields = [resourceSettings.id, resourceSettings.name, resourceSettings.unit, resourceSettings.group];\n }\n var inputModel = {\n allowFiltering: true,\n treeColumnIndex: -1,\n childMapping: '',\n editSettings: { allowEditing: true, mode: 'Cell' },\n locale: this.parent.locale,\n allowSelection: true,\n rowHeight: this.parent.isAdaptive ? 48 : null,\n filterSettings: { type: 'Menu' },\n selectionSettings: { checkboxOnly: true, checkboxMode: 'Default', persistSelection: true, type: 'Multiple' }\n };\n var columns = [\n { type: 'checkbox', allowEditing: false, allowSorting: false, allowFiltering: false, width: 60 }\n ];\n for (var i = 0; i < fields.length; i++) {\n var column = {};\n if (fields[i] === resourceSettings.id) {\n column = {\n field: resourceSettings.id,\n headerText: this.localeObj.getConstant('id'), isPrimaryKey: true, width: '100px',\n allowEditing: false\n };\n columns.push(column);\n }\n else if (fields[i] === resourceSettings.name) {\n column = {\n field: resourceSettings.name, headerText: this.localeObj.getConstant('name'),\n allowEditing: false\n };\n columns.push(column);\n }\n else if (fields[i] === resourceSettings.unit) {\n column = {\n field: resourceSettings.unit,\n headerText: this.localeObj.getConstant('unit'),\n editType: 'numericedit',\n edit: { params: { min: 0 } }\n };\n columns.push(column);\n }\n else if (fields[i] === resourceSettings.group && !isNullOrUndefined(resourceSettings.group)) {\n column = {\n field: resourceSettings.group,\n headerText: this.localeObj.getConstant('group'),\n allowEditing: false\n };\n columns.push(column);\n }\n }\n inputModel.columns = columns;\n inputModel.height = this.parent.isAdaptive ? '100%' : '196px';\n return inputModel;\n };\n DialogEdit.prototype.getNotesModel = function (fields) {\n if (isNullOrUndefined(fields) || fields.length === 0) {\n fields = ['Bold', 'Italic', 'Underline', 'StrikeThrough',\n 'FontName', 'FontSize', 'FontColor', 'BackgroundColor',\n 'LowerCase', 'UpperCase', '|',\n 'Alignments', 'OrderedList', 'UnorderedList',\n 'Outdent', 'Indent', '|', 'CreateTable',\n 'CreateLink', '|', 'ClearFormat', 'Print',\n '|', 'Undo', 'Redo'];\n }\n var inputModel = {\n placeholder: this.localeObj.getConstant('writeNotes'),\n toolbarSettings: {\n items: fields\n },\n height: this.parent.isAdaptive ? '100%' : 'auto',\n locale: this.parent.locale\n };\n return inputModel;\n };\n DialogEdit.prototype.createDivElement = function (className, id) {\n return createElement('div', { className: className, id: id });\n };\n DialogEdit.prototype.createInputElement = function (className, id, fieldName, type) {\n return createElement(type || 'input', {\n className: className, attrs: {\n type: 'text', id: id, name: fieldName,\n title: fieldName\n }\n });\n };\n DialogEdit.prototype.renderTabItems = function () {\n var tabModel = this.beforeOpenArgs.tabModel;\n var items = tabModel.items;\n var index = 0;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n if (item.content instanceof HTMLElement) {\n continue;\n }\n else if (item.content === 'General') {\n item.content = this.renderGeneralTab(item.content);\n }\n else if (item.content === 'Dependency') {\n if (this.editedRecord.hasChildRecords && !this.parent.allowParentDependency) {\n item.disabled = true;\n }\n item.content = this.renderPredecessorTab(item.content);\n }\n else if (item.content === 'Resources') {\n item.content = this.renderResourceTab(item.content);\n }\n else if (item.content === ('Custom' + '' + index)) {\n item.content = this.renderCustomTab(item.content);\n index++;\n }\n else if (item.content === 'Notes') {\n item.content = this.renderNotesTab(item.content);\n }\n else if (item.content === 'Segments') {\n if (this.editedRecord.hasChildRecords) {\n item.disabled = true;\n }\n item.content = this.renderSegmentsTab(item.content);\n }\n }\n };\n DialogEdit.prototype.segmentGridActionBegin = function (args) {\n var taskFields = this.parent.taskFields;\n var itemName = 'Segments';\n var gridModel = this.beforeOpenArgs[itemName];\n if (args.requestType === 'add' || args.requestType === 'beginEdit' || args.requestType === 'save') {\n var gridData = gridModel.dataSource;\n var selectedItem = getValue('rowData', args);\n var startDate = this.beforeOpenArgs.rowData.ganttProperties.startDate;\n if (!isNullOrUndefined(startDate)) {\n if (args.requestType === 'add') {\n var arg = {};\n var sDate = getValue('startDate', selectedItem);\n var eDate = getValue('endDate', selectedItem);\n var duration = getValue('duration', selectedItem);\n var startDate_1 = !isNullOrUndefined(gridData) && gridData.length > 0 ?\n !isNullOrUndefined(taskFields.endDate) ? new Date(getValue('endDate', gridData[0]).getTime()) :\n new Date(getValue('startDate', gridData[0]).getTime()) :\n !isNullOrUndefined(this.beforeOpenArgs.rowData.ganttProperties.startDate) &&\n new Date(this.beforeOpenArgs.rowData.ganttProperties.startDate.getTime());\n startDate_1.setHours(0, 0, 0, 0);\n if (!isNullOrUndefined(gridData) && gridData.length > 0) {\n startDate_1.setDate(startDate_1.getDate() + 2);\n }\n sDate = this.parent.dataOperation.checkStartDate(startDate_1);\n eDate = this.parent.dateValidationModule.getDateFromFormat(sDate);\n if (eDate.getHours() === 0 && this.parent.defaultEndTime !== 86400) {\n this.parent.dateValidationModule.setTime(this.parent.defaultEndTime, eDate);\n }\n eDate = !isNullOrUndefined(taskFields.endDate) && !isNullOrUndefined(gridData) && gridData.length <= 0 ?\n this.beforeOpenArgs.rowData.ganttProperties.endDate : eDate;\n duration = !isNullOrUndefined(taskFields.duration) && !isNullOrUndefined(gridData) && gridData.length <= 0 ?\n this.beforeOpenArgs.rowData.ganttProperties.duration : 1;\n arg = {\n startDate: sDate,\n endDate: eDate,\n duration: duration\n };\n args.rowData = arg;\n }\n }\n this.selectedSegment = args.rowData;\n // if (args.requestType === 'save') {\n // // let duration: string = 'duration';\n // // let tempDuration: Object = this.parent.dataOperation.getDurationValue(args.data[duration]);\n // // args.data[duration] = getValue('duration', tempDuration);\n // this.selectedSegment = !isNullOrUndefined(this.editedRecord.ganttProperties.segments[args.rowIndex]) ?\n // this.editedRecord.ganttProperties.segments[args.rowIndex] : !isNullOrUndefined(gridData[args.rowIndex]) ?\n // gridData[args.rowIndex] : gridData;\n // }\n }\n };\n DialogEdit.prototype.renderSegmentsTab = function (itemName) {\n var ganttObj = this.parent;\n var gridModel = this.beforeOpenArgs[itemName];\n var ganttData = this.beforeOpenArgs.rowData;\n var preData = [];\n if (this.isEdit) {\n preData = isNullOrUndefined(ganttData.ganttProperties.segments) ? [] : ganttData.ganttProperties.segments;\n }\n gridModel.dataSource = preData;\n gridModel.actionBegin = this.segmentGridActionBegin.bind(this);\n Grid.Inject(Edit, Page, GridToolbar, ForeignKey);\n var gridObj = new Grid(gridModel);\n var divElement = this.createDivElement('', ganttObj.element.id + '' + itemName + 'TabContainer');\n gridObj.appendTo(divElement);\n return divElement;\n };\n DialogEdit.prototype.renderGeneralTab = function (itemName) {\n var ganttObj = this.parent;\n var itemModel = this.beforeOpenArgs[itemName];\n var divElement = this.createDivElement('e-edit-form-row', ganttObj.element.id\n + '' + itemName + 'TabContainer');\n for (var _i = 0, _a = Object.keys(itemModel); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.parent.columnByField[key].visible === false) {\n continue;\n }\n var column = this.parent.columnByField[key];\n var inputModel = itemModel[key];\n divElement.appendChild(this.renderInputElements(inputModel, column));\n }\n return divElement;\n };\n DialogEdit.prototype.isCheckIsDisabled = function (column) {\n var disabled = false;\n var stringOrNumber;\n if (column.allowEditing === false || column.isPrimaryKey || this.parent.readOnly) {\n if (this.parent.customColumns.indexOf(column.field) !== -1) {\n disabled = true;\n }\n else {\n if (column.field === this.parent.taskFields.id || column.field === this.parent.taskFields.name ||\n column.field === this.parent.taskFields.duration || column.field === this.parent.taskFields.progress ||\n column.field === this.parent.taskFields.startDate || column.field === this.parent.taskFields.endDate ||\n column.field === this.parent.taskFields.baselineStartDate || column.field === this.parent.taskFields.baselineEndDate ||\n column.field === this.parent.taskFields.work || column.field === this.parent.taskFields.type) {\n for (var i = 0; i < this.parent.currentViewData['length']; i++) {\n if (!isNullOrUndefined(this.parent.currentViewData[i].ganttProperties.taskId)) {\n stringOrNumber = this.parent.currentViewData[i].ganttProperties.taskId;\n break;\n }\n }\n if (typeof (stringOrNumber) === 'string') {\n disabled = false;\n }\n else {\n disabled = true;\n }\n }\n }\n }\n if (this.isEdit) {\n if (column.field === this.parent.taskFields.id) {\n disabled = true;\n }\n if (this.editedRecord.hasChildRecords) {\n if ((column.field === this.parent.taskFields.endDate && ((!isNullOrUndefined(this.editedRecord['isManual']) &&\n this.editedRecord['isManual'] === false) || this.parent.taskMode === 'Auto')) || column.field === this.parent.taskFields.duration ||\n column.field === this.parent.taskFields.progress || column.field === this.parent.taskFields.work ||\n column.field === this.parent.taskFields.type) {\n disabled = true;\n }\n }\n }\n return disabled;\n };\n DialogEdit.prototype.isParentValid = function (data) {\n if (data.length > 0) {\n for (var i = 0; i < data.length; i++) {\n if (data[i].uniqueID == this.beforeOpenArgs.rowData['uniqueID']) {\n this.isValidData = false;\n break;\n }\n if (data[i].hasChildRecords) {\n this.isParentValid(data[i].childRecords);\n }\n if (!this.isValidData) {\n break;\n }\n }\n }\n return this.isValidData;\n };\n DialogEdit.prototype.renderPredecessorTab = function (itemName) {\n var _this = this;\n var ganttObj = this.parent;\n var gridModel = this.beforeOpenArgs[itemName];\n var dependencyColumn = this.parent.columnByField[this.parent.taskFields.dependency];\n if (dependencyColumn.allowEditing === false || dependencyColumn.isPrimaryKey || this.parent.readOnly) {\n gridModel.editSettings.allowEditing = false;\n gridModel.editSettings.allowAdding = false;\n gridModel.editSettings.allowDeleting = false;\n }\n var ganttData = this.beforeOpenArgs.rowData;\n var preData = [];\n this.taskNameCollection();\n if (this.isEdit) {\n preData = this.predecessorEditCollection(ganttData);\n this.updatePredecessorDropDownData(ganttData);\n }\n gridModel.dataSource = preData;\n gridModel.actionBegin = this.gridActionBegin.bind(this);\n var columns = gridModel.columns;\n columns[1].edit = {\n write: function (args) {\n if (getValue('requestType', args) === 'add') {\n setValue('rowData.uniqueId', getUid(), args);\n }\n var field = 'name';\n var autoObj = new ComboBox({\n dataSource: new DataManager(_this.idCollection),\n popupHeight: '180px',\n allowCustom: false,\n enableRtl: _this.parent.enableRtl,\n fields: { value: 'text' },\n value: args.rowData[field],\n change: function (arg) {\n var tr = closest(arg.element, 'tr');\n var idInput = tr.querySelector('#' + _this.parent.element.id + 'DependencyTabContainerid');\n if (idInput) {\n if (!isNullOrUndefined(arg.itemData) && !isNullOrUndefined(arg.item)) {\n idInput.value = arg.itemData.id;\n }\n else {\n idInput.value = '';\n }\n }\n },\n autofill: true\n });\n autoObj.appendTo(args.element);\n },\n read: function (args) {\n var ej2Instance = args.ej2_instances[0];\n return ej2Instance.value;\n }\n };\n Grid.Inject(Edit, Page, GridToolbar, ForeignKey);\n var gridObj = new Grid(gridModel);\n var divElement = this.createDivElement('e-dependent-div', ganttObj.element.id + '' + itemName + 'TabContainer');\n gridObj.appendTo(divElement);\n return divElement;\n };\n DialogEdit.prototype.gridActionBegin = function (args) {\n var _this = this;\n var itemName = 'Dependency';\n var gridModel = this.beforeOpenArgs[itemName];\n if (args.requestType === 'add' || args.requestType === 'beginEdit') {\n var isEdit_1 = args.requestType === 'add' ? false : true;\n this.idCollection = extend([], [], this.preTableCollection, true);\n var gridData_1 = gridModel.dataSource;\n var _loop_2 = function (i) {\n // eslint-disable-next-line\n this_2.idCollection.forEach(function (data, index) {\n if (data.id === getValue('id', gridData_1[i])) {\n var selectedItem = getValue('rowData', args);\n if (isEdit_1 && getValue('id', selectedItem) === data.id) {\n return;\n }\n _this.idCollection.splice(_this.idCollection.indexOf(data), 1);\n }\n });\n };\n var this_2 = this;\n for (var i = 0; i <= gridData_1.length; i++) {\n _loop_2(i);\n }\n }\n };\n DialogEdit.prototype.updateResourceCollection = function (args, resourceTreeGridId) {\n if (!isNullOrUndefined(args.data) && Object.keys(args.data).length) {\n var ganttObj = this.parent;\n var treeGridId = document.querySelector('#' + resourceTreeGridId);\n var resourceTreeGrid = treeGridId.ej2_instances[0];\n if (!isNullOrUndefined(resourceTreeGrid) && resourceTreeGrid.getSelectedRecords().length > 0) {\n var tempRecords = resourceTreeGrid.getSelectedRecords();\n var index = void 0;\n var selectedItems = [];\n for (index = 0; index < tempRecords.length; index++) {\n selectedItems.push(tempRecords[index].taskData);\n }\n this.ganttResources = extend([], selectedItems);\n }\n else {\n this.ganttResources = [];\n }\n }\n else {\n this.ganttResources = [];\n }\n };\n DialogEdit.prototype.renderResourceTab = function (itemName) {\n var _this = this;\n var ganttObj = this.parent;\n var resourceSettings = ganttObj.resourceFields;\n var ganttData = this.beforeOpenArgs.rowData;\n var rowResource = ganttData.ganttProperties.resourceInfo;\n var inputModel = this.beforeOpenArgs[itemName];\n var resourceTreeGridId = ganttObj.element.id + '' + itemName + 'TabContainer';\n var resourceData = [];\n if (this.parent.viewType === 'ResourceView') {\n for (var i = 0; i < ganttObj.currentViewData.length; i++) {\n for (var j = 0; j < ganttObj.resources.length; j++) {\n if (ganttObj.currentViewData[i][ganttObj.taskFields.id] === ganttObj.resources[j][resourceSettings.id] &&\n (ganttObj.currentViewData[i].hasChildRecords || isNullOrUndefined(ganttObj.currentViewData[i].parentItem))) {\n resourceData.push(ganttObj.resources[j]);\n }\n }\n }\n }\n else {\n resourceData = extend([], [], ganttObj.resources, true);\n }\n this.parent.dataOperation.updateResourceUnit(resourceData);\n if (!isNullOrUndefined(rowResource)) {\n var count = void 0;\n var rowResourceLength = rowResource.length;\n var index = void 0;\n var resourceDataLength = resourceData.length;\n for (count = 0; count < rowResourceLength; count++) {\n for (index = 0; index < resourceDataLength; index++) {\n if (rowResource[count][resourceSettings.id] === resourceData[index][resourceSettings.id]) {\n resourceData[index][resourceSettings.unit] = rowResource[count][resourceSettings.unit];\n }\n }\n }\n }\n inputModel.dataSource = resourceData;\n var resourceInfo = ganttData.ganttProperties.resourceInfo;\n if (this.isEdit && !isNullOrUndefined(resourceInfo)) {\n for (var i = 0; i < resourceInfo.length; i++) {\n this.ganttResources.push(resourceInfo[i]);\n }\n }\n inputModel.rowSelected = function (args) {\n _this.updateResourceCollection(args, resourceTreeGridId);\n };\n inputModel.rowDeselected = function (args) {\n _this.updateResourceCollection(args, resourceTreeGridId);\n };\n var divElement = this.createDivElement('e-resource-div', resourceTreeGridId);\n TreeGrid.Inject(Selection, Filter, TreeGridEdit, VirtualScroll);\n var treeGridObj = new TreeGrid(inputModel);\n var resourceColumn = this.parent.columnByField[this.parent.taskFields.resourceInfo];\n if (resourceColumn.allowEditing === false || resourceColumn.isPrimaryKey || this.parent.readOnly) {\n treeGridObj.allowSelection = false;\n treeGridObj.allowFiltering = false;\n treeGridObj.editSettings.allowEditing = false;\n }\n treeGridObj.dataBound = function () {\n if (_this.parent.editDialogFields.length >= 1 && _this.parent.editDialogFields[0].type === 'Resources') {\n var id = _this.parent.element.id + 'ResourcesTabContainer';\n _this.resourceSelection(id);\n }\n };\n treeGridObj.appendTo(divElement);\n return divElement;\n };\n DialogEdit.prototype.resourceSelection = function (id) {\n var _this = this;\n var resourceTreeGrid = document.querySelector('#' + id).ej2_instances[0];\n var currentViewData = resourceTreeGrid.getCurrentViewRecords();\n var resources = this.ganttResources;\n if (resources && resources.length > 0) {\n currentViewData.forEach(function (data, index) {\n for (var i = 0; i < resources.length; i++) {\n if (data.taskData[_this.parent.resourceFields.id] === resources[i][_this.parent.resourceFields.id] &&\n !isNullOrUndefined(resourceTreeGrid.selectionModule) &&\n resourceTreeGrid.getSelectedRowIndexes().indexOf(index) === -1) {\n resourceTreeGrid.selectRow(index);\n }\n }\n });\n }\n };\n DialogEdit.prototype.renderCustomTab = function (itemName) {\n return this.renderGeneralTab(itemName);\n };\n DialogEdit.prototype.renderNotesTab = function (itemName) {\n var ganttObj = this.parent;\n var inputModel = this.beforeOpenArgs[itemName];\n inputModel.enableHtmlSanitizer = this.parent.enableHtmlSanitizer;\n var ganttProp = this.editedRecord.ganttProperties;\n var divElement = this.createDivElement('', ganttObj.element.id + '' + itemName + 'TabContainer');\n RichTextEditor.Inject(RTEToolbar, Link, HtmlEditor, QuickToolbar, Count);\n inputModel.value = ganttProp.notes;\n var notesColumn = this.parent.columnByField[this.parent.taskFields.notes];\n if (notesColumn.allowEditing === false || notesColumn.isPrimaryKey || this.parent.readOnly) {\n inputModel.enabled = false;\n }\n var rteObj = new RichTextEditor(inputModel);\n rteObj.appendTo(divElement);\n return divElement;\n };\n DialogEdit.prototype.renderInputElements = function (inputModel, column) {\n var _this = this;\n var ganttId = this.parent.element.id;\n var ganttData = this.editedRecord;\n var divElement = this.createDivElement('e-edit-form-column');\n var inputElement;\n var editArgs = { column: column, data: ganttData };\n if (!isNullOrUndefined(column.edit) && isNullOrUndefined(column.edit.params)) {\n var create = column.edit.create;\n if (typeof create === 'string') {\n create = getObject(create, window);\n inputElement = create(editArgs);\n }\n else {\n inputElement = column.edit.create(editArgs);\n }\n inputElement.className = '';\n inputElement.setAttribute('type', 'text');\n inputElement.setAttribute('id', ganttId + '' + column.field);\n inputElement.setAttribute('name', column.field);\n inputElement.setAttribute('title', column.field);\n divElement.appendChild(inputElement);\n }\n else {\n inputElement = this.createInputElement('', ganttId + '' + column.field, column.field);\n divElement.appendChild(inputElement);\n }\n inputModel.enabled = !isNullOrUndefined(inputModel.enabled) ? inputModel.enabled : !this.isCheckIsDisabled(column);\n if (column.field === this.parent.taskFields.duration) {\n if (!isNullOrUndefined(column.valueAccessor)) {\n if (typeof column.valueAccessor === 'string') {\n var valueAccessor = getObject(column.valueAccessor, window);\n inputModel.value = valueAccessor(column.field, ganttData, column);\n }\n else {\n inputModel.value = column.valueAccessor(column.field, ganttData, column);\n }\n }\n else if (isNullOrUndefined(column.edit)) {\n var ganttProp = ganttData.ganttProperties;\n inputModel.value = this.parent.dataOperation.getDurationString(ganttProp.duration, ganttProp.durationUnit);\n }\n }\n else {\n if (column.editType === 'booleanedit') {\n if (ganttData[column.field] === true) {\n inputModel.checked = true;\n }\n else {\n inputModel.checked = false;\n }\n }\n else {\n inputModel.value = ganttData[column.field];\n }\n }\n if (!isNullOrUndefined(column.edit) && isNullOrUndefined(column.edit.params)) {\n var write = column.edit.write;\n var inputObj = void 0;\n if (typeof write === 'string') {\n write = getObject(write, window);\n inputObj = write({\n column: column, rowData: ganttData, element: inputElement\n });\n }\n else {\n inputObj = column.edit.write({\n column: column, rowData: ganttData, element: inputElement\n });\n }\n if (column.field === this.parent.taskFields.duration) {\n inputObj.change = function (args) {\n _this.validateScheduleFields(args, column, _this.parent);\n };\n }\n }\n else {\n var inputObj = new this.inputs[column.editType](inputModel);\n inputObj.appendTo(inputElement);\n }\n return divElement;\n };\n DialogEdit.prototype.taskNameCollection = function () {\n var flatData = this.parent.flatData;\n this.preTaskIds = [];\n this.preTableCollection = [];\n for (var i = 0; i < flatData.length; i++) {\n var data = flatData[i];\n if (this.parent.allowParentDependency) {\n var currentFlatData = data;\n if (data.parentUniqueID === this.beforeOpenArgs.rowData['uniqueID']) {\n this.isValidData = false;\n }\n else {\n do {\n if (currentFlatData.parentItem) {\n currentFlatData = this.parent.flatData[this.parent.ids.indexOf(currentFlatData.parentItem.taskId)];\n if (currentFlatData.uniqueID === this.beforeOpenArgs.rowData['uniqueID']) {\n this.isValidData = false;\n break;\n }\n }\n } while (currentFlatData.parentItem);\n }\n if (data.hasChildRecords && this.isValidData) {\n this.isValidData = this.isParentValid(data.childRecords);\n }\n if (!this.isValidData) {\n this.isValidData = true;\n continue;\n }\n }\n else {\n if (data.hasChildRecords) {\n continue;\n }\n }\n var taskId = this.parent.viewType === 'ResourceView' ? data.ganttProperties.taskId.toString()\n : data.ganttProperties.rowUniqueID.toString();\n var tempObject = {\n id: taskId,\n text: (taskId + '-' + data.ganttProperties.taskName),\n value: taskId\n };\n this.preTaskIds.push(tempObject.id);\n this.preTableCollection.push(tempObject);\n }\n };\n DialogEdit.prototype.predecessorEditCollection = function (ganttData) {\n var preDataCollection = [];\n var ganttProp = ganttData.ganttProperties;\n if (this.isEdit && !isNullOrUndefined(this.parent.taskFields.dependency) && !isNullOrUndefined(ganttData) &&\n !isNullOrUndefined(ganttProp.predecessor)) {\n var predecessor = ganttProp.predecessor;\n var idCollection = this.preTableCollection;\n for (var i = 0; i < predecessor.length; i++) {\n var from = predecessor[i].from.toString();\n var preData = {};\n var taskID = this.parent.viewType === 'ResourceView' ? ganttProp.taskId : ganttProp.rowUniqueID;\n if (taskID.toString() !== from) {\n preData.id = from;\n for (var index = 0; index < idCollection.length; index++) {\n if (idCollection[index].value === from) {\n preData.name = idCollection[index].text;\n break;\n }\n }\n preData.type = predecessor[i].type;\n var offset = predecessor[i].offset;\n var offsetUnit = predecessor[i].offsetUnit;\n preData.offset = this.parent.dataOperation.getDurationString(offset, offsetUnit);\n preData.uniqueId = getUid();\n preDataCollection.push(preData);\n }\n }\n }\n return preDataCollection;\n };\n DialogEdit.prototype.updatePredecessorDropDownData = function (ganttData) {\n var index = -1;\n var id = this.parent.viewType === 'ResourceView' ? ganttData.ganttProperties.taskId.toString()\n : ganttData.ganttProperties.rowUniqueID.toString();\n index = this.preTaskIds.indexOf(id);\n this.preTableCollection.splice(index, 1);\n this.preTaskIds.splice(index, 1);\n this.validSuccessorTasks(ganttData, this.preTaskIds, this.preTableCollection);\n };\n DialogEdit.prototype.validSuccessorTasks = function (data, ids, idCollection) {\n var _this = this;\n var ganttProp = data.ganttProperties;\n if (ganttProp.predecessor && ganttProp.predecessor.length > 0) {\n var predecessor = ganttProp.predecessor;\n var fromId_1 = this.parent.viewType === 'ResourceView' ? ganttProp.taskId.toString() : ganttProp.rowUniqueID.toString();\n predecessor.forEach(function (item) {\n if (item.from.toString() === fromId_1) {\n var toId = item.to;\n var idIndex = -1;\n idIndex = ids.indexOf(toId);\n if (idIndex > -1) {\n ids.splice(idIndex, 1);\n idCollection.splice(idIndex, 1);\n }\n var ganttData = _this.parent.connectorLineModule.getRecordByID(toId);\n _this.validSuccessorTasks(ganttData, ids, idCollection);\n }\n });\n }\n };\n DialogEdit.prototype.getPredecessorType = function () {\n var typeText = [this.parent.getPredecessorTextValue('SS'), this.parent.getPredecessorTextValue('SF'),\n this.parent.getPredecessorTextValue('FS'), this.parent.getPredecessorTextValue('FF')];\n var types = [\n { id: 'FS', text: typeText[2], value: typeText[2] },\n { id: 'FF', text: typeText[3], value: typeText[3] },\n { id: 'SS', text: typeText[0], value: typeText[0] },\n { id: 'SF', text: typeText[1], value: typeText[1] }\n ];\n return types;\n };\n DialogEdit.prototype.initiateDialogSave = function () {\n if (this.isEdit) {\n this.parent.initiateEditAction(true);\n }\n else {\n this.addedRecord = {};\n }\n var ganttObj = this.parent;\n var tabModel = this.beforeOpenArgs.tabModel;\n var items = tabModel.items;\n for (var i = 0; i < items.length; i++) {\n var element = items[i].content;\n var id = element.id;\n if (!isNullOrUndefined(id) || id !== '') {\n id = id.replace(ganttObj.element.id, '');\n id = id.replace('TabContainer', '');\n if (id === 'General') {\n this.updateGeneralTab(element, false);\n }\n else if (id === 'Dependency') {\n this.updatePredecessorTab(element);\n }\n else if (id === 'Notes') {\n this.updateNotesTab(element);\n }\n else if (id === 'Resources') {\n this.updateResourceTab(element);\n }\n else if (id.indexOf('Custom') !== -1) {\n this.updateCustomTab(element);\n }\n else if (id === 'Segments') {\n this.updateSegmentsData(element, this.beforeOpenArgs.rowData);\n }\n }\n }\n if (this.isEdit) {\n /**\n * If any update on edited task do it here\n */\n this.parent.dataOperation.updateWidthLeft(this.rowData);\n var editArgs = {\n data: this.rowData,\n action: 'DialogEditing'\n };\n this.parent.editModule.initiateUpdateAction(editArgs);\n }\n else {\n if (this.parent.viewType === 'ResourceView') {\n var newRecords = extend({}, this.addedRecord, true);\n if (newRecords[this.parent.taskFields.resourceInfo].length) {\n for (var i = 0; i < newRecords[this.parent.taskFields.resourceInfo].length; i++) {\n var id = newRecords[this.parent.taskFields.resourceInfo][i].toString();\n var parentRecordIndex = this.parent.getTaskIds().indexOf('R' + id.toString());\n if (parentRecordIndex !== -1) {\n this.parent.editModule.addRecord(this.addedRecord, 'Child', parentRecordIndex);\n break;\n }\n }\n }\n else {\n this.parent.editModule.addRecord(this.addedRecord, 'Bottom');\n }\n }\n else {\n this.parent.editModule.addRecord(this.addedRecord, this.parent.editSettings.newRowPosition, this.parent.selectedRowIndex);\n }\n }\n return true;\n };\n DialogEdit.prototype.updateSegmentTaskData = function (dataSource) {\n var userData = [];\n var taskSettings = this.parent.taskFields;\n for (var i = 0; i < dataSource.length; i++) {\n var taskData = {};\n if (!isNullOrUndefined(taskSettings.startDate)) {\n taskData[this.parent.taskFields.startDate] = dataSource[i].startDate;\n }\n if (!isNullOrUndefined(taskSettings.endDate)) {\n taskData[this.parent.taskFields.endDate] = dataSource[i].endDate;\n }\n if (!isNullOrUndefined(taskSettings.duration)) {\n taskData[this.parent.taskFields.duration] = Number(dataSource[i].duration);\n dataSource[i].duration = taskData[this.parent.taskFields.duration];\n }\n userData.push(taskData);\n }\n if (!this.isEdit) {\n this.addedRecord[taskSettings.segments] = userData;\n }\n else {\n this.rowData.ganttProperties.segments = dataSource;\n this.parent.setRecordValue('segments', this.parent.dataOperation.setSegmentsInfo(this.rowData, false), this.rowData.ganttProperties, true);\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.segments, userData, this.rowData);\n if (dataSource.length <= 0) {\n this.validateDuration(this.rowData);\n }\n }\n };\n // eslint-disable-next-line\n DialogEdit.prototype.updateSegmentsData = function (segmentForm, data) {\n var gridObj = segmentForm.ej2_instances[0];\n var isEdit = gridObj.isEdit;\n var dataSource;\n if (gridObj.isEdit) {\n gridObj.endEdit();\n }\n if (isEdit && gridObj.currentViewData.length != gridObj.dataSource['length']) {\n dataSource = gridObj.dataSource;\n }\n else {\n dataSource = gridObj.currentViewData;\n }\n this.updateSegmentTaskData(dataSource);\n };\n DialogEdit.prototype.updateGeneralTab = function (generalForm, isCustom) {\n var ganttObj = this.parent;\n var childNodes = generalForm.childNodes;\n var tasksData = {};\n if (!this.isEdit) {\n tasksData = this.addedRecord;\n }\n for (var i = 0; i < childNodes.length; i++) {\n var div = childNodes[i];\n var inputElement = div.querySelector('input[id^=\"' + ganttObj.element.id + '\"]') || div.querySelector('textarea[id^=\"' + ganttObj.element.id + '\"]');\n if (inputElement) {\n var fieldName = inputElement.id.replace(ganttObj.element.id, '');\n var controlObj = div.querySelector('#' + ganttObj.element.id + fieldName).ej2_instances[0];\n if (this.parent.columnByField[this.parent.taskFields.id].editType === \"stringedit\" && fieldName === this.parent.taskFields.id) {\n var valueString = controlObj.value.toString();\n controlObj.value = valueString;\n }\n var column = ganttObj.columnByField[fieldName];\n if (!isNullOrUndefined(column.edit) && isNullOrUndefined(column.edit.params)) {\n var read = column.edit.read;\n if (typeof read === 'string') {\n read = getObject(read, window);\n tasksData[fieldName] = read(inputElement, controlObj.value);\n }\n else {\n tasksData[fieldName] = column.edit.read(inputElement, controlObj.value);\n }\n }\n else if (isCustom && column.editType === 'booleanedit') {\n if (inputElement instanceof HTMLInputElement && inputElement.checked === true) {\n tasksData[fieldName] = true;\n }\n else {\n tasksData[fieldName] = false;\n }\n }\n else {\n tasksData[fieldName] = controlObj.value;\n if (this.parent.enableHtmlSanitizer && typeof (controlObj.value) === 'string') {\n controlObj.value = SanitizeHtmlHelper.sanitize(controlObj.value);\n tasksData[fieldName] = controlObj.value;\n }\n }\n }\n }\n if (this.isEdit) {\n if (!isCustom) {\n this.updateScheduleProperties(this.editedRecord, this.rowData);\n }\n ganttObj.editModule.validateUpdateValues(tasksData, this.rowData, true);\n }\n };\n DialogEdit.prototype.updateScheduleProperties = function (fromRecord, toRecord) {\n this.parent.setRecordValue('startDate', fromRecord.ganttProperties.startDate, toRecord.ganttProperties, true);\n this.parent.setRecordValue('endDate', fromRecord.ganttProperties.endDate, toRecord.ganttProperties, true);\n this.parent.setRecordValue('duration', fromRecord.ganttProperties.duration, toRecord.ganttProperties, true);\n this.parent.setRecordValue('durationUnit', fromRecord.ganttProperties.durationUnit, toRecord.ganttProperties, true);\n this.parent.setRecordValue('work', fromRecord.ganttProperties.work, toRecord.ganttProperties, true);\n this.parent.setRecordValue('type', fromRecord.ganttProperties.taskType, toRecord.ganttProperties, true);\n this.parent.setRecordValue('resourceNames', fromRecord.ganttProperties.resourceNames, toRecord.ganttProperties, true);\n this.parent.setRecordValue('resourceInfo', fromRecord.ganttProperties.resourceInfo, toRecord.ganttProperties, true);\n if (!isNullOrUndefined(this.parent.taskFields.startDate)) {\n this.parent.dataOperation.updateMappingData(toRecord, this.parent.taskFields.startDate);\n }\n if (!isNullOrUndefined(this.parent.taskFields.endDate)) {\n this.parent.dataOperation.updateMappingData(toRecord, this.parent.taskFields.endDate);\n }\n if (!isNullOrUndefined(this.parent.taskFields.duration)) {\n this.parent.dataOperation.updateMappingData(toRecord, this.parent.taskFields.duration);\n this.parent.setRecordValue('durationUnit', fromRecord.ganttProperties.durationUnit, this.rowData, true);\n if (this.rowData.ganttProperties.duration === 0) {\n this.parent.setRecordValue('isMilestone', true, toRecord.ganttProperties, true);\n }\n else {\n this.parent.setRecordValue('isMilestone', false, this.rowData.ganttProperties, true);\n }\n }\n if (!isNullOrUndefined(this.parent.taskFields.work)) {\n this.parent.dataOperation.updateMappingData(this.rowData, this.parent.taskFields.work);\n }\n if (!isNullOrUndefined(this.parent.taskFields.manual)) {\n this.parent.dataOperation.updateMappingData(this.rowData, this.parent.taskFields.manual);\n }\n if (!isNullOrUndefined(this.parent.taskFields.type)) {\n this.parent.dataOperation.updateMappingData(this.rowData, \"type\");\n }\n if (!isNullOrUndefined(this.parent.taskFields.resourceInfo)) {\n this.parent.dataOperation.updateMappingData(this.rowData, \"resourceInfo\");\n }\n };\n DialogEdit.prototype.updatePredecessorTab = function (preElement) {\n var gridObj = preElement.ej2_instances[0];\n if (gridObj.isEdit) {\n gridObj.endEdit();\n }\n var dataSource = gridObj.dataSource;\n var predecessorName = [];\n var newValues = [];\n var predecessorString = '';\n var ids = [];\n for (var i = 0; i < dataSource.length; i++) {\n var preData = dataSource[i];\n if (ids.indexOf(preData.id) === -1) {\n var name_1 = preData.id + preData.type;\n if (preData.offset && preData.offset.indexOf('-') !== -1) {\n name_1 += preData.offset;\n }\n else {\n name_1 += ('+' + preData.offset);\n }\n predecessorName.push(name_1);\n ids.push(preData.id);\n }\n }\n if (this.isEdit) {\n if (predecessorName.length > 0) {\n newValues = this.parent.predecessorModule.calculatePredecessor(predecessorName.join(','), this.rowData);\n this.parent.setRecordValue('predecessor', newValues, this.rowData.ganttProperties, true);\n predecessorString = this.parent.predecessorModule.getPredecessorStringValue(this.rowData);\n }\n else {\n newValues = [];\n this.parent.setRecordValue('predecessor', newValues, this.rowData.ganttProperties, true);\n predecessorString = '';\n }\n this.parent.setRecordValue('predecessorsName', predecessorString, this.rowData.ganttProperties, true);\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.dependency, predecessorString, this.rowData);\n this.parent.setRecordValue(this.parent.taskFields.dependency, predecessorString, this.rowData);\n this.parent.predecessorModule.updateUnscheduledDependency(this.rowData);\n }\n else {\n this.addedRecord[this.parent.taskFields.dependency] = predecessorName.length > 0 ? predecessorName.join(',') : '';\n }\n };\n DialogEdit.prototype.updateResourceTab = function (resourceElement) {\n var treeGridObj = resourceElement.ej2_instances[0];\n if (treeGridObj) {\n treeGridObj.grid.endEdit();\n }\n var selectedItems = this.ganttResources;\n if (this.parent.viewType === 'ResourceView' && !isNullOrUndefined(this.rowData.ganttProperties)) {\n if (JSON.stringify(this.ganttResources) !== JSON.stringify(this.rowData.ganttProperties.resourceInfo)) {\n this.isResourceUpdate = true;\n this.previousResource = !isNullOrUndefined(this.rowData.ganttProperties.resourceInfo) ? this.rowData.ganttProperties.resourceInfo.slice() : [];\n }\n else {\n this.isResourceUpdate = false;\n }\n }\n var idArray = [];\n if (this.isEdit) {\n this.parent.setRecordValue('resourceInfo', selectedItems, this.editedRecord.ganttProperties, true);\n this.parent.dataOperation.updateMappingData(this.editedRecord, 'resourceInfo');\n this.parent.editModule.updateResourceRelatedFields(this.editedRecord, 'resource');\n this.validateDuration(this.editedRecord);\n this.updateScheduleProperties(this.editedRecord, this.rowData);\n }\n else {\n for (var i = 0; i < selectedItems.length; i++) {\n idArray.push(selectedItems[i][this.parent.resourceFields.id]);\n this.isAddNewResource = true;\n }\n this.addedRecord[this.parent.taskFields.resourceInfo] = idArray;\n }\n };\n DialogEdit.prototype.updateNotesTab = function (notesElement) {\n var ganttObj = this.parent;\n var rte = notesElement.ej2_instances[0];\n if (this.isEdit) {\n if (ganttObj.columnByField[ganttObj.taskFields.notes].disableHtmlEncode === false) {\n this.parent.setRecordValue('notes', rte.getHtml(), this.rowData.ganttProperties, true);\n }\n else {\n this.parent.setRecordValue('notes', rte.getText(), this.rowData.ganttProperties, true);\n }\n ganttObj.dataOperation.updateMappingData(this.rowData, 'notes');\n }\n else {\n this.addedRecord[this.parent.taskFields.notes] = rte.getHtml();\n }\n };\n DialogEdit.prototype.updateCustomTab = function (customElement) {\n this.updateGeneralTab(customElement, true);\n };\n return DialogEdit;\n}());\nexport { DialogEdit };\n","import { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { EventHandler, select, removeClass, addClass, detach, compile, L10n } from '@syncfusion/ej2-base';\nimport { Browser, attributes, isNullOrUndefined, append, closest, prepend } from '@syncfusion/ej2-base';\nimport { dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nvar ICON = 'e-icons';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECK = 'e-check';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar INDETERMINATE = 'e-stop';\nvar checkAllParent = 'e-selectall-parent';\nvar searchBackIcon = 'e-input-group-icon e-back-icon e-icons';\nvar filterBarClearIcon = 'e-input-group-icon e-clear-icon e-icons';\nvar filterInput = 'e-input-filter';\nvar filterParent = 'e-filter-parent';\nvar mobileFilter = 'e-ddl-device-filter';\nvar clearIcon = 'e-clear-icon';\nvar popupFullScreen = 'e-popup-full-page';\nvar device = 'e-ddl-device';\nvar FOCUS = 'e-input-focus';\n/**\n * The Multiselect enable CheckBoxSelection call this inject module.\n */\nvar CheckBoxSelection = /** @class */ (function () {\n function CheckBoxSelection(parent) {\n this.activeLi = [];\n this.activeEle = [];\n this.parent = parent;\n this.removeEventListener();\n this.addEventListener();\n }\n CheckBoxSelection.prototype.getModuleName = function () {\n return 'CheckBoxSelection';\n };\n CheckBoxSelection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('updatelist', this.listSelection, this);\n this.parent.on('listoption', this.listOption, this);\n this.parent.on('selectAll', this.setSelectAll, this);\n this.parent.on('checkSelectAll', this.checkSelectAll, this);\n this.parent.on('searchBox', this.setSearchBox, this);\n this.parent.on('blur', this.onBlurHandler, this);\n this.parent.on('targetElement', this.targetElement, this);\n this.parent.on('deviceSearchBox', this.setDeviceSearchBox, this);\n this.parent.on('inputFocus', this.getFocus, this);\n this.parent.on('reOrder', this.setReorder, this);\n this.parent.on('activeList', this.getActiveList, this);\n this.parent.on('selectAllText', this.setLocale, this);\n this.parent.on('filterBarPlaceholder', this.setPlaceholder, this);\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n this.parent.on('addItem', this.checboxCreate, this);\n this.parent.on('popupFullScreen', this.setPopupFullScreen, this);\n };\n CheckBoxSelection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updatelist', this.listSelection);\n this.parent.off('listoption', this.listOption);\n this.parent.off('selectAll', this.setSelectAll);\n this.parent.off('checkSelectAll', this.checkSelectAll);\n this.parent.off('searchBox', this.setSearchBox);\n this.parent.off('blur', this.onBlurHandler);\n this.parent.off('targetElement', this.targetElement);\n this.parent.off('deviceSearchBox', this.setDeviceSearchBox);\n this.parent.off('inputFocus', this.getFocus);\n this.parent.off('reOrder', this.setReorder);\n this.parent.off('activeList', this.getActiveList);\n this.parent.off('selectAllText', this.setLocale);\n this.parent.off('filterBarPlaceholder', this.setPlaceholder);\n this.parent.off('addItem', this.checboxCreate);\n this.parent.off('popupFullScreen', this.setPopupFullScreen);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CheckBoxSelection.prototype.listOption = function (args) {\n var _this = this;\n if (isNullOrUndefined(this.parent.listCurrentOptions.itemCreated)) {\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n };\n }\n else {\n var itemCreated_1 = this.parent.listCurrentOptions.itemCreated;\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n itemCreated_1.apply(_this, [e]);\n };\n }\n };\n CheckBoxSelection.prototype.setPlaceholder = function (props) {\n Input.setPlaceholder(props.filterBarPlaceholder, this.filterInput);\n };\n CheckBoxSelection.prototype.checboxCreate = function (e) {\n var item;\n if (!isNullOrUndefined(e.item)) {\n item = e.item;\n }\n else {\n item = e;\n }\n if (this.parent.enableGroupCheckBox || (item.className !== 'e-list-group-item '\n && item.className !== 'e-list-group-item')) {\n var checkboxEle = createCheckBox(this.parent.createElement, true);\n var icon = select('div.' + ICON, item);\n item.insertBefore(checkboxEle, item.childNodes[isNullOrUndefined(icon) ? 0 : 1]);\n select('.' + CHECKBOXFRAME, checkboxEle);\n if (this.parent.enableGroupCheckBox) {\n this.parent.popupWrapper.classList.add('e-multiselect-group');\n }\n return item;\n }\n else {\n return item;\n }\n };\n CheckBoxSelection.prototype.setSelectAll = function () {\n if (this.parent.showSelectAll) {\n if (isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent = this.parent.createElement('div', {\n className: checkAllParent\n });\n this.selectAllSpan = this.parent.createElement('span', {\n className: 'e-all-text'\n });\n this.selectAllSpan.textContent = '';\n this.checkAllParent.appendChild(this.selectAllSpan);\n this.setLocale();\n this.checboxCreate(this.checkAllParent);\n if (this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.parent.filterParent)) {\n append([this.checkAllParent], this.parent.filterParent);\n }\n else {\n append([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n if (!this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.parent.filterParent)) {\n this.parent.filterParent.parentNode.insertBefore(this.checkAllParent, this.parent.filterParent.nextSibling);\n }\n else {\n prepend([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n EventHandler.add(this.checkAllParent, 'mousedown', this.clickHandler, this);\n }\n if (this.parent.list.classList.contains('e-nodata') || (this.parent.listData && this.parent.listData.length <= 1 &&\n !(this.parent.isDynamicDataChange)) || (this.parent.isDynamicDataChange &&\n this.parent.listData && this.parent.listData.length <= 1)) {\n this.checkAllParent.style.display = 'none';\n }\n else {\n this.checkAllParent.style.display = 'block';\n }\n this.parent.selectAllHeight = this.checkAllParent.getBoundingClientRect().height;\n }\n else if (!isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent.parentElement.removeChild(this.checkAllParent);\n this.checkAllParent = null;\n }\n };\n CheckBoxSelection.prototype.destroy = function () {\n this.removeEventListener();\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n this.checkAllParent = null;\n this.clearIconElement = null;\n this.filterInput = null;\n this.filterInputObj = null;\n this.checkWrapper = null;\n this.selectAllSpan = null;\n };\n CheckBoxSelection.prototype.listSelection = function (args) {\n var target;\n if (!isNullOrUndefined(args.e)) {\n var frameElm = args.li.querySelector('.e-checkbox-wrapper .e-frame');\n target = !isNullOrUndefined(args.e.target) ?\n (args.e.target.classList.contains('e-frame')\n && (!this.parent.showSelectAll\n || (this.checkAllParent && !this.checkAllParent.contains(args.e.target)))) ?\n args.e.target : args.li.querySelector('.e-checkbox-wrapper').childNodes[1]\n : args.li.querySelector('.e-checkbox-wrapper').childNodes[1];\n }\n else {\n var checkboxWrapper = args.li.querySelector('.e-checkbox-wrapper');\n target = checkboxWrapper ? checkboxWrapper.childNodes[1] : args.li.lastElementChild.childNodes[1];\n }\n if (this.parent.itemTemplate || this.parent.enableGroupCheckBox) {\n target = args.li.firstElementChild.childNodes[1];\n }\n if (!isNullOrUndefined(target)) {\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n }\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n var selectAll = false;\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), args.li, args.e, selectAll);\n }\n };\n CheckBoxSelection.prototype.validateCheckNode = function (checkWrap, isCheck, li, e, selectAll) {\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true, selectAll);\n };\n CheckBoxSelection.prototype.clickHandler = function (e) {\n var target;\n if (e.currentTarget.classList.contains(this.checkAllParent.className)) {\n target = e.currentTarget.firstElementChild.lastElementChild;\n }\n else {\n target = e.currentTarget;\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n var selectAll = true;\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), null, e, selectAll);\n }\n e.preventDefault();\n };\n CheckBoxSelection.prototype.changeState = function (wrapper, state, e, isPrevent, selectAll) {\n var ariaState;\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n ariaState = 'true';\n if (selectAll) {\n this.parent.selectAllItems(true, e);\n this.setLocale(true);\n }\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n ariaState = 'false';\n if (selectAll) {\n this.parent.selectAllItems(false, e);\n this.setLocale();\n }\n }\n else if (state === 'indeterminate' && !(frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK]);\n frameSpan.classList.add(INDETERMINATE);\n ariaState = 'false';\n if (selectAll) {\n this.parent.selectAllItems(false, e);\n this.setLocale();\n }\n }\n };\n CheckBoxSelection.prototype.setSearchBox = function (args) {\n if (isNullOrUndefined(this.parent.filterParent)) {\n this.parent.filterParent = this.parent.createElement('span', {\n className: filterParent\n });\n this.filterInput = this.parent.createElement('input', {\n attrs: { type: 'text' },\n className: filterInput\n });\n this.parent.element.parentNode.insertBefore(this.filterInput, this.parent.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n this.parent.mobFilter = false;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ? [searchBackIcon, filterBarClearIcon] : [filterBarClearIcon],\n properties: { placeholder: this.parent.filterBarPlaceholder }\n }, this.parent.createElement);\n if (!isNullOrUndefined(this.parent.cssClass)) {\n if (this.parent.cssClass.split(' ').indexOf('e-outline') !== -1) {\n addClass([this.filterInputObj.container], 'e-outline');\n }\n else if (this.parent.cssClass.split(' ').indexOf('e-filled') !== -1) {\n addClass([this.filterInputObj.container], 'e-filled');\n }\n }\n append([this.filterInputObj.container], this.parent.filterParent);\n prepend([this.parent.filterParent], args.popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'role': 'combobox',\n 'autocomplete': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'mousedown', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n EventHandler.add(this.filterInput, 'input', this.parent.onInput, this.parent);\n EventHandler.add(this.filterInput, 'keyup', this.parent.keyUp, this.parent);\n EventHandler.add(this.filterInput, 'keydown', this.parent.onKeyDown, this.parent);\n EventHandler.add(this.filterInput, 'blur', this.onBlurHandler, this);\n EventHandler.add(this.filterInput, 'paste', this.parent.pasteHandler, this.parent);\n this.parent.searchBoxHeight = (this.filterInputObj.container.parentElement).getBoundingClientRect().height;\n return this.filterInputObj;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CheckBoxSelection.prototype.clickOnBackIcon = function (e) {\n this.parent.hidePopup();\n removeClass([document.body, this.parent.popupObj.element], popupFullScreen);\n this.parent.inputElement.focus();\n };\n CheckBoxSelection.prototype.clearText = function (e) {\n this.parent.targetInputElement.value = '';\n if (this.parent.allowFiltering && this.parent.targetInputElement.value === '') {\n this.parent.search(null);\n }\n this.parent.refreshPopup();\n this.parent.refreshListItems(null);\n this.clearIconElement.style.visibility = 'hidden';\n this.filterInput.focus();\n this.setReorder(e);\n e.preventDefault();\n };\n CheckBoxSelection.prototype.setDeviceSearchBox = function () {\n this.parent.popupObj.element.classList.add(device);\n this.parent.popupObj.element.classList.add(mobileFilter);\n this.parent.popupObj.position = { X: 0, Y: 0 };\n this.parent.popupObj.dataBind();\n this.setSearchBoxPosition();\n this.backIconElement = this.filterInputObj.container.querySelector('.e-back-icon');\n this.clearIconElement = this.filterInputObj.container.querySelector('.' + clearIcon);\n this.clearIconElement.style.visibility = 'hidden';\n EventHandler.add(this.backIconElement, 'click', this.clickOnBackIcon, this);\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n };\n CheckBoxSelection.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n var selectAllHeight = 0;\n if (this.checkAllParent) {\n selectAllHeight = this.checkAllParent.getBoundingClientRect().height;\n }\n this.parent.popupObj.element.style.maxHeight = '100%';\n this.parent.popupObj.element.style.width = '100%';\n this.parent.list.style.maxHeight = (window.innerHeight - searchBoxHeight - selectAllHeight) + 'px';\n this.parent.list.style.height = (window.innerHeight - searchBoxHeight - selectAllHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n CheckBoxSelection.prototype.setPopupFullScreen = function () {\n if (this.parent && this.parent.popupObj) {\n attributes(this.parent.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, this.parent.popupObj.element], popupFullScreen);\n this.parent.popupObj.element.style.maxHeight = '100%';\n this.parent.popupObj.element.style.width = '100%';\n }\n };\n CheckBoxSelection.prototype.targetElement = function () {\n if (!isNullOrUndefined(this.clearIconElement)) {\n this.parent.targetInputElement = this.filterInput;\n this.clearIconElement.style.visibility = this.parent.targetInputElement.value === '' ? 'hidden' : 'visible';\n }\n return this.parent.targetInputElement.value;\n };\n CheckBoxSelection.prototype.onBlurHandler = function (e) {\n if (!this.parent.element.classList.contains('e-listbox')) {\n var target = void 0;\n if (this.parent.keyAction) {\n return;\n }\n if (Browser.isIE) {\n target = !isNullOrUndefined(e) && e.target;\n }\n if (!Browser.isIE) {\n target = !isNullOrUndefined(e) && e.relatedTarget;\n }\n // eslint-disable-next-line max-len\n if (this.parent.popupObj && document.body.contains(this.parent.popupObj.element) && this.parent.popupObj.element.contains(target)\n && !Browser.isIE && this.filterInput) {\n this.filterInput.focus();\n return;\n }\n if (this.parent.scrollFocusStatus && this.filterInput) {\n e.preventDefault();\n this.filterInput.focus();\n this.parent.scrollFocusStatus = false;\n return;\n }\n if (this.parent.popupObj && document.body.contains(this.parent.popupObj.element)\n && !this.parent.popupObj.element.classList.contains('e-popup-close')) {\n this.parent.inputFocus = false;\n this.parent.updateValueState(e, this.parent.value, this.parent.tempValues);\n this.parent.dispatchEvent(this.parent.hiddenElement, 'change');\n }\n if (this.parent.popupObj && document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close')) {\n this.parent.inputFocus = false;\n this.parent.overAllWrapper.classList.remove(FOCUS);\n this.parent.trigger('blur');\n this.parent.focused = true;\n }\n if (this.parent.popupObj && document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close') && !Browser.isDevice) {\n this.parent.hidePopup();\n }\n }\n };\n CheckBoxSelection.prototype.onDocumentClick = function (e) {\n if (this.parent.getLocaleName() !== 'listbox') {\n var target = e.target;\n if (!isNullOrUndefined(this.parent.popupObj) && closest(target, '[id=\"' + this.parent.popupObj.element.id + '\"]')) {\n if (!(this.filterInput && this.filterInput.value !== '')) {\n e.preventDefault();\n }\n }\n if (!(!isNullOrUndefined(this.parent.popupObj) && closest(target, '[id=\"' + this.parent.popupObj.element.id + '\"]'))\n && !isNullOrUndefined(this.parent.overAllWrapper) && !this.parent.overAllWrapper.contains(e.target)) {\n if (this.parent.overAllWrapper.classList.contains(dropDownBaseClasses.focus) || this.parent.isPopupOpen()) {\n this.parent.inputFocus = false;\n this.parent.scrollFocusStatus = false;\n this.parent.hidePopup();\n this.parent.onBlurHandler(e, true);\n this.parent.focused = true;\n }\n }\n else {\n this.parent.scrollFocusStatus = (Browser.isIE || Browser.info.name === 'edge') &&\n (document.activeElement === this.filterInput);\n }\n if (!isNullOrUndefined(this.parent.overAllWrapper) && !this.parent.overAllWrapper.contains(e.target) && this.parent.overAllWrapper.classList.contains('e-input-focus') &&\n !this.parent.isPopupOpen()) {\n if (Browser.isIE) {\n this.parent.onBlurHandler();\n }\n else {\n this.parent.onBlurHandler(e);\n }\n }\n if (this.filterInput === target) {\n this.filterInput.focus();\n }\n }\n };\n CheckBoxSelection.prototype.getFocus = function (e) {\n this.parent.overAllWrapper.classList.remove(FOCUS);\n if (this.parent.keyAction && e.value !== 'clear' && e.value !== 'focus') {\n this.parent.keyAction = false;\n return;\n }\n if (e.value === 'focus') {\n this.filterInput.focus();\n this.parent.removeFocus();\n EventHandler.remove(this.parent.list, 'keydown', this.parent.onKeyDown);\n }\n if (e.value === 'clear') {\n this.filterInput.value = '';\n this.clearIconElement.style.visibility = 'hidden';\n }\n };\n CheckBoxSelection.prototype.checkSelectAll = function (e) {\n if (e.value === 'check') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale(true);\n }\n if (e.value === 'uncheck') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale();\n }\n if (e.value === 'indeterminate') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale();\n }\n };\n CheckBoxSelection.prototype.setLocale = function (unSelect) {\n if (this.parent.selectAllText !== 'Select All' || this.parent.unSelectAllText !== 'Unselect All') {\n var template = unSelect ? this.parent.unSelectAllText : this.parent.selectAllText;\n this.selectAllSpan.textContent = '';\n var compiledString = compile(template);\n var templateName = unSelect ? 'unSelectAllText' : 'selectAllText';\n for (var _i = 0, _a = compiledString({}, this.parent, templateName, null, !this.parent.isStringTemplate); _i < _a.length; _i++) {\n var item = _a[_i];\n this.selectAllSpan.textContent = item.textContent;\n }\n }\n else {\n var l10nLocale = { selectAllText: 'Select All', unSelectAllText: 'Unselect All' };\n var l10n = new L10n(this.parent.getLocaleName(), {}, this.parent.locale);\n if (l10n.getConstant('selectAllText') === '') {\n l10n = new L10n('dropdowns', l10nLocale, this.parent.locale);\n }\n this.selectAllSpan.textContent = unSelect ? l10n.getConstant('unSelectAllText') : l10n.getConstant('selectAllText');\n }\n };\n CheckBoxSelection.prototype.getActiveList = function (args) {\n if (args.li.classList.contains('e-active')) {\n this.activeLi.push(args.li.cloneNode(true));\n }\n else {\n this.activeLi.splice(args.index, 1);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CheckBoxSelection.prototype.setReorder = function (args) {\n if (this.parent.enableSelectionOrder && !isNullOrUndefined(this.parent.value)) {\n var activeLiCount = this.parent.ulElement.querySelectorAll('li.e-active').length;\n var remLi = void 0;\n var ulEle_1 = this.parent.createElement('ul', {\n className: 'e-list-parent e-ul e-reorder'\n });\n if (activeLiCount > 0) {\n var activeListItems = this.parent.ulElement.querySelectorAll('li.e-active');\n activeListItems.forEach(function (item) {\n ulEle_1.appendChild(item);\n });\n remLi = this.parent.ulElement.querySelectorAll('li.e-active');\n addClass(remLi, 'e-reorder-hide');\n prepend([ulEle_1], this.parent.list);\n }\n this.parent.focusAtFirstListItem();\n }\n };\n return CheckBoxSelection;\n}());\nexport { CheckBoxSelection };\n","import { isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\nimport { getValue, createElement, extend } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constants';\nimport { parentsUntil, formatString, isScheduledTask, getIndex } from '../base/utils';\nimport { Dialog } from '@syncfusion/ej2-popups';\n/**\n * File for handling connector line edit operation in Gantt.\n *\n */\nvar ConnectorLineEdit = /** @class */ (function () {\n function ConnectorLineEdit(ganttObj) {\n /**\n * @private\n */\n this.validationPredecessor = null;\n /** @private */\n this.confirmPredecessorDialog = null;\n /** @private */\n this.predecessorIndex = null;\n /** @private */\n this.childRecord = null;\n this.parent = ganttObj;\n this.dateValidateModule = this.parent.dateValidationModule;\n this.parent.on('initPredessorDialog', this.initPredecessorValidationDialog, this);\n }\n /**\n * To update connector line edit element.\n *\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.updateConnectorLineEditElement = function (e) {\n var element = this.getConnectorLineHoverElement(e.target);\n if (!getValue('editModule.taskbarEditModule.taskBarEditAction', this.parent)) {\n this.highlightConnectorLineElements(element);\n }\n };\n /**\n * To get hovered connector line element.\n *\n * @param {EventTarget} target .\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.getConnectorLineHoverElement = function (target) {\n var isOnLine = parentsUntil(target, cls.connectorLineSVG);\n var isArrow = parentsUntil(target, cls.connectorLineArrow);\n var isCriticalLine = parentsUntil(target, cls.criticalConnectorLineSVG);\n var isCriticalArrow = parentsUntil(target, cls.criticalConnectorArrowSVG);\n if (isOnLine || isArrow || isCriticalLine || isCriticalArrow) {\n return parentsUntil(target, cls.connectorLineContainer);\n }\n else {\n return null;\n }\n };\n /**\n * To highlight connector line while hover.\n *\n * @param {Element} element .\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.highlightConnectorLineElements = function (element) {\n if (element) {\n if (element !== this.connectorLineElement) {\n this.removeHighlight();\n this.addHighlight(element);\n }\n }\n else {\n this.removeHighlight();\n }\n };\n /**\n * To add connector line highlight class.\n *\n * @param {Element} element .\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.addHighlight = function (element) {\n this.connectorLineElement = element;\n var pathElement = element.querySelector('.' + cls.connectorLineSVG);\n var criticalElement = element.querySelector('.' + cls.criticalConnectorLineSVG);\n if (pathElement) {\n pathElement.setAttribute('stroke-width', '2');\n }\n else {\n criticalElement.setAttribute('stroke-width', '2');\n }\n };\n /**\n * To remove connector line highlight class.\n *\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.removeHighlight = function () {\n if (this.connectorLineElement) {\n var pathElement = this.connectorLineElement.querySelector('.' + cls.connectorLineSVG);\n var criticalElement = this.connectorLineElement.querySelector('.' + cls.criticalConnectorLineSVG);\n if (pathElement) {\n pathElement.setAttribute('stroke-width', '1');\n }\n else {\n criticalElement.setAttribute('stroke-width', '1');\n }\n this.connectorLineElement = null;\n }\n };\n /**\n * To remove connector line highlight class.\n *\n * @param {IGanttData[]} records .\n * @returns {string} .\n * @private\n */\n ConnectorLineEdit.prototype.getEditedConnectorLineString = function (records) {\n var ganttRecord;\n var predecessorsCollection;\n var predecessor;\n var parentGanttRecord;\n var childGanttRecord;\n var connectorObj;\n var idArray = [];\n var lineArray = [];\n var editedConnectorLineString = '';\n for (var count = 0; count < records.length; count++) {\n ganttRecord = records[count];\n predecessorsCollection = ganttRecord.ganttProperties.predecessor;\n if (predecessorsCollection) {\n for (var predecessorCount = 0; predecessorCount < predecessorsCollection.length; predecessorCount++) {\n predecessor = predecessorsCollection[predecessorCount];\n var from = 'from';\n var to = 'to';\n this.parent.connectorLineModule.removeConnectorLineById('parent' + predecessor[from] + 'child' + predecessor[to]);\n parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor[\"\" + from]);\n childGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor[\"\" + to]);\n if ((!this.parent.allowParentDependency && (parentGanttRecord && parentGanttRecord.expanded === true) ||\n (childGanttRecord && childGanttRecord.expanded === true)) || (this.parent.allowParentDependency && (parentGanttRecord || childGanttRecord))) {\n connectorObj =\n this.parent.predecessorModule.updateConnectorLineObject(parentGanttRecord, childGanttRecord, predecessor);\n if (!isNullOrUndefined(connectorObj)) {\n var lineIndex = idArray.indexOf(connectorObj.connectorLineId);\n var lineString = this.parent.connectorLineModule.getConnectorLineTemplate(connectorObj);\n if (lineIndex !== -1) {\n lineArray[lineIndex] = lineString;\n }\n else {\n idArray.push(connectorObj.connectorLineId);\n lineArray.push(lineString);\n }\n }\n }\n }\n editedConnectorLineString = lineArray.join('');\n }\n }\n return editedConnectorLineString;\n };\n /**\n * Tp refresh connector lines of edited records\n *\n * @param {IGanttData[]} editedRecord .\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.refreshEditedRecordConnectorLine = function (editedRecord) {\n this.parent.connectorLineModule.removePreviousConnectorLines(this.parent.previousRecords);\n this.parent.connectorLineModule.expandedRecords = this.parent.virtualScrollModule && this.parent.enableVirtualization ?\n this.parent.updatedRecords : this.parent.getExpandedRecords(this.parent.updatedRecords);\n var editedConnectorLineString = this.getEditedConnectorLineString(editedRecord);\n this.parent.connectorLineModule.svgObject.innerHTML =\n this.parent.connectorLineModule.svgObject.innerHTML + editedConnectorLineString;\n };\n ConnectorLineEdit.prototype.idFromPredecessor = function (pre) {\n var preArray = pre.split(',');\n var preIdArray = [];\n var values;\n var offsetValue;\n var match = [];\n for (var j = 0; j < preArray.length; j++) {\n var strArray = [];\n values = preArray[j].split('+');\n offsetValue = '+';\n if (preArray[j].indexOf('-') >= 0) {\n values = preArray[j].split('-');\n offsetValue = '-';\n }\n if (!isNullOrUndefined(values[0])) {\n var ids = this.parent.viewType === 'ResourceView' ? this.parent.getTaskIds() : this.parent.ids;\n if (ids.indexOf(values[0]) === -1) {\n if (values[0].indexOf(' ') !== -1) {\n match = values[0].split(' ');\n if (match.length === 1) {\n match = values[0].match(/(\\d+|[A-z]+)/g);\n }\n strArray.push(match[0]);\n }\n else {\n if (values[0].length === 1 || values[0].length === 2) {\n strArray.push(values[0]);\n }\n else {\n strArray.push(values[0].slice(0, -2));\n }\n }\n }\n else {\n strArray.push(values[0]);\n }\n }\n preIdArray.push((strArray.join('')));\n }\n return preIdArray;\n };\n ConnectorLineEdit.prototype.predecessorValidation = function (predecessor, record) {\n var recordId = record.rowUniqueID;\n var currentId;\n var currentRecord;\n for (var count = 0; count < predecessor.length; count++) {\n currentId = predecessor[count];\n var visitedIdArray = [];\n var predecessorCollection = predecessor.slice(0);\n predecessorCollection.splice(count, 1);\n var _loop_1 = function () {\n var currentIdArray = [];\n if (visitedIdArray.indexOf(currentId) === -1) {\n //Predecessor id not in records collection\n if (isNullOrUndefined(this_1.parent.connectorLineModule.getRecordByID(currentId))) {\n return { value: false };\n }\n currentRecord = this_1.parent.connectorLineModule.getRecordByID(currentId).ganttProperties;\n if (!isNullOrUndefined(currentRecord.predecessor) && currentRecord.predecessor.length > 0) {\n currentRecord.predecessor.forEach(function (value) {\n if (currentRecord.rowUniqueID.toString() !== value.from) {\n currentIdArray.push(value.from.toString());\n }\n });\n }\n /* eslint-disable-next-line */\n if (recordId.toString() === currentRecord.rowUniqueID.toString() || currentIdArray.indexOf(recordId.toString()) !== -1) {\n return { value: false };\n }\n visitedIdArray.push(currentId);\n if (!isNullOrUndefined(currentRecord.predecessor) && currentRecord.predecessor.length > 0) {\n currentId = currentRecord.predecessor[0].from;\n }\n else {\n return \"break\";\n }\n }\n else {\n return \"break\";\n }\n };\n var this_1 = this;\n while (currentId !== null) {\n var state_1 = _loop_1();\n if (typeof state_1 === \"object\")\n return state_1.value;\n if (state_1 === \"break\")\n break;\n }\n }\n return true;\n };\n // Get the root parent of the record\n ConnectorLineEdit.prototype.getRootParent = function (rec) {\n var parentRec = rec;\n if (rec.parentItem) {\n parentRec = this.parent.flatData.filter(function (item) {\n return item.uniqueID === rec.parentUniqueID;\n })[0];\n if (parentRec.parentItem) {\n parentRec = this.getRootParent(parentRec);\n }\n return parentRec;\n }\n return parentRec;\n };\n // To check whether the predecessor drawn is valid for parent task\n ConnectorLineEdit.prototype.validateParentPredecessor = function (fromRecord, toRecord) {\n if (toRecord.hasChildRecords && !fromRecord.hasChildRecords) {\n if (fromRecord.parentUniqueID === toRecord.uniqueID) {\n return false;\n }\n else {\n do {\n if (fromRecord.parentItem) {\n fromRecord = this.parent.flatData[this.parent.ids.indexOf(fromRecord.parentItem.taskId)];\n if (fromRecord.uniqueID === toRecord.uniqueID) {\n return false;\n }\n }\n } while (fromRecord.parentItem);\n }\n }\n else if (!toRecord.hasChildRecords && fromRecord.hasChildRecords) {\n if (toRecord.parentUniqueID === fromRecord.uniqueID) {\n return false;\n }\n else {\n do {\n if (toRecord.parentItem) {\n toRecord = this.parent.flatData[this.parent.ids.indexOf(toRecord.parentItem.taskId)];\n if (toRecord.uniqueID === fromRecord.uniqueID) {\n return false;\n }\n }\n } while (toRecord.parentItem);\n }\n }\n else if (toRecord.hasChildRecords && fromRecord.hasChildRecords) {\n if (toRecord.parentItem && fromRecord.parentItem) {\n if (fromRecord.parentUniqueID === toRecord.uniqueID || fromRecord.uniqueID === toRecord.parentUniqueID) {\n return false;\n }\n }\n else {\n if (!toRecord.parentItem && fromRecord.parentItem) {\n var fromRootParent = this.parent.connectorLineEditModule.getRootParent(fromRecord);\n if (fromRootParent.uniqueID === toRecord.uniqueID) {\n return false;\n }\n }\n else if (toRecord.parentItem && !fromRecord.parentItem) {\n var toRootParent = this.parent.connectorLineEditModule.getRootParent(toRecord);\n if (toRootParent.uniqueID === fromRecord.uniqueID) {\n return false;\n }\n }\n }\n }\n return true;\n };\n /**\n * To validate predecessor relations\n *\n * @param {IGanttData} ganttRecord .\n * @param {string} predecessorString .\n * @returns {boolean} .\n * @private\n */\n ConnectorLineEdit.prototype.validatePredecessorRelation = function (ganttRecord, predecessorString) {\n var flag = true;\n var recordId = this.parent.viewType === 'ResourceView' ? ganttRecord.ganttProperties.taskId\n : ganttRecord.ganttProperties.rowUniqueID;\n var predecessorIdArray;\n var currentId;\n if (!isNullOrUndefined(predecessorString) && predecessorString.length > 0) {\n predecessorIdArray = this.idFromPredecessor(predecessorString);\n var _loop_2 = function (count) {\n //Check edited item has parent item in predecessor collection\n if (!this_2.parent.allowParentDependency) {\n var checkParent = this_2.checkParentRelation(ganttRecord, predecessorIdArray);\n if (!checkParent) {\n return { value: false };\n }\n }\n else {\n if (parseInt(predecessorIdArray[predecessorIdArray.length - 1]) !== ganttRecord[this_2.parent.taskFields.id]) {\n var num = this_2.parent.ids.indexOf(predecessorIdArray[predecessorIdArray.length - 1]);\n var fromRecord = this_2.parent.currentViewData[num];\n if (fromRecord && ganttRecord) {\n flag = this_2.validateParentPredecessor(fromRecord, ganttRecord);\n }\n }\n }\n // Check if predecessor exist more then one\n var tempIdArray = predecessorIdArray.slice(0);\n var checkArray = [];\n var countFlag = true;\n tempIdArray.forEach(function (value) {\n if (checkArray.indexOf(value) === -1) {\n checkArray.push(value);\n }\n else {\n countFlag = false;\n }\n });\n if (!countFlag) {\n return { value: false };\n }\n //Cyclick check\n currentId = predecessorIdArray[count];\n var visitedIdArray = [];\n var predecessorCollection = predecessorIdArray.slice(0);\n predecessorCollection.splice(count, 1);\n var _loop_3 = function () {\n var currentIdArray = [];\n var currentIdIndex;\n var currentRecord;\n if (visitedIdArray.indexOf(currentId) === -1) {\n //Predecessor id not in records collection\n if (isNullOrUndefined(this_2.parent.connectorLineModule.getRecordByID(currentId.toString()))) {\n return { value: false };\n }\n currentRecord = this_2.parent.connectorLineModule.getRecordByID(currentId.toString()).ganttProperties;\n // let currentPredecessor='';\n if (!isNullOrUndefined(currentRecord.predecessor) && currentRecord.predecessor.length > 0) {\n currentRecord.predecessor.forEach(function (value, index) {\n if (currentRecord.rowUniqueID.toString() !== value.from) {\n currentIdArray.push(value.from.toString());\n currentIdIndex = index;\n }\n });\n // currentPredecessor=currentRecord.predecessor[0].from\n }\n if (recordId.toString() === currentRecord.rowUniqueID.toString() ||\n currentIdArray.indexOf(recordId.toString()) !== -1) {\n return { value: false };\n }\n visitedIdArray.push(currentId);\n if (!isNullOrUndefined(currentRecord.predecessor) && currentRecord.predecessor.length > 0) {\n var result = void 0;\n if (currentIdArray.length > 1) {\n result = this_2.predecessorValidation(currentIdArray, ganttRecord.ganttProperties);\n }\n else if (currentIdArray.length === 1) {\n currentId = currentRecord.predecessor[currentIdIndex].from;\n }\n if (result === false) {\n return { value: false };\n }\n }\n else {\n return \"break\";\n }\n }\n else {\n return \"break\";\n }\n };\n while (currentId !== null) {\n var state_3 = _loop_3();\n if (typeof state_3 === \"object\")\n return state_3;\n if (state_3 === \"break\")\n break;\n }\n };\n var this_2 = this;\n for (var count = 0; count < predecessorIdArray.length; count++) {\n var state_2 = _loop_2(count);\n if (typeof state_2 === \"object\")\n return state_2.value;\n }\n }\n return flag;\n };\n /**\n * To add dependency for Task\n *\n * @param {IGanttData} ganttRecord .\n * @param {string} predecessorString .\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.addPredecessor = function (ganttRecord, predecessorString) {\n var tempPredecessorString = isNullOrUndefined(ganttRecord.ganttProperties.predecessorsName) ||\n ganttRecord.ganttProperties.predecessorsName === '' ?\n predecessorString : (ganttRecord.ganttProperties.predecessorsName + ',' + predecessorString);\n this.updatePredecessorHelper(ganttRecord, tempPredecessorString);\n };\n /**\n * To remove dependency from task\n *\n * @param {IGanttData} ganttRecord .\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.removePredecessor = function (ganttRecord) {\n this.updatePredecessorHelper(ganttRecord, null);\n };\n /**\n * To modify current dependency values of Task\n *\n * @param {IGanttData} ganttRecord .\n * @param {string} predecessorString .\n * @param {ITaskbarEditedEventArgs} editedArgs .\n * @returns {boolean} .\n * @private\n */\n ConnectorLineEdit.prototype.updatePredecessor = function (ganttRecord, predecessorString, editedArgs) {\n return this.updatePredecessorHelper(ganttRecord, predecessorString, editedArgs);\n };\n ConnectorLineEdit.prototype.updatePredecessorHelper = function (ganttRecord, predecessorString, editedArgs) {\n if (isUndefined(predecessorString) || this.validatePredecessorRelation(ganttRecord, predecessorString)) {\n this.parent.isOnEdit = true;\n var predecessorCollection = [];\n if (!isNullOrUndefined(predecessorString) && predecessorString !== '') {\n predecessorCollection = this.parent.predecessorModule.calculatePredecessor(predecessorString, ganttRecord);\n }\n this.parent.setRecordValue('predecessor', predecessorCollection, ganttRecord.ganttProperties, true);\n var stringValue = this.parent.predecessorModule.getPredecessorStringValue(ganttRecord);\n this.parent.setRecordValue('predecessorsName', stringValue, ganttRecord.ganttProperties, true);\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.dependency, stringValue, ganttRecord);\n this.parent.setRecordValue(this.parent.taskFields.dependency, stringValue, ganttRecord);\n var args = {};\n args.action = editedArgs && editedArgs.action && editedArgs.action === 'CellEditing' ? editedArgs.action : 'DrawConnectorLine';\n args.data = ganttRecord;\n this.parent.editModule.initiateUpdateAction(args);\n return true;\n }\n else {\n return false;\n }\n };\n ConnectorLineEdit.prototype.checkParentRelation = function (ganttRecord, predecessorIdArray) {\n var editingData = ganttRecord;\n var checkParent = true;\n if (editingData && editingData.parentItem) {\n if (predecessorIdArray.indexOf(editingData.parentItem.taskId.toString()) !== -1) {\n return false;\n }\n }\n var _loop_4 = function (p) {\n var record = this_3.parent.currentViewData.filter(function (item) {\n return item && item.ganttProperties.rowUniqueID.toString() === predecessorIdArray[p].toString();\n });\n if (record[0] && record[0].hasChildRecords) {\n return { value: false };\n }\n };\n var this_3 = this;\n for (var p = 0; p < predecessorIdArray.length; p++) {\n var state_4 = _loop_4(p);\n if (typeof state_4 === \"object\")\n return state_4.value;\n }\n return checkParent;\n };\n ConnectorLineEdit.prototype.initPredecessorValidationDialog = function () {\n if (this.parent.taskFields.dependency && this.parent.isInPredecessorValidation) {\n var dialogElement = createElement('div', {\n id: this.parent.element.id + '_dialogValidationRule'\n });\n this.parent.element.appendChild(dialogElement);\n this.renderValidationDialog();\n }\n };\n /**\n * To render validation dialog\n *\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.renderValidationDialog = function () {\n var validationDialog = new Dialog({\n header: 'Validate Editing',\n isModal: true,\n enableRtl: this.parent.enableRtl,\n visible: false,\n width: '50%',\n showCloseIcon: true,\n close: this.validationDialogClose.bind(this),\n content: '',\n buttons: [\n {\n click: this.validationDialogOkButton.bind(this),\n buttonModel: { content: this.parent.localeObj.getConstant('okText'), isPrimary: true }\n },\n {\n click: this.validationDialogCancelButton.bind(this),\n buttonModel: { content: this.parent.localeObj.getConstant('cancel') }\n }\n ],\n target: this.parent.element,\n animationSettings: { effect: 'None' }\n });\n document.getElementById(this.parent.element.id + '_dialogValidationRule').innerHTML = '';\n validationDialog.isStringTemplate = true;\n validationDialog.appendTo('#' + this.parent.element.id + '_dialogValidationRule');\n this.parent.validationDialogElement = validationDialog;\n };\n ConnectorLineEdit.prototype.validationDialogOkButton = function () {\n var currentArgs = this.parent.currentEditedArgs;\n currentArgs.validateMode.preserveLinkWithEditing =\n document.getElementById(this.parent.element.id + '_ValidationAddlineOffset').checked;\n currentArgs.validateMode.removeLink =\n document.getElementById(this.parent.element.id + '_ValidationRemoveline').checked;\n currentArgs.validateMode.respectLink =\n document.getElementById(this.parent.element.id + '_ValidationCancel').checked;\n this.applyPredecessorOption();\n this.parent.validationDialogElement.hide();\n };\n ConnectorLineEdit.prototype.validationDialogCancelButton = function () {\n this.parent.currentEditedArgs.validateMode.respectLink = true;\n this.applyPredecessorOption();\n this.parent.validationDialogElement.hide();\n };\n ConnectorLineEdit.prototype.validationDialogClose = function (e) {\n if (getValue('isInteraction', e)) {\n this.parent.currentEditedArgs.validateMode.respectLink = true;\n this.applyPredecessorOption();\n }\n };\n /**\n * Validate and apply the predecessor option from validation dialog\n *\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.applyPredecessorOption = function () {\n var args = this.parent.currentEditedArgs;\n var ganttRecord = args.data;\n if (args.validateMode.respectLink) {\n this.parent.editModule.reUpdatePreviousRecords();\n this.parent.chartRowsModule.refreshRecords([args.data]);\n }\n else if (args.validateMode.removeLink) {\n this.checkChildRecords(ganttRecord);\n this.parent.editModule.updateEditedTask(args.editEventArgs);\n }\n else if (args.validateMode.preserveLinkWithEditing) {\n if (this.parent.UpdateOffsetOnTaskbarEdit) {\n this.calculateOffset(ganttRecord);\n }\n this.parent.editModule.updateEditedTask(args.editEventArgs);\n }\n };\n ConnectorLineEdit.prototype.checkChildRecords = function (ganttRecord) {\n this.validationPredecessor = ganttRecord.ganttProperties.predecessor;\n if (!isNullOrUndefined(this.validationPredecessor)) {\n this.removePredecessors(ganttRecord, this.validationPredecessor);\n }\n if (ganttRecord.childRecords.length > 0) {\n for (var i = 0; i < ganttRecord.childRecords.length; i++) {\n var childRecord = ganttRecord.childRecords[i];\n this.validationPredecessor = childRecord.ganttProperties.predecessor;\n if (!isNullOrUndefined(this.validationPredecessor)) {\n this.removePredecessors(childRecord, this.validationPredecessor);\n }\n if (childRecord.childRecords.length > 0) {\n this.checkChildRecords(childRecord);\n }\n }\n }\n else if (!isNullOrUndefined(ganttRecord.parentItem)) {\n var parentRecord = this.parent.getRecordByID(ganttRecord.parentItem.taskId);\n this.validationPredecessor = parentRecord.ganttProperties.predecessor;\n this.removePredecessors(parentRecord, this.validationPredecessor);\n }\n };\n ConnectorLineEdit.prototype.calculateOffset = function (record) {\n var prevPredecessor = extend([], record.ganttProperties.predecessor, [], true);\n var validPredecessor = this.parent.predecessorModule.getValidPredecessor(record);\n for (var i = 0; i < validPredecessor.length; i++) {\n var predecessor = validPredecessor[parseInt(i.toString(), 10)];\n var parentTask = this.parent.connectorLineModule.getRecordByID(predecessor.from);\n var offset = void 0;\n if (isScheduledTask(parentTask.ganttProperties) && isScheduledTask(record.ganttProperties)) {\n var tempStartDate = void 0;\n var tempEndDate = void 0;\n var tempDuration = void 0;\n var isNegativeOffset = void 0;\n switch (predecessor.type) {\n case 'FS':\n tempStartDate = new Date(parentTask.ganttProperties.endDate.getTime());\n tempEndDate = new Date(record.ganttProperties.startDate.getTime());\n break;\n case 'SS':\n tempStartDate = new Date(parentTask.ganttProperties.startDate.getTime());\n tempEndDate = new Date(record.ganttProperties.startDate.getTime());\n break;\n case 'SF':\n tempStartDate = new Date(parentTask.ganttProperties.startDate.getTime());\n tempEndDate = new Date(record.ganttProperties.endDate.getTime());\n break;\n case 'FF':\n tempStartDate = new Date(parentTask.ganttProperties.endDate.getTime());\n tempEndDate = new Date(record.ganttProperties.endDate.getTime());\n break;\n }\n if (tempStartDate.getTime() < tempEndDate.getTime()) {\n tempStartDate = this.dateValidateModule.checkStartDate(tempStartDate);\n tempEndDate = this.dateValidateModule.checkEndDate(tempEndDate, null);\n isNegativeOffset = false;\n }\n else {\n var tempDate = new Date(tempStartDate.getTime());\n tempStartDate = this.dateValidateModule.checkStartDate(tempEndDate);\n tempEndDate = this.dateValidateModule.checkEndDate(tempDate, null);\n isNegativeOffset = true;\n }\n if (tempStartDate.getTime() < tempEndDate.getTime()) {\n tempDuration = this.dateValidateModule.getDuration(tempStartDate, tempEndDate, predecessor.offsetUnit, true, false);\n offset = isNegativeOffset ? (tempDuration * -1) : tempDuration;\n }\n else {\n offset = 0;\n }\n }\n else {\n offset = 0;\n }\n var preIndex = getIndex(predecessor, 'from', prevPredecessor, 'to');\n prevPredecessor[preIndex].offset = offset;\n // Update predecessor in predecessor task\n var parentPredecessors = extend([], parentTask.ganttProperties.predecessor, [], true);\n var parentPreIndex = getIndex(predecessor, 'from', parentPredecessors, 'to');\n parentPredecessors[parentPreIndex].offset = offset;\n this.parent.setRecordValue('predecessor', parentPredecessors, parentTask.ganttProperties, true);\n }\n this.parent.setRecordValue('predecessor', prevPredecessor, record.ganttProperties, true);\n var predecessorString = this.parent.predecessorModule.getPredecessorStringValue(record);\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.dependency, predecessorString, record);\n this.parent.setRecordValue(this.parent.taskFields.dependency, predecessorString, record);\n this.parent.setRecordValue('predecessorsName', predecessorString, record.ganttProperties, true);\n };\n /**\n * Update predecessor value with user selection option in predecessor validation dialog\n *\n * @param {IGanttData} ganttRecord .\n * @param {IPredecessor[]} predecessor .\n * @returns {void} .\n */\n ConnectorLineEdit.prototype.removePredecessors = function (ganttRecord, predecessor) {\n var prevPredecessor = extend([], [], ganttRecord.ganttProperties.predecessor, true);\n if (isNullOrUndefined(predecessor)) {\n return;\n }\n var preLength = predecessor.length;\n for (var i = 0; i < preLength; i++) {\n var parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor[i].from);\n var parentPredecessor = extend([], [], parentGanttRecord.ganttProperties.predecessor, true);\n var index = getIndex(predecessor[i], 'from', prevPredecessor, 'to');\n prevPredecessor.splice(index, 1);\n var parentIndex = getIndex(predecessor[parseInt(i.toString(), 10)], 'from', parentPredecessor, 'to');\n parentPredecessor.splice(parentIndex, 1);\n this.parent.setRecordValue('predecessor', parentPredecessor, parentGanttRecord.ganttProperties, true);\n }\n if (prevPredecessor.length !== ganttRecord.ganttProperties.predecessor.length) {\n this.parent.setRecordValue('predecessor', prevPredecessor, ganttRecord.ganttProperties, true);\n var predecessorString = this.parent.predecessorModule.getPredecessorStringValue(ganttRecord);\n this.parent.setRecordValue('predecessorsName', predecessorString, ganttRecord.ganttProperties, true);\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.dependency, predecessorString, ganttRecord);\n this.parent.setRecordValue(this.parent.taskFields.dependency, predecessorString, ganttRecord);\n }\n };\n /**\n * To open predecessor validation dialog\n *\n * @param {object} args .\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.openValidationDialog = function (args) {\n var contentTemplate = this.validationDialogTemplate(args);\n this.parent.validationDialogElement.setProperties({ content: contentTemplate });\n this.parent.validationDialogElement.show();\n };\n /**\n * Predecessor link validation dialog template\n *\n * @param {object} args .\n * @returns {HTMLElement} .\n * @private\n */\n ConnectorLineEdit.prototype.validationDialogTemplate = function (args) {\n var ganttId = this.parent.element.id;\n var contentdiv = createElement('div', {\n className: 'e-ValidationContent'\n });\n var taskData = getValue('task', args);\n var parenttaskData = getValue('parentTask', args);\n var violationType = getValue('violationType', args);\n var recordName = taskData.ganttProperties.taskName;\n var recordNewStartDate = this.parent.getFormatedDate(taskData.ganttProperties.startDate, 'MM/dd/yyyy');\n var parentName = parenttaskData.ganttProperties.taskName;\n var recordArgs = [recordName, parentName];\n var topContentText;\n if (violationType === 'taskBeforePredecessor_FS') {\n topContentText = this.parent.localeObj.getConstant('taskBeforePredecessor_FS');\n }\n else if (violationType === 'taskAfterPredecessor_FS') {\n topContentText = this.parent.localeObj.getConstant('taskAfterPredecessor_FS');\n }\n else if (violationType === 'taskBeforePredecessor_SS') {\n topContentText = this.parent.localeObj.getConstant('taskBeforePredecessor_SS');\n }\n else if (violationType === 'taskAfterPredecessor_SS') {\n topContentText = this.parent.localeObj.getConstant('taskAfterPredecessor_SS');\n }\n else if (violationType === 'taskBeforePredecessor_FF') {\n topContentText = this.parent.localeObj.getConstant('taskBeforePredecessor_FF');\n }\n else if (violationType === 'taskAfterPredecessor_FF') {\n topContentText = this.parent.localeObj.getConstant('taskAfterPredecessor_FF');\n }\n else if (violationType === 'taskBeforePredecessor_SF') {\n topContentText = this.parent.localeObj.getConstant('taskBeforePredecessor_SF');\n }\n else if (violationType === 'taskAfterPredecessor_SF') {\n topContentText = this.parent.localeObj.getConstant('taskAfterPredecessor_SF');\n }\n topContentText = formatString(topContentText, recordArgs);\n var topContent = '
      ' + topContentText + '
      ';\n var innerTable = '' +\n '' +\n '' +\n '
      ';\n contentdiv.innerHTML = topContent + innerTable;\n return contentdiv;\n };\n /**\n * To validate the types while editing the taskbar\n *\n * @param {IGanttData} ganttRecord .\n * @returns {boolean} .\n * @private\n */\n ConnectorLineEdit.prototype.validateTypes = function (ganttRecord, data) {\n var predecessor = this.parent.predecessorModule.getValidPredecessor(ganttRecord);\n var parentGanttRecord;\n this.validationPredecessor = [];\n var violatedParent;\n var ganttTaskData;\n var violateType;\n var startDate = this.parent.predecessorModule.getPredecessorDate(ganttRecord, predecessor);\n if (data) {\n ganttTaskData = data.ganttProperties;\n }\n else {\n ganttTaskData = ganttRecord.ganttProperties;\n }\n var endDate = this.parent.allowUnscheduledTasks && isNullOrUndefined(startDate) ?\n ganttTaskData.endDate :\n this.dateValidateModule.getEndDate(startDate, ganttTaskData.duration, ganttTaskData.durationUnit, ganttTaskData, false);\n for (var i = 0; i < predecessor.length; i++) {\n parentGanttRecord = this.parent.connectorLineModule.getRecordByID(predecessor[i].from);\n var violationType = null;\n if (predecessor[i].type === 'FS') {\n if (ganttTaskData.startDate < startDate) {\n this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);\n violationType = 'taskBeforePredecessor_FS';\n }\n else if (ganttTaskData.startDate > startDate) {\n this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);\n violationType = 'taskAfterPredecessor_FS';\n }\n }\n else if (predecessor[i].type === 'SS') {\n if (ganttTaskData.startDate < startDate) {\n this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);\n violationType = 'taskBeforePredecessor_SS';\n }\n else if (ganttTaskData.startDate > startDate) {\n this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);\n violationType = 'taskAfterPredecessor_SS';\n }\n }\n else if (predecessor[i].type === 'FF') {\n if (endDate <= parentGanttRecord.ganttProperties.endDate) {\n this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);\n violationType = 'taskBeforePredecessor_FF';\n }\n else if (endDate > parentGanttRecord.ganttProperties.endDate) {\n this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);\n violationType = 'taskAfterPredecessor_FF';\n }\n }\n else if (predecessor[i].type === 'SF') {\n if (endDate < parentGanttRecord.ganttProperties.startDate) {\n this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);\n violationType = 'taskBeforePredecessor_SF';\n }\n else if (endDate >= parentGanttRecord.ganttProperties.startDate) {\n this.validationPredecessor.push(predecessor[parseInt(i.toString(), 10)]);\n violationType = 'taskAfterPredecessor_SF';\n }\n }\n if (!isNullOrUndefined(violationType) && isNullOrUndefined(violateType)) {\n violatedParent = parentGanttRecord;\n violateType = violationType;\n }\n }\n var validateArgs = {\n parentTask: violatedParent,\n task: ganttRecord,\n violationType: violateType\n };\n return validateArgs;\n };\n /**\n * Method to remove and update new predecessor collection in successor record\n *\n * @param {IGanttData} data .\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.addRemovePredecessor = function (data) {\n var prevData = this.parent.previousRecords[data.uniqueID];\n var newPredecessor = data.ganttProperties.predecessor.slice();\n // eslint-disable-next-line\n if (prevData && prevData.ganttProperties && prevData.ganttProperties.hasOwnProperty('predecessor')) {\n var prevPredecessor = prevData.ganttProperties.predecessor;\n if (!isNullOrUndefined(prevPredecessor)) {\n for (var p = 0; p < prevPredecessor.length; p++) {\n var parentGanttRecord = this.parent.connectorLineModule.getRecordByID(prevPredecessor[parseInt(p.toString(), 10)].from);\n if (parentGanttRecord === data) {\n data.ganttProperties.predecessor.push(prevPredecessor[parseInt(p.toString(), 10)]);\n }\n else {\n var parentPredecessor = extend([], [], parentGanttRecord.ganttProperties.predecessor, true);\n var parentIndex = getIndex(prevPredecessor[parseInt(p.toString(), 10)], 'from', parentPredecessor, 'to');\n if (parentIndex !== -1) {\n parentPredecessor.splice(parentIndex, 1);\n this.parent.setRecordValue('predecessor', parentPredecessor, parentGanttRecord.ganttProperties, true);\n }\n }\n }\n }\n if (!isNullOrUndefined(newPredecessor)) {\n for (var n = 0; n < newPredecessor.length; n++) {\n var parentGanttRecord = this.parent.connectorLineModule.getRecordByID(newPredecessor[parseInt(n.toString(), 10)].from);\n var parentPredecessor = extend([], [], parentGanttRecord.ganttProperties.predecessor, true);\n parentPredecessor.push(newPredecessor[parseInt(n.toString(), 10)]);\n this.parent.setRecordValue('predecessor', parentPredecessor, parentGanttRecord.ganttProperties, true);\n }\n }\n }\n };\n /**\n * Method to remove a predecessor from a record.\n *\n * @param {IGanttData} childRecord .\n * @param {number} index .\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.removePredecessorByIndex = function (childRecord, index) {\n var childPredecessor = childRecord.ganttProperties.predecessor;\n var predecessor = childPredecessor.splice(index, 1);\n var parentRecord = this.parent.connectorLineModule.getRecordByID(predecessor[0].from);\n var parentPredecessor = parentRecord.ganttProperties.predecessor;\n var parentIndex = getIndex(predecessor[0], 'from', parentPredecessor, 'to');\n parentPredecessor.splice(parentIndex, 1);\n var predecessorString = this.parent.predecessorModule.getPredecessorStringValue(childRecord);\n childPredecessor.push(predecessor[0]);\n this.parent.connectorLineEditModule.updatePredecessor(childRecord, predecessorString);\n };\n /**\n * To render predecessor delete confirmation dialog\n *\n * @returns {void} .\n * @private\n */\n ConnectorLineEdit.prototype.renderPredecessorDeleteConfirmDialog = function () {\n this.confirmPredecessorDialog = new Dialog({\n width: '320px',\n isModal: true,\n enableRtl: this.parent.enableRtl,\n content: this.parent.localeObj.getConstant('confirmPredecessorDelete'),\n buttons: [\n {\n click: this.confirmOkDeleteButton.bind(this),\n buttonModel: { content: this.parent.localeObj.getConstant('okText'), isPrimary: true }\n },\n {\n click: this.confirmCloseDialog.bind(this),\n buttonModel: { content: this.parent.localeObj.getConstant('cancel') }\n }\n ],\n target: this.parent.element,\n animationSettings: { effect: 'None' }\n });\n var confirmDialog = createElement('div', {\n id: this.parent.element.id + '_deletePredecessorConfirmDialog'\n });\n this.parent.element.appendChild(confirmDialog);\n this.confirmPredecessorDialog.isStringTemplate = true;\n this.confirmPredecessorDialog.appendTo(confirmDialog);\n };\n ConnectorLineEdit.prototype.confirmCloseDialog = function () {\n this.confirmPredecessorDialog.destroy();\n };\n ConnectorLineEdit.prototype.confirmOkDeleteButton = function () {\n this.removePredecessorByIndex(this.childRecord, this.predecessorIndex);\n this.confirmPredecessorDialog.destroy();\n };\n return ConnectorLineEdit;\n}());\nexport { ConnectorLineEdit };\n","import { isNullOrUndefined, isUndefined, extend, setValue, getValue, deleteObject, createElement } from '@syncfusion/ej2-base';\nimport { DataManager, Query, ODataAdaptor, WebApiAdaptor } from '@syncfusion/ej2-data';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { getSwapKey, isScheduledTask, getTaskData, isRemoteData, getIndex, isCountRequired, updateDates } from '../base/utils';\nimport { CellEdit } from './cell-edit';\nimport { TaskbarEdit } from './taskbar-edit';\nimport { DialogEdit } from './dialog-edit';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { MultiSelect, CheckBoxSelection, DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { ConnectorLineEdit } from './connector-line-edit';\n/**\n * The Edit Module is used to handle editing actions.\n *\n */\nvar Edit = /** @class */ (function () {\n function Edit(parent) {\n this.isFromDeleteMethod = false;\n this.targetedRecords = [];\n this.isNewRecordAdded = false;\n this.isValidatedEditedRecord = false;\n /** @hidden */\n this.updateParentRecords = [];\n /** @hidden */\n this.isaddtoBottom = false;\n this.confirmDialog = null;\n this.taskbarMoved = false;\n this.predecessorUpdated = false;\n this.isBreakLoop = false;\n this.isResourceTaskDeleted = false;\n /**\n * @private\n */\n this.deletedTaskDetails = [];\n this.parent = parent;\n this.validatedChildItems = [];\n if (this.parent.editSettings.allowEditing && this.parent.editSettings.mode === 'Auto') {\n this.cellEditModule = new CellEdit(this.parent);\n }\n if (this.parent.taskFields.dependency) {\n this.parent.connectorLineEditModule = new ConnectorLineEdit(this.parent);\n }\n if (this.parent.editSettings.allowAdding || (this.parent.editSettings.allowEditing &&\n (this.parent.editSettings.mode === 'Dialog' || this.parent.editSettings.mode === 'Auto'))) {\n this.dialogModule = new DialogEdit(this.parent);\n }\n if (this.parent.editSettings.allowTaskbarEditing) {\n this.taskbarEditModule = new TaskbarEdit(this.parent);\n }\n if (this.parent.editSettings.allowDeleting) {\n var confirmDialog = createElement('div', {\n id: this.parent.element.id + '_deleteConfirmDialog'\n });\n this.parent.element.appendChild(confirmDialog);\n this.renderDeleteConfirmDialog();\n }\n this.parent.treeGrid.recordDoubleClick = this.recordDoubleClick.bind(this);\n this.parent.treeGrid.editSettings.allowAdding = this.parent.editSettings.allowAdding;\n this.parent.treeGrid.editSettings.allowDeleting = this.parent.editSettings.allowDeleting;\n this.parent.treeGrid.editSettings.showDeleteConfirmDialog = this.parent.editSettings.showDeleteConfirmDialog;\n this.parent.treeGrid.editSettings.allowNextRowEdit = this.parent.editSettings.allowNextRowEdit;\n this.updateDefaultColumnEditors();\n }\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * Method to update default edit params and editors for Gantt\n *\n * @returns {void} .\n */\n Edit.prototype.updateDefaultColumnEditors = function () {\n var customEditorColumns = [this.parent.taskFields.id, this.parent.taskFields.progress, this.parent.taskFields.resourceInfo, 'taskType'];\n for (var i = 0; i < customEditorColumns.length; i++) {\n if (!isNullOrUndefined(customEditorColumns[i]) && customEditorColumns[i].length > 0) {\n // eslint-disable-next-line\n var column = this.parent.getColumnByField(customEditorColumns[i], this.parent.treeGridModule.treeGridColumns);\n if (column) {\n if (column.field === this.parent.taskFields.id) {\n this.updateIDColumnEditParams(column);\n }\n else if (column.field === this.parent.taskFields.progress && isNullOrUndefined(column.edit)) {\n this.updateProgessColumnEditParams(column);\n }\n else if (column.field === this.parent.taskFields.resourceInfo) {\n this.updateResourceColumnEditor(column);\n }\n else if (column.field === 'taskType') {\n this.updateTaskTypeColumnEditor(column);\n }\n }\n }\n }\n };\n /**\n * Method to update editors for id column in Gantt\n *\n * @param {ColumnModel} column .\n * @returns {void} .\n */\n Edit.prototype.updateIDColumnEditParams = function (column) {\n var editParam = {\n min: 0,\n decimals: 0,\n enableRtl: this.parent.enableRtl,\n validateDecimalOnType: true,\n format: 'n0',\n showSpinButton: false\n };\n this.updateEditParams(column, editParam);\n };\n /**\n * Method to update edit params of default progress column\n *\n * @param {ColumnModel} column .\n * @returns {void} .\n */\n Edit.prototype.updateProgessColumnEditParams = function (column) {\n var editParam = {\n min: 0,\n enableRtl: this.parent.enableRtl,\n decimals: 0,\n validateDecimalOnType: true,\n max: 100,\n format: 'n0'\n };\n this.updateEditParams(column, editParam);\n };\n /**\n * Assign edit params for id and progress columns\n *\n * @param {ColumnModel} column .\n * @param {object} editParam .\n * @returns {void} .\n */\n Edit.prototype.updateEditParams = function (column, editParam) {\n if (isNullOrUndefined(column.edit)) {\n column.edit = {};\n column.edit.params = {};\n }\n else if (isNullOrUndefined(column.edit.params)) {\n column.edit.params = {};\n }\n extend(editParam, column.edit.params);\n column.edit.params = editParam;\n var ganttColumn = this.parent.getColumnByField(column.field, this.parent.ganttColumns);\n ganttColumn.edit = column.edit;\n };\n /**\n * Method to update resource column editor for default resource column\n *\n * @param {ColumnModel} column .\n * @returns {void} .\n */\n Edit.prototype.updateResourceColumnEditor = function (column) {\n if (this.parent.editSettings.allowEditing && isNullOrUndefined(column.edit) && this.parent.editSettings.mode === 'Auto') {\n column.editType = 'dropdownedit';\n column.edit = this.getResourceEditor();\n var ganttColumn = this.parent.getColumnByField(column.field, this.parent.ganttColumns);\n ganttColumn.editType = 'dropdownedit';\n ganttColumn.edit = column.edit;\n }\n };\n /**\n * Method to create resource custom editor\n *\n * @returns {IEditCell} .\n */\n Edit.prototype.getResourceEditor = function () {\n var _this = this;\n var resourceSettings = this.parent.resourceFields;\n var editObject = {};\n var editor;\n MultiSelect.Inject(CheckBoxSelection);\n editObject.write = function (args) {\n _this.parent.treeGridModule.currentEditRow = {};\n editor = new MultiSelect({\n dataSource: new DataManager(_this.parent.resources),\n fields: { text: resourceSettings.name, value: resourceSettings.id },\n enableRtl: _this.parent.enableRtl,\n mode: 'CheckBox',\n showDropDownIcon: true,\n popupHeight: '350px',\n delimiterChar: ',',\n value: _this.parent.treeGridModule.getResourceIds(args.rowData)\n });\n editor.appendTo(args.element);\n };\n editObject.read = function (element) {\n var value = element.ej2_instances[0].value;\n var resourcesName = [];\n if (isNullOrUndefined(value)) {\n value = [];\n }\n for (var i = 0; i < value.length; i++) {\n for (var j = 0; j < _this.parent.resources.length; j++) {\n if (_this.parent.resources[j][resourceSettings.id] === value[i]) {\n resourcesName.push(_this.parent.resources[j][resourceSettings.name]);\n break;\n }\n }\n }\n _this.parent.treeGridModule.currentEditRow[_this.parent.taskFields.resourceInfo] = value;\n return resourcesName.join(',');\n };\n editObject.destroy = function () {\n if (editor) {\n editor.destroy();\n }\n };\n return editObject;\n };\n /**\n * Method to update task type column editor for task type\n *\n * @param {ColumnModel} column .\n * @returns {void} .\n */\n Edit.prototype.updateTaskTypeColumnEditor = function (column) {\n if (this.parent.editSettings.allowEditing && isNullOrUndefined(column.edit) && this.parent.editSettings.mode === 'Auto') {\n column.editType = 'dropdownedit';\n column.edit = this.getTaskTypeEditor();\n var ganttColumn = this.parent.getColumnByField(column.field, this.parent.ganttColumns);\n ganttColumn.editType = 'dropdownedit';\n ganttColumn.edit = column.edit;\n }\n };\n /**\n * Method to create task type custom editor\n *\n * @returns {IEditCell} .\n */\n Edit.prototype.getTaskTypeEditor = function () {\n var _this = this;\n var editObject = {};\n var editor;\n var types = [{ 'ID': 1, 'Value': 'FixedUnit' }, { 'ID': 2, 'Value': 'FixedWork' }, { 'ID': 3, 'Value': 'FixedDuration' }];\n editObject.write = function (args) {\n _this.parent.treeGridModule.currentEditRow = {};\n editor = new DropDownList({\n dataSource: new DataManager(types),\n enableRtl: _this.parent.enableRtl,\n fields: { value: 'Value' },\n popupHeight: '350px',\n value: getValue('taskType', args.rowData.ganttProperties)\n });\n editor.appendTo(args.element);\n };\n editObject.read = function (element) {\n var value = element.ej2_instances[0].value;\n var key = 'taskType';\n _this.parent.treeGridModule.currentEditRow[key] = value;\n return value;\n };\n editObject.destroy = function () {\n if (editor) {\n editor.destroy();\n }\n };\n return editObject;\n };\n /**\n * @returns {void} .\n * @private\n */\n Edit.prototype.reUpdateEditModules = function () {\n var editSettings = this.parent.editSettings;\n if (editSettings.allowEditing) {\n if (this.parent.editModule.cellEditModule && editSettings.mode === 'Dialog') {\n this.cellEditModule.destroy();\n this.parent.treeGrid.recordDoubleClick = this.recordDoubleClick.bind(this);\n }\n else if (isNullOrUndefined(this.parent.editModule.cellEditModule) && editSettings.mode === 'Auto') {\n this.cellEditModule = new CellEdit(this.parent);\n }\n if (this.parent.editModule.dialogModule && editSettings.mode === 'Auto') {\n this.parent.treeGrid.recordDoubleClick = undefined;\n }\n else if (isNullOrUndefined(this.parent.editModule.dialogModule)) {\n this.dialogModule = new DialogEdit(this.parent);\n }\n }\n else {\n if (this.cellEditModule) {\n this.cellEditModule.destroy();\n }\n if (this.dialogModule) {\n this.dialogModule.destroy();\n }\n }\n if (editSettings.allowDeleting && editSettings.showDeleteConfirmDialog) {\n if (isNullOrUndefined(this.confirmDialog)) {\n var confirmDialog = createElement('div', {\n id: this.parent.element.id + '_deleteConfirmDialog'\n });\n this.parent.element.appendChild(confirmDialog);\n this.renderDeleteConfirmDialog();\n }\n }\n else if (!editSettings.allowDeleting || !editSettings.showDeleteConfirmDialog) {\n if (this.confirmDialog && !this.confirmDialog.isDestroyed) {\n this.confirmDialog.destroy();\n }\n }\n if (editSettings.allowTaskbarEditing) {\n if (isNullOrUndefined(this.parent.editModule.taskbarEditModule)) {\n this.taskbarEditModule = new TaskbarEdit(this.parent);\n }\n }\n else {\n if (this.taskbarEditModule) {\n this.taskbarEditModule.destroy();\n }\n }\n };\n Edit.prototype.recordDoubleClick = function (args) {\n if (this.parent.editSettings.allowEditing && this.parent.editSettings.mode === 'Dialog') {\n var ganttData = void 0;\n if (args.row) {\n var rowIndex = getValue('rowIndex', args.row);\n ganttData = this.parent.currentViewData[rowIndex];\n }\n if (!isNullOrUndefined(ganttData)) {\n this.dialogModule.openEditDialog(ganttData);\n }\n }\n this.parent.ganttChartModule.recordDoubleClick(args);\n };\n /**\n * @returns {void} .\n * @private\n */\n Edit.prototype.destroy = function () {\n if (this.cellEditModule) {\n this.cellEditModule.destroy();\n }\n if (this.taskbarEditModule) {\n this.taskbarEditModule.destroy();\n }\n if (this.dialogModule) {\n this.dialogModule.destroy();\n }\n if (this.confirmDialog && !this.confirmDialog.isDestroyed) {\n this.confirmDialog.destroy();\n }\n };\n /**\n * Method to update record with new values.\n *\n * @param {Object} data - Defines new data to update.\n * @returns {void} .\n */\n Edit.prototype.updateRecordByID = function (data) {\n if (!this.parent.readOnly) {\n var tasks = this.parent.taskFields;\n if (isNullOrUndefined(data) || isNullOrUndefined(data[tasks.id])) {\n return;\n }\n var ganttData = this.parent.viewType === 'ResourceView' ?\n this.parent.flatData[this.parent.getTaskIds().indexOf('T' + data[tasks.id])] : this.parent.getRecordByID(data[tasks.id]);\n if (!isNullOrUndefined(this.parent.editModule) && ganttData) {\n this.parent.isOnEdit = true;\n this.validateUpdateValues(data, ganttData, true);\n if (data[this.parent.taskFields.resourceInfo]) {\n if (ganttData.ganttProperties.duration === 0) {\n this.parent.dataOperation.updateWorkWithDuration(ganttData);\n }\n this.updateResourceRelatedFields(ganttData, 'resource');\n this.parent.dateValidationModule.calculateEndDate(ganttData);\n }\n var keys = Object.keys(data);\n if (keys.indexOf(tasks.startDate) !== -1 || keys.indexOf(tasks.endDate) !== -1 ||\n keys.indexOf(tasks.duration) !== -1) {\n this.parent.dataOperation.calculateScheduledValues(ganttData, ganttData.taskData, false);\n }\n this.parent.dataOperation.updateWidthLeft(ganttData);\n if (!isUndefined(data[this.parent.taskFields.dependency]) &&\n data[this.parent.taskFields.dependency] !== ganttData.ganttProperties.predecessorsName) {\n this.parent.connectorLineEditModule.updatePredecessor(ganttData, data[this.parent.taskFields.dependency]);\n }\n else {\n var args = {};\n args.data = ganttData;\n if (this.parent.viewType === 'ResourceView') {\n args.action = 'methodUpdate';\n }\n this.parent.editModule.initiateUpdateAction(args);\n }\n }\n }\n };\n /**\n *\n * @param {object} data .\n * @param {IGanttData} ganttData .\n * @param {boolean} isFromDialog .\n * @returns {void} .\n * @private\n */\n Edit.prototype.validateUpdateValues = function (data, ganttData, isFromDialog) {\n var ganttObj = this.parent;\n var tasks = ganttObj.taskFields;\n var ganttPropByMapping = getSwapKey(ganttObj.columnMapping);\n var scheduleFieldNames = [];\n var isScheduleValueUpdated = false;\n if (!isNullOrUndefined(ganttData[tasks.milestone])) {\n if (ganttData[tasks.milestone] === true) {\n ganttData[tasks.milestone] = false;\n }\n }\n for (var _i = 0, _b = Object.keys(data); _i < _b.length; _i++) {\n var key = _b[_i];\n if ([tasks.startDate, tasks.endDate, tasks.duration].indexOf(key) !== -1) {\n if (isNullOrUndefined(data[\"\" + key]) && !ganttObj.allowUnscheduledTasks) {\n continue;\n }\n if (isFromDialog) {\n if (tasks.duration === key) {\n ganttObj.dataOperation.updateDurationValue(data[key], ganttData.ganttProperties);\n if (ganttData.ganttProperties.duration > 0 && ganttData.ganttProperties.isMilestone) {\n this.parent.setRecordValue('isMilestone', false, ganttData.ganttProperties, true);\n }\n ganttObj.dataOperation.updateMappingData(ganttData, ganttPropByMapping[key]);\n }\n else {\n var tempDate = typeof data[key] === 'string' ? new Date(data[key]) : data[key];\n ganttObj.setRecordValue(ganttPropByMapping[key], tempDate, ganttData.ganttProperties, true);\n ganttObj.dataOperation.updateMappingData(ganttData, ganttPropByMapping[key]);\n }\n }\n else {\n scheduleFieldNames.push(key);\n isScheduleValueUpdated = true;\n }\n }\n else if (tasks.resourceInfo === key) {\n var resourceData = ganttObj.dataOperation.setResourceInfo(data);\n if (this.parent.viewType === 'ResourceView') {\n if (JSON.stringify(resourceData) !== JSON.stringify(ganttData.ganttProperties.resourceInfo)) {\n this.parent.editModule.dialogModule.isResourceUpdate = true;\n this.parent.editModule.dialogModule.previousResource = !isNullOrUndefined(ganttData.ganttProperties.resourceInfo) ? ganttData.ganttProperties.resourceInfo.slice() : [];\n }\n else {\n this.parent.editModule.dialogModule.isResourceUpdate = false;\n }\n }\n ganttData.ganttProperties.resourceInfo = resourceData;\n ganttObj.dataOperation.updateMappingData(ganttData, 'resourceInfo');\n }\n else if (tasks.dependency === key) {\n //..\n }\n else if ([tasks.progress, tasks.notes, tasks.durationUnit, tasks.expandState,\n tasks.milestone, tasks.name, tasks.baselineStartDate,\n tasks.baselineEndDate, tasks.id, tasks.segments, tasks.cssClass].indexOf(key) !== -1) {\n var column = ganttObj.columnByField[key];\n /* eslint-disable-next-line */\n var value = data[key];\n if (!isNullOrUndefined(column) && (column.editType === 'datepickeredit' || column.editType === 'datetimepickeredit')) {\n value = ganttObj.dataOperation.getDateFromFormat(value);\n }\n var ganttPropKey = ganttPropByMapping[key];\n if (key === tasks.id) {\n ganttPropKey = 'taskId';\n }\n else if (key === tasks.name) {\n ganttPropKey = 'taskName';\n }\n else if (key === tasks.cssClass) {\n ganttPropKey = 'cssClass';\n }\n else if (key === tasks.milestone) {\n ganttPropKey = 'isMilestone';\n if (!isNullOrUndefined(tasks.duration)) {\n var ganttProp = ganttData.ganttProperties;\n var durationValue = data[tasks.duration];\n if (value) {\n durationValue = 0;\n }\n else {\n durationValue = durationValue <= 0 ? 1 : durationValue;\n }\n ganttObj.setRecordValue(tasks.duration, durationValue, ganttData, true);\n ganttObj.setRecordValue('duration', durationValue, ganttProp, true);\n ganttObj.setRecordValue('taskData.' + tasks.duration, durationValue, ganttData);\n }\n }\n else if ((key === tasks.segments) && (!isNullOrUndefined(ganttData.ganttProperties.segments))) {\n ganttPropKey = 'segments';\n /* eslint-disable-next-line */\n if (data && !isNullOrUndefined(data[this.parent.taskFields.segments]) && data[this.parent.taskFields.segments].length > 0) {\n var totDuration = 0;\n for (var i = 0; i < ganttData.ganttProperties.segments.length; i++) {\n totDuration = totDuration + ganttData.ganttProperties.segments[i].duration;\n }\n var sdate = ganttData.ganttProperties.startDate;\n /* eslint-disable-next-line */\n var edate = this.parent.dataOperation.getEndDate(sdate, totDuration, ganttData.ganttProperties.durationUnit, ganttData.ganttProperties, false);\n ganttObj.setRecordValue('endDate', ganttObj.dataOperation.getDateFromFormat(edate), ganttData.ganttProperties, true);\n }\n }\n if (!isNullOrUndefined(ganttPropKey)) {\n ganttObj.setRecordValue(ganttPropKey, value, ganttData.ganttProperties, true);\n }\n if ((key === tasks.baselineStartDate || key === tasks.baselineEndDate) &&\n (ganttData.ganttProperties.baselineStartDate && ganttData.ganttProperties.baselineEndDate)) {\n ganttObj.setRecordValue('baselineStartDate', ganttObj.dataOperation.checkBaselineStartDate(ganttData.ganttProperties.baselineStartDate), ganttData.ganttProperties, true);\n if (ganttData.ganttProperties.baselineEndDate && ganttData.ganttProperties.baselineEndDate.getHours() === 0 && this.parent.defaultEndTime !== 86400) {\n ganttObj.dataOperation.setTime(this.parent.defaultEndTime, ganttData.ganttProperties.baselineEndDate);\n }\n ganttObj.setRecordValue('baselineEndDate', ganttObj.dataOperation.checkBaselineEndDate(ganttData.ganttProperties.baselineEndDate), ganttData.ganttProperties, true);\n ganttObj.setRecordValue('baselineLeft', ganttObj.dataOperation.calculateBaselineLeft(ganttData.ganttProperties), ganttData.ganttProperties, true);\n ganttObj.setRecordValue('baselineWidth', ganttObj.dataOperation.calculateBaselineWidth(ganttData.ganttProperties), ganttData.ganttProperties, true);\n }\n ganttObj.setRecordValue('taskData.' + key, value, ganttData);\n /* eslint-disable-next-line */\n if (key === tasks.segments && data && !isNullOrUndefined(data[this.parent.taskFields.segments]) && data[this.parent.taskFields.segments].length > 0) {\n ganttObj.dataOperation.setSegmentsInfo(ganttData, true);\n }\n ganttObj.setRecordValue(key, value, ganttData);\n }\n else if (tasks.indicators === key) {\n var value = data[key];\n ganttObj.setRecordValue('indicators', value, ganttData.ganttProperties, true);\n ganttObj.setRecordValue('taskData.' + key, value, ganttData);\n ganttObj.setRecordValue(key, value, ganttData);\n }\n else if (tasks.work === key) {\n ganttObj.setRecordValue('work', data[key], ganttData.ganttProperties, true);\n this.parent.dataOperation.updateMappingData(ganttData, 'work');\n this.parent.dataOperation.updateMappingData(ganttData, 'duration');\n this.parent.dataOperation.updateMappingData(ganttData, 'endDate');\n }\n else if (key === tasks.type) {\n ganttObj.setRecordValue('taskType', data[key], ganttData.ganttProperties, true);\n //this.parent.dataOperation.updateMappingData(ganttData, 'taskType');\n }\n else if (ganttObj.customColumns.indexOf(key) !== -1) {\n var column = ganttObj.columnByField[key];\n /* eslint-disable-next-line */\n var value = data[key];\n if (isNullOrUndefined(column.edit)) {\n if (column.editType === 'datepickeredit' || column.editType === 'datetimepickeredit') {\n value = ganttObj.dataOperation.getDateFromFormat(value);\n }\n }\n ganttObj.setRecordValue('taskData.' + key, value, ganttData);\n ganttObj.setRecordValue(key, value, ganttData);\n }\n else if (tasks.manual === key) {\n ganttObj.setRecordValue('isAutoSchedule', !data[key], ganttData.ganttProperties, true);\n this.parent.setRecordValue(key, data[key], ganttData);\n this.updateTaskScheduleModes(ganttData);\n }\n }\n if (isScheduleValueUpdated) {\n this.validateScheduleValues(scheduleFieldNames, ganttData, data);\n }\n };\n /**\n * To update duration, work, resource unit\n *\n * @param {IGanttData} currentData .\n * @param {string} column .\n * @returns {void} .\n */\n Edit.prototype.updateResourceRelatedFields = function (currentData, column) {\n var ganttProp = currentData.ganttProperties;\n var taskType = ganttProp.taskType;\n var isEffectDriven;\n var isAutoSchedule = ganttProp.isAutoSchedule;\n if (!isNullOrUndefined(ganttProp.resourceInfo)) {\n if (ganttProp.work > 0 || column === 'work') {\n switch (taskType) {\n case 'FixedUnit':\n if (ganttProp.resourceInfo.length === 0) {\n return;\n }\n else if (isAutoSchedule && ganttProp.resourceInfo.length &&\n (column === 'work' || (column === 'resource'))) {\n this.parent.dataOperation.updateDurationWithWork(currentData);\n }\n else if (!isAutoSchedule && column === 'work') {\n this.parent.dataOperation.updateUnitWithWork(currentData);\n }\n else {\n this.parent.dataOperation.updateWorkWithDuration(currentData);\n }\n break;\n case 'FixedWork':\n if (ganttProp.resourceInfo.length === 0) {\n return;\n }\n else if (isAutoSchedule) {\n if (column === 'duration' || column === 'endDate') {\n this.parent.dataOperation.updateUnitWithWork(currentData);\n if (ganttProp.duration === 0) {\n this.parent.setRecordValue('work', 0, ganttProp, true);\n if (!isNullOrUndefined(this.parent.taskFields.work)) {\n this.parent.dataOperation.updateMappingData(currentData, 'work');\n }\n }\n }\n else {\n this.parent.dataOperation.updateDurationWithWork(currentData);\n }\n }\n else {\n if (column === 'work') {\n this.parent.dataOperation.updateUnitWithWork(currentData);\n }\n else {\n this.parent.dataOperation.updateWorkWithDuration(currentData);\n }\n }\n break;\n case 'FixedDuration':\n if (ganttProp.resourceInfo.length && (column === 'work' || (isAutoSchedule &&\n isEffectDriven && (column === 'resource')))) {\n this.parent.dataOperation.updateUnitWithWork(currentData);\n }\n else {\n this.parent.dataOperation.updateWorkWithDuration(currentData);\n }\n break;\n }\n }\n else {\n this.parent.dataOperation.updateWorkWithDuration(currentData);\n }\n }\n };\n Edit.prototype.validateScheduleValues = function (fieldNames, ganttData, data) {\n var ganttObj = this.parent;\n if (fieldNames.length > 2) {\n ganttObj.dataOperation.calculateScheduledValues(ganttData, data, false);\n }\n else if (fieldNames.length > 1) {\n this.validateScheduleByTwoValues(data, fieldNames, ganttData);\n }\n else {\n this.dialogModule.validateScheduleValuesByCurrentField(fieldNames[0], data[fieldNames[0]], ganttData);\n }\n };\n Edit.prototype.validateScheduleByTwoValues = function (data, fieldNames, ganttData) {\n var ganttObj = this.parent;\n var startDate;\n var endDate;\n var duration;\n var tasks = ganttObj.taskFields;\n var ganttProp = ganttData.ganttProperties;\n var isUnscheduledTask = ganttObj.allowUnscheduledTasks;\n if (fieldNames.indexOf(tasks.startDate) !== -1) {\n startDate = data[tasks.startDate];\n }\n if (fieldNames.indexOf(tasks.endDate) !== -1) {\n endDate = data[tasks.endDate];\n }\n if (fieldNames.indexOf(tasks.duration) !== -1) {\n duration = data[tasks.duration];\n }\n if (startDate && endDate || (isUnscheduledTask && (fieldNames.indexOf(tasks.startDate) !== -1) &&\n (fieldNames.indexOf(tasks.endDate) !== -1))) {\n ganttObj.setRecordValue('startDate', ganttObj.dataOperation.getDateFromFormat(startDate), ganttProp, true);\n ganttObj.setRecordValue('endDate', ganttObj.dataOperation.getDateFromFormat(endDate), ganttProp, true);\n ganttObj.dataOperation.calculateDuration(ganttData);\n }\n else if (endDate && duration || (isUnscheduledTask &&\n (fieldNames.indexOf(tasks.endDate) !== -1) && (fieldNames.indexOf(tasks.duration) !== -1))) {\n ganttObj.setRecordValue('endDate', ganttObj.dataOperation.getDateFromFormat(endDate), ganttProp, true);\n ganttObj.dataOperation.updateDurationValue(duration, ganttProp);\n }\n else if (startDate && duration || (isUnscheduledTask && (fieldNames.indexOf(tasks.startDate) !== -1)\n && (fieldNames.indexOf(tasks.duration) !== -1))) {\n ganttObj.setRecordValue('startDate', ganttObj.dataOperation.getDateFromFormat(startDate), ganttProp, true);\n ganttObj.dataOperation.updateDurationValue(duration, ganttProp);\n }\n };\n Edit.prototype.isTaskbarMoved = function (data) {\n var isMoved = false;\n var taskData = data.ganttProperties;\n var prevData = this.parent.previousRecords &&\n this.parent.previousRecords[data.uniqueID];\n if (prevData && prevData.ganttProperties) {\n var prevStart = getValue('ganttProperties.startDate', prevData);\n var prevEnd = getValue('ganttProperties.endDate', prevData);\n var prevDuration = getValue('ganttProperties.duration', prevData);\n var prevDurationUnit = getValue('ganttProperties.durationUnit', prevData);\n var keys = Object.keys(prevData.ganttProperties);\n if (keys.indexOf('startDate') !== -1 || keys.indexOf('endDate') !== -1 ||\n keys.indexOf('duration') !== -1 || keys.indexOf('durationUnit') !== -1) {\n if ((isNullOrUndefined(prevStart) && !isNullOrUndefined(taskData.startDate)) ||\n (isNullOrUndefined(prevEnd) && !isNullOrUndefined(taskData.endDate)) ||\n (isNullOrUndefined(taskData.startDate) && !isNullOrUndefined(prevStart)) ||\n (isNullOrUndefined(taskData.endDate) && !isNullOrUndefined(prevEnd)) ||\n (prevStart && prevStart.getTime() !== taskData.startDate.getTime())\n || (prevEnd && prevEnd.getTime() !== taskData.endDate.getTime())\n || (!isNullOrUndefined(prevDuration) && prevDuration !== taskData.duration)\n || (!isNullOrUndefined(prevDuration) && prevDuration === taskData.duration &&\n prevDurationUnit !== taskData.durationUnit)) {\n isMoved = true;\n }\n }\n }\n return isMoved;\n };\n Edit.prototype.isPredecessorUpdated = function (data) {\n var isPredecessorUpdated = false;\n var prevData = this.parent.previousRecords[data.uniqueID];\n // eslint-disable-next-line\n if (prevData && prevData.ganttProperties && prevData.ganttProperties.hasOwnProperty('predecessor')) {\n if (data.ganttProperties.predecessorsName !== prevData.ganttProperties.predecessorsName) {\n isPredecessorUpdated = true;\n }\n else {\n this.parent.setRecordValue('predecessor', prevData.ganttProperties.predecessor, data.ganttProperties, true);\n }\n }\n return isPredecessorUpdated;\n };\n /**\n * Method to check need to open predecessor validate dialog\n *\n * @param {IGanttData} data .\n * @returns {boolean} .\n */\n Edit.prototype.isCheckPredecessor = function (data) {\n var isValidatePredecessor = false;\n var prevData = this.parent.previousRecords[data.uniqueID];\n if (prevData && this.parent.taskFields.dependency && this.parent.isInPredecessorValidation &&\n this.parent.predecessorModule.getValidPredecessor(data).length > 0) {\n if (this.isTaskbarMoved(data)) {\n isValidatePredecessor = true;\n }\n }\n return isValidatePredecessor;\n };\n /**\n * Method to copy the ganttProperties values\n *\n * @param {IGanttData} data .\n * @param {IGanttData} updateData .\n * @returns {void} .\n * @private\n */\n Edit.prototype.updateGanttProperties = function (data, updateData) {\n var skipProperty = ['taskId', 'uniqueID', 'rowUniqueID', 'parentId'];\n Object.keys(data.ganttProperties).forEach(function (property) {\n if (skipProperty.indexOf(property) === -1) {\n updateData.ganttProperties[property] = data.ganttProperties[property];\n }\n });\n };\n /**\n * Method to update all dependent record on edit action\n *\n * @param {ITaskAddedEventArgs} args .\n * @returns {void} .\n * @private\n */\n Edit.prototype.initiateUpdateAction = function (args) {\n var isValidatePredecessor = this.isCheckPredecessor(args.data);\n var parentData;\n var childRecordIndex;\n if (!isNullOrUndefined(args.data.parentItem) && !isValidatePredecessor) {\n parentData = this.parent.getRecordByID(args.data.parentItem.taskId);\n if (this.isTaskbarMoved(args.data) && this.parent.predecessorModule.getValidPredecessor(parentData).length > 0\n && this.parent.isInPredecessorValidation) {\n isValidatePredecessor = true;\n }\n else {\n isValidatePredecessor = false;\n }\n }\n else if (args.data.childRecords.length > 0 && !isValidatePredecessor) {\n isValidatePredecessor = this.isCheckPredecessor(args.data);\n if (!isValidatePredecessor && this.isTaskbarMoved(args.data)) {\n for (var i = 0; i < args.data.childRecords.length; i++) {\n if (this.parent.predecessorModule.getValidPredecessor(args.data.childRecords[i]).length > 0) {\n childRecordIndex = i;\n isValidatePredecessor = true;\n }\n }\n }\n }\n this.taskbarMoved = this.isTaskbarMoved(args.data);\n this.predecessorUpdated = this.isPredecessorUpdated(args.data);\n if (this.predecessorUpdated) {\n this.parent.isConnectorLineUpdate = true;\n this.parent.connectorLineEditModule.addRemovePredecessor(args.data);\n }\n var validateObject = {};\n if (isValidatePredecessor) {\n if (!isNullOrUndefined(parentData)) {\n validateObject = this.parent.connectorLineEditModule.validateTypes(parentData, args.data);\n }\n else if (!isNullOrUndefined(childRecordIndex)) {\n validateObject = this.parent.connectorLineEditModule.validateTypes(args.data.childRecords[childRecordIndex], args.data);\n }\n else {\n validateObject = this.parent.connectorLineEditModule.validateTypes(args.data);\n }\n this.parent.isConnectorLineUpdate = true;\n if (!isNullOrUndefined(getValue('violationType', validateObject))) {\n var newArgs = this.validateTaskEvent(args);\n if (newArgs.validateMode.preserveLinkWithEditing === false &&\n newArgs.validateMode.removeLink === false &&\n newArgs.validateMode.respectLink === false) {\n this.parent.connectorLineEditModule.openValidationDialog(validateObject);\n }\n else {\n if (this.parent.editModule && this.parent.editModule.dialogModule &&\n this.parent.editModule.dialogModule['isEdit'] && this.predecessorUpdated) {\n this.isValidatedEditedRecord = true;\n this.parent.predecessorModule.validatePredecessor(args.data, [], '');\n }\n this.parent.connectorLineEditModule.applyPredecessorOption();\n }\n }\n else {\n this.updateEditedTask(args);\n }\n }\n else {\n if (this.taskbarMoved) {\n this.parent.isConnectorLineUpdate = true;\n }\n this.updateEditedTask(args);\n }\n };\n /**\n *\n * @param {ITaskbarEditedEventArgs} editedEventArgs method to trigger validate predecessor link by dialog\n * @returns {IValidateArgs} .\n */\n Edit.prototype.validateTaskEvent = function (editedEventArgs) {\n var newArgs = {};\n this.resetValidateArgs();\n this.parent.currentEditedArgs = newArgs;\n newArgs.cancel = false;\n newArgs.data = editedEventArgs.data;\n newArgs.requestType = 'validateLinkedTask';\n newArgs.validateMode = this.parent.dialogValidateMode;\n newArgs.editEventArgs = editedEventArgs;\n this.parent.actionBeginTask(newArgs);\n return newArgs;\n };\n Edit.prototype.resetValidateArgs = function () {\n this.parent.dialogValidateMode.preserveLinkWithEditing = true;\n this.parent.dialogValidateMode.removeLink = false;\n this.parent.dialogValidateMode.respectLink = false;\n };\n /**\n *\n * @param {ITaskAddedEventArgs} args - Edited event args like taskbar editing, dialog editing, cell editing\n * @returns {void} .\n * @private\n */\n Edit.prototype.updateEditedTask = function (args) {\n var ganttRecord = args.data;\n if (this.parent.autoCalculateDateScheduling) {\n this.updateParentChildRecord(ganttRecord);\n }\n if (this.parent.isConnectorLineUpdate && this.parent.autoCalculateDateScheduling) {\n /* validating predecessor for updated child items */\n for (var i = 0; i < this.validatedChildItems.length; i++) {\n var child = this.validatedChildItems[i];\n if (child.ganttProperties.predecessor && child.ganttProperties.predecessor.length > 0) {\n this.parent.editedTaskBarItem = child;\n this.parent.predecessorModule.validatePredecessor(child, [], '');\n }\n }\n this.parent.predecessorModule.isValidatedParentTaskID = '';\n /** validating predecessor for current edited records */\n if (ganttRecord.ganttProperties.predecessor) {\n this.parent.isMileStoneEdited = ganttRecord.ganttProperties.isMilestone;\n if (this.taskbarMoved) {\n this.parent.editedTaskBarItem = ganttRecord;\n }\n if (!this.isValidatedEditedRecord) {\n this.parent.predecessorModule.validatePredecessor(ganttRecord, [], '');\n }\n this.isValidatedEditedRecord = false;\n this.parent.predecessorModule.isValidatedParentTaskID = '';\n }\n if (this.parent.allowParentDependency && ganttRecord.hasChildRecords && this.parent.previousRecords[ganttRecord.uniqueID].ganttProperties.startDate &&\n (args.action === \"DrawConnectorLine\") || (args.action === \"DialogEditing\")) {\n this.updateChildItems(ganttRecord);\n }\n this.updateParentItemOnEditing();\n }\n /** Update parent up-to zeroth level */\n if (ganttRecord.parentItem) {\n if (this.parent.autoCalculateDateScheduling) {\n this.parent.dataOperation.updateParentItems(ganttRecord, true);\n }\n var parentData = this.parent.getRecordByID(ganttRecord.parentItem.taskId);\n if (!parentData.ganttProperties.predecessorsName) {\n this.parent.predecessorModule.validatePredecessor(parentData, [], '');\n this.updateParentItemOnEditing();\n }\n }\n this.initiateSaveAction(args);\n };\n Edit.prototype.updateParentItemOnEditing = function () {\n var childRecord = getValue('parentRecord', this.parent.predecessorModule);\n for (var i = 0; i < childRecord.length; i++) {\n this.parent.dataOperation.updateParentItems(childRecord[i]);\n }\n setValue('parentRecord', [], this.parent.predecessorModule);\n setValue('parentIds', [], this.parent.predecessorModule);\n };\n /**\n * To update parent records while perform drag action.\n *\n * @param {IGanttData} data .\n * @returns {void} .\n * @private\n */\n Edit.prototype.updateParentChildRecord = function (data) {\n var ganttRecord = data;\n if (ganttRecord.hasChildRecords && this.taskbarMoved && this.parent.taskMode === 'Auto' && (!isNullOrUndefined(this.parent.editModule.cellEditModule) && !this.parent.editModule.cellEditModule.isResourceCellEdited)) {\n this.updateChildItems(ganttRecord);\n }\n if (!isNullOrUndefined(this.parent.editModule.cellEditModule)) {\n this.parent.editModule.cellEditModule.isResourceCellEdited = false;\n }\n };\n /**\n * To update records while changing schedule mode.\n *\n * @param {IGanttData} data .\n * @returns {void} .\n * @private\n */\n Edit.prototype.updateTaskScheduleModes = function (data) {\n var currentValue = data[this.parent.taskFields.startDate];\n var ganttProp = data.ganttProperties;\n if (data.hasChildRecords && ganttProp.isAutoSchedule) {\n this.parent.setRecordValue('startDate', ganttProp.autoStartDate, ganttProp, true);\n this.parent.setRecordValue('endDate', ganttProp.autoEndDate, ganttProp, true);\n this.parent.setRecordValue('StartDate', ganttProp.autoStartDate, data, true);\n this.parent.setRecordValue('EndDate', ganttProp.autoEndDate, data, true);\n this.parent.setRecordValue('taskData.StartDate', ganttProp.autoStartDate, data, true);\n this.parent.setRecordValue('taskData.EndDate', ganttProp.autoEndDate, data, true);\n this.parent.setRecordValue('width', this.parent.dataOperation.calculateWidth(data, true), ganttProp, true);\n this.parent.setRecordValue('left', this.parent.dataOperation.calculateLeft(ganttProp, true), ganttProp, true);\n this.parent.setRecordValue('progressWidth', this.parent.dataOperation.getProgressWidth(ganttProp.width, ganttProp.progress), ganttProp, true);\n this.parent.dataOperation.calculateDuration(data);\n }\n else if (data.hasChildRecords && !ganttProp.isAutoSchedule) {\n this.parent.dataOperation.updateWidthLeft(data);\n this.parent.dataOperation.calculateDuration(data);\n this.parent.setRecordValue('autoStartDate', ganttProp.autoStartDate, ganttProp, true);\n this.parent.setRecordValue('autoEndDate', ganttProp.autoEndDate, ganttProp, true);\n this.parent.setRecordValue('autoDuration', this.parent.dataOperation.calculateAutoDuration(data), ganttProp, true);\n this.parent.dataOperation.updateAutoWidthLeft(data);\n }\n else {\n var startDate = this.parent.dateValidationModule.checkStartDate(currentValue, data.ganttProperties);\n this.parent.setRecordValue('startDate', startDate, data.ganttProperties, true);\n this.parent.dataOperation.updateMappingData(data, 'startDate');\n this.parent.dateValidationModule.calculateEndDate(data);\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.manual, data[this.parent.taskFields.manual], data);\n this.parent.dataOperation.updateWidthLeft(data);\n }\n };\n /**\n *\n * @param {IGanttData} data .\n * @param {Date} newStartDate .\n * @returns {void} .\n */\n Edit.prototype.calculateDateByRoundOffDuration = function (data, newStartDate) {\n var ganttRecord = data;\n var taskData = ganttRecord.ganttProperties;\n var projectStartDate = new Date(newStartDate.getTime());\n if (!isNullOrUndefined(taskData.endDate) && isNullOrUndefined(taskData.startDate)) {\n var endDate = this.parent.dateValidationModule.checkStartDate(projectStartDate, taskData, null);\n this.parent.setRecordValue('endDate', this.parent.dateValidationModule.checkEndDate(endDate, ganttRecord.ganttProperties), taskData, true);\n }\n else {\n this.parent.setRecordValue('startDate', this.parent.dateValidationModule.checkStartDate(projectStartDate, taskData, false), taskData, true);\n if (!isNullOrUndefined(taskData.duration)) {\n this.parent.dateValidationModule.calculateEndDate(ganttRecord);\n }\n }\n this.parent.dataOperation.updateWidthLeft(data);\n this.parent.dataOperation.updateTaskData(ganttRecord);\n };\n /**\n * To update progress value of parent tasks\n *\n * @param {IParent} cloneParent .\n * @returns {void} .\n * @private\n */\n Edit.prototype.updateParentProgress = function (cloneParent) {\n var parentProgress = 0;\n var parent = this.parent.getParentTask(cloneParent);\n var childRecords = parent.childRecords;\n var childCount = childRecords ? childRecords.length : 0;\n var totalProgress = 0;\n var milesStoneCount = 0;\n var taskCount = 0;\n var totalDuration = 0;\n var progressValues = {};\n if (childRecords) {\n for (var i = 0; i < childCount; i++) {\n if ((!childRecords[i].ganttProperties.isMilestone || childRecords[i].hasChildRecords) &&\n isScheduledTask(childRecords[i].ganttProperties)) {\n progressValues = this.parent.dataOperation.getParentProgress(childRecords[i]);\n totalProgress += getValue('totalProgress', progressValues);\n totalDuration += getValue('totalDuration', progressValues);\n }\n else {\n milesStoneCount += 1;\n }\n }\n taskCount = childCount - milesStoneCount;\n parentProgress = taskCount > 0 ? Math.round(totalProgress / totalDuration) : 0;\n if (isNaN(parentProgress)) {\n parentProgress = 0;\n }\n this.parent.setRecordValue('progressWidth', this.parent.dataOperation.getProgressWidth(parent.ganttProperties.isAutoSchedule ? parent.ganttProperties.width : parent.ganttProperties.autoWidth, parentProgress), parent.ganttProperties, true);\n this.parent.setRecordValue('progress', Math.floor(parentProgress), parent.ganttProperties, true);\n this.parent.setRecordValue('totalProgress', totalProgress, parent.ganttProperties, true);\n this.parent.setRecordValue('totalDuration', totalDuration, parent.ganttProperties, true);\n }\n this.parent.dataOperation.updateTaskData(parent);\n if (parent.parentItem) {\n this.updateParentProgress(parent.parentItem);\n }\n };\n /**\n * Method to revert cell edit action\n *\n * @param {object} args .\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n Edit.prototype.revertCellEdit = function (args) {\n this.parent.editModule.reUpdatePreviousRecords(false, true);\n this.resetEditProperties();\n };\n /**\n * @param {boolean} isRefreshChart .\n * @param {boolean} isRefreshGrid .\n * @returns {void} .\n * @private\n */\n Edit.prototype.reUpdatePreviousRecords = function (isRefreshChart, isRefreshGrid) {\n var collection = this.parent.previousRecords;\n var keys = Object.keys(collection);\n for (var i = 0; i < keys.length; i++) {\n var uniqueId = keys[i];\n var prevTask = collection[uniqueId];\n var originalData = this.parent.getTaskByUniqueID(uniqueId);\n this.copyTaskData(originalData.taskData, prevTask.taskData);\n delete prevTask.taskData;\n this.copyTaskData(originalData.ganttProperties, prevTask.ganttProperties);\n delete prevTask.ganttProperties;\n this.copyTaskData(originalData, prevTask);\n var rowIndex = this.parent.currentViewData.indexOf(originalData);\n if (isRefreshChart) {\n this.parent.chartRowsModule.refreshRow(rowIndex);\n }\n if (isRefreshGrid) {\n var dataId = this.parent.viewType === 'ProjectView' ? originalData.ganttProperties.taskId : originalData.ganttProperties.rowUniqueID;\n this.parent.treeGrid.grid.setRowData(dataId, originalData);\n var row = this.parent.treeGrid.grid.getRowObjectFromUID(this.parent.treeGrid.grid.getDataRows()[rowIndex].getAttribute('data-uid'));\n row.data = originalData;\n }\n }\n };\n /**\n * Copy previous task data value to edited task data\n *\n * @param {object} existing .\n * @param {object} newValue .\n * @returns {void} .\n */\n Edit.prototype.copyTaskData = function (existing, newValue) {\n if (!isNullOrUndefined(newValue)) {\n extend(existing, newValue);\n }\n };\n /**\n * To update schedule date on editing.\n *\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n Edit.prototype.updateScheduleDatesOnEditing = function (args) {\n //..\n };\n /**\n *\n * @param {IGanttData} ganttRecord .\n * @returns {void} .\n */\n Edit.prototype.updateChildItems = function (ganttRecord) {\n var previousData = this.parent.previousRecords[ganttRecord.uniqueID];\n var previousStartDate;\n if (isNullOrUndefined(previousData) ||\n (isNullOrUndefined(previousData) && !isNullOrUndefined(previousData.ganttProperties))) {\n previousStartDate = new Date(ganttRecord.ganttProperties.startDate.getTime());\n }\n else {\n if (!isNullOrUndefined(previousData.ganttProperties.startDate)) {\n previousStartDate = new Date(previousData.ganttProperties.startDate.getTime());\n }\n }\n var currentStartDate = ganttRecord.ganttProperties.startDate;\n var childRecords = [];\n var validStartDate;\n var validEndDate;\n var calcEndDate;\n var isRightMove;\n var durationDiff;\n this.getUpdatableChildRecords(ganttRecord, childRecords);\n if (childRecords.length === 0) {\n return;\n }\n if (!isNullOrUndefined(previousStartDate) && !isNullOrUndefined(currentStartDate) && previousStartDate.getTime() > currentStartDate.getTime()) {\n validStartDate = this.parent.dateValidationModule.checkStartDate(currentStartDate);\n validEndDate = this.parent.dateValidationModule.checkEndDate(previousStartDate, ganttRecord.ganttProperties);\n isRightMove = false;\n }\n else {\n validStartDate = this.parent.dateValidationModule.checkStartDate(previousStartDate);\n validEndDate = this.parent.dateValidationModule.checkEndDate(currentStartDate, ganttRecord.ganttProperties);\n isRightMove = true;\n }\n //Get Duration\n if (!isNullOrUndefined(validStartDate) && !isNullOrUndefined(validEndDate) && validStartDate.getTime() >= validEndDate.getTime()) {\n durationDiff = 0;\n }\n else {\n durationDiff = this.parent.dateValidationModule.getDuration(validStartDate, validEndDate, 'minute', true, false);\n }\n for (var i = 0; i < childRecords.length; i++) {\n if (childRecords[i].ganttProperties.isAutoSchedule) {\n if (durationDiff > 0) {\n var startDate = isScheduledTask(childRecords[i].ganttProperties) ?\n childRecords[i].ganttProperties.startDate : childRecords[i].ganttProperties.startDate ?\n childRecords[i].ganttProperties.startDate : childRecords[i].ganttProperties.endDate ?\n childRecords[i].ganttProperties.endDate : new Date(previousStartDate.toString());\n if (isRightMove) {\n calcEndDate = this.parent.dateValidationModule.getEndDate(this.parent.dateValidationModule.checkStartDate(startDate, childRecords[i].ganttProperties, childRecords[i].ganttProperties.isMilestone), durationDiff, 'minute', childRecords[i].ganttProperties, false);\n }\n else {\n calcEndDate = this.parent.dateValidationModule.getStartDate(this.parent.dateValidationModule.checkEndDate(startDate, childRecords[i].ganttProperties), durationDiff, 'minute', childRecords[i].ganttProperties);\n }\n this.calculateDateByRoundOffDuration(childRecords[i], calcEndDate);\n if (this.parent.isOnEdit && this.validatedChildItems.indexOf(childRecords[i]) === -1) {\n this.validatedChildItems.push(childRecords[i]);\n }\n }\n else if (isNullOrUndefined(previousData)) {\n calcEndDate = previousStartDate;\n var initialData = this.parent.initialLoadData[childRecords[i].index];\n if (this.parent.isLoad) {\n this.calculateDateByRoundOffDuration(initialData, calcEndDate);\n }\n else {\n this.calculateDateByRoundOffDuration(childRecords[i], calcEndDate);\n }\n if (this.parent.isOnEdit && this.validatedChildItems.indexOf(childRecords[i]) === -1) {\n this.validatedChildItems.push(childRecords[i]);\n }\n }\n }\n }\n if (childRecords.length) {\n this.parent.dataOperation.updateParentItems(ganttRecord, true);\n }\n };\n /**\n * To get updated child records.\n *\n * @param {IGanttData} parentRecord .\n * @param {IGanttData} childLists .\n * @returns {void} .\n */\n Edit.prototype.getUpdatableChildRecords = function (parentRecord, childLists) {\n var childRecords = parentRecord.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n if (childRecords[i].ganttProperties.isAutoSchedule) {\n childLists.push(childRecords[i]);\n if (childRecords[i].hasChildRecords) {\n this.getUpdatableChildRecords(childRecords[i], childLists);\n }\n }\n }\n };\n /**\n * @param {ITaskbarEditedEventArgs} args .\n * @returns {void} .\n * @private\n */\n Edit.prototype.initiateSaveAction = function (args) {\n var _this = this;\n var eventArgs = {};\n eventArgs.requestType = 'beforeSave';\n eventArgs.data = args.data;\n eventArgs.cancel = false;\n eventArgs.modifiedRecords = this.parent.editedRecords;\n if (!isNullOrUndefined(args.target)) {\n eventArgs.target = args.target;\n }\n eventArgs.modifiedTaskData = getTaskData(this.parent.editedRecords, true);\n if (args.action && args.action === 'DrawConnectorLine') {\n eventArgs.action = 'DrawConnectorLine';\n }\n this.parent.trigger('actionBegin', eventArgs, function (eventArg) {\n if (!isNullOrUndefined(_this.parent.loadingIndicator) && _this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n _this.parent.showMaskRow();\n }\n else {\n _this.parent.showSpinner();\n }\n if (eventArg.cancel) {\n _this.reUpdatePreviousRecords();\n _this.parent.chartRowsModule.refreshRecords([args.data]);\n _this.resetEditProperties(eventArgs);\n // Trigger action complete event with save canceled request type\n }\n else {\n eventArg.modifiedTaskData = getTaskData(eventArg.modifiedRecords, null, null, _this.parent);\n if (isRemoteData(_this.parent.dataSource)) {\n var data = _this.parent.dataSource;\n var updatedData = {\n changedRecords: eventArg.modifiedTaskData\n };\n var query = _this.parent.query instanceof Query ? _this.parent.query : new Query();\n var crud = null;\n var dataAdaptor = data.adaptor;\n if (!(dataAdaptor instanceof WebApiAdaptor && dataAdaptor instanceof ODataAdaptor) || data.dataSource.batchUrl) {\n crud = data.saveChanges(updatedData, _this.parent.taskFields.id, null, query);\n }\n else {\n var changedRecords = 'changedRecords';\n crud = data.update(_this.parent.taskFields.id, updatedData[changedRecords], null, query);\n }\n crud.then(function (e) { return _this.dmSuccess(e, args); })\n .catch(function (e) { return _this.dmFailure(e, args); });\n }\n else {\n _this.saveSuccess(args);\n }\n }\n });\n };\n Edit.prototype.dmSuccess = function (e, args) {\n var eLength;\n var rec;\n if (e.changedRecords) {\n eLength = e.changedRecords['length'];\n }\n else {\n eLength = e['length'];\n }\n for (var i = 0; i < eLength; i++) {\n if (e.changedRecords) {\n rec = e.changedRecords[parseInt(i.toString(), 10)];\n }\n else {\n rec = e[parseInt(i.toString(), 10)];\n }\n var _aLength = Object.keys(rec).length;\n for (var j = 0, _a = Object.keys(rec); j < _aLength; j++) {\n var key = _a[parseInt(j.toString(), 10)];\n this.parent.editedRecords[parseInt(i.toString(), 10)][\"\" + key] = rec[\"\" + key];\n this.parent.editedRecords[parseInt(i.toString(), 10)].taskData[\"\" + key] = rec[\"\" + key];\n }\n if (this.parent.taskFields.id !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['taskId'] = rec[this.parent.taskFields.id];\n }\n if (this.parent.taskFields.name !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['taskName'] = rec[this.parent.taskFields.name];\n }\n if (this.parent.taskFields.startDate !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['startDate'] = rec[this.parent.taskFields.startDate];\n }\n if (this.parent.taskFields.endDate !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['endDate'] = rec[this.parent.taskFields.endDate];\n }\n if (this.parent.taskFields.duration !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['duration'] = parseInt(rec[this.parent.taskFields.duration]);\n }\n if (this.parent.taskFields.durationUnit !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['durationUnit'] = rec[this.parent.taskFields.durationUnit];\n }\n if (this.parent.taskFields.progress !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['progress'] = rec[this.parent.taskFields.progress];\n }\n if (this.parent.taskFields.dependency !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['dependency'] = rec[this.parent.taskFields.dependency];\n }\n if (this.parent.taskFields.parentID !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['parentID'] = rec[this.parent.taskFields.parentID];\n }\n if (this.parent.taskFields.baselineEndDate !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['baselineEndDate'] = rec[this.parent.taskFields.baselineEndDate];\n }\n if (this.parent.taskFields.baselineStartDate !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['baselineStartDate'] = rec[this.parent.taskFields.baselineStartDate];\n }\n if (this.parent.taskFields.resourceInfo !== null) {\n this.parent.editedRecords[parseInt(i.toString(), 10)].ganttProperties['resources'] = rec[this.parent.taskFields.resourceInfo];\n }\n }\n this.saveSuccess(args);\n };\n Edit.prototype.dmFailure = function (e, args) {\n if (this.deletedTaskDetails.length) {\n var deleteRecords = this.deletedTaskDetails;\n for (var d = 0; d < deleteRecords.length; d++) {\n deleteRecords[d].isDelete = false;\n }\n this.deletedTaskDetails = [];\n }\n this.reUpdatePreviousRecords(true, true);\n this.resetEditProperties();\n this.parent.trigger('actionFailure', { error: e });\n };\n Edit.prototype.updateSharedTask = function (data) {\n var ids = data.ganttProperties.sharedTaskUniqueIds;\n for (var i = 0; i < ids.length; i++) {\n var editRecord = this.parent.flatData[this.parent.ids.indexOf(ids[i].toString())];\n if (editRecord && editRecord.uniqueID !== data.uniqueID) {\n this.updateGanttProperties(data, editRecord);\n this.parent.setRecordValue('taskData', data.taskData, editRecord, true);\n this.parent.dataOperation.updateTaskData(editRecord);\n this.parent.dataOperation.updateResourceName(editRecord);\n if (!isNullOrUndefined(editRecord.parentItem)) {\n this.parent.dataOperation.updateParentItems(editRecord.parentItem);\n }\n }\n }\n };\n /**\n * Method for save action success for local and remote data\n *\n * @param {ITaskAddedEventArgs} args .\n * @returns {void} .\n */\n Edit.prototype.saveSuccess = function (args) {\n var eventArgs = {};\n if (this.parent.timelineSettings.updateTimescaleView) {\n var tempArray = this.parent.editedRecords;\n this.parent.timelineModule.updateTimeLineOnEditing([tempArray], args.action);\n }\n if (this.parent.viewType === 'ResourceView') {\n if (args.action === 'TaskbarEditing' || args.action === 'DrawConnectorLine') {\n this.updateSharedTask(args.data);\n }\n else if (args.action === 'DialogEditing' || args.action === 'CellEditing' || args.action === 'methodUpdate') {\n if (this.parent.editModule.dialogModule.isResourceUpdate) {\n /* eslint-disable-next-line */\n this.updateResoures(this.parent.editModule.dialogModule.previousResource, args.data.ganttProperties.resourceInfo, args.data);\n this.updateSharedTask(args.data);\n this.isTreeGridRefresh = true;\n }\n else {\n this.updateSharedTask(args.data);\n }\n }\n // method to update the edited parent records\n for (var k = 0; k < this.updateParentRecords.length; k++) {\n this.parent.dataOperation.updateParentItems(this.updateParentRecords[k]);\n }\n this.updateParentRecords = [];\n this.parent.editModule.dialogModule.isResourceUpdate = false;\n this.parent.editModule.dialogModule.previousResource = [];\n }\n if (!this.isTreeGridRefresh) {\n this.parent.chartRowsModule.refreshRecords(this.parent.editedRecords);\n if (this.parent.viewType === 'ResourceView' && !this.parent.allowTaskbarOverlap && this.parent.showOverAllocation) {\n this.parent.contentHeight = this.parent['element'].getElementsByClassName('e-content')[0].children[0]['offsetHeight'];\n this.parent.ganttChartModule.chartBodyContent.style.height = this.parent.contentHeight + 'px';\n this.parent.ganttChartModule.renderRangeContainer(this.parent.currentViewData);\n if (this.parent.taskFields.dependency) {\n this.parent.ganttChartModule.reRenderConnectorLines();\n }\n }\n if (this.parent.isConnectorLineUpdate && !isNullOrUndefined(this.parent.connectorLineEditModule)) {\n // this.parent.updatedConnectorLineCollection = [];\n // this.parent.connectorLineIds = [];\n this.parent.connectorLineEditModule.refreshEditedRecordConnectorLine(this.parent.editedRecords);\n this.updateScheduleDatesOnEditing(args);\n }\n }\n if (!this.parent.editSettings.allowTaskbarEditing || (this.parent.editSettings.allowTaskbarEditing &&\n !this.taskbarEditModule.dependencyCancel)) {\n eventArgs.requestType = 'save';\n eventArgs.data = args.data;\n eventArgs.modifiedRecords = this.parent.editedRecords;\n eventArgs.modifiedTaskData = getTaskData(this.parent.editedRecords, null, null, this.parent);\n if (!isNullOrUndefined(args.action)) {\n setValue('action', args.action, eventArgs);\n }\n if (args.action === 'TaskbarEditing') {\n eventArgs.taskBarEditAction = args.taskBarEditAction;\n }\n this.endEditAction(args);\n if (this.parent.enableCriticalPath) {\n var criticalModule = this.parent.criticalPathModule;\n criticalModule.showCriticalPath(true);\n criticalModule.criticalConnectorLine(criticalModule.criticalPathCollection, criticalModule.detailPredecessorCollection, true, criticalModule.predecessorCollectionTaskIds);\n }\n this.parent.trigger('actionComplete', eventArgs);\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.hideMaskRow();\n }\n else {\n this.parent.hideSpinner();\n }\n }\n else {\n this.taskbarEditModule.dependencyCancel = false;\n this.resetEditProperties();\n }\n if (this.parent.viewType === 'ResourceView' && this.isTreeGridRefresh) {\n this.parent.treeGrid.parentData = [];\n this.parent.treeGrid.refresh();\n this.isTreeGridRefresh = false;\n }\n };\n Edit.prototype.updateResoures = function (prevResource, currentResource, updateRecord) {\n var flatRecords = this.parent.flatData;\n var currentLength = currentResource ? currentResource.length : 0;\n var previousLength = prevResource ? prevResource.length : 0;\n if (currentLength === 0 && previousLength === 0) {\n return;\n }\n for (var index = 0; index < currentLength; index++) {\n var recordIndex = [];\n var resourceID = parseInt(currentResource[index][this.parent.resourceFields.id], 10).toString();\n if (resourceID === 'NaN') {\n resourceID = currentResource[index][this.parent.resourceFields.id];\n }\n for (var i = 0; i < prevResource.length; i++) {\n var prevResourceID = parseInt(prevResource[i][this.parent.resourceFields.id], 10).toString();\n if (prevResourceID === 'NaN') {\n prevResourceID = prevResource[i][this.parent.resourceFields.id];\n }\n if (prevResourceID === resourceID) {\n recordIndex.push(i);\n break;\n }\n }\n if (recordIndex.length === 0) {\n var parentRecord = flatRecords[this.parent.getTaskIds().indexOf('R' + resourceID)];\n if (parentRecord) {\n this.addNewRecord(updateRecord, parentRecord);\n }\n }\n else {\n var record1 = parseInt(recordIndex[0].toString(), 10);\n if (record1.toString() === \"NaN\") {\n record1 = recordIndex[0].toString();\n }\n prevResource.splice(record1, 1);\n }\n }\n var prevLength = prevResource ? prevResource.length : 0;\n for (var index = 0; index < prevLength; index++) {\n var taskID = updateRecord.ganttProperties.taskId;\n var resourceID = prevResource[index][this.parent.resourceFields.id];\n var record = flatRecords[this.parent.getTaskIds().indexOf('R' + resourceID)];\n for (var j = 0; j < record.childRecords.length; j++) {\n if (record.childRecords[j].ganttProperties.taskId === taskID) {\n this.removeChildRecord(record.childRecords[j]);\n }\n }\n }\n if (currentLength > 0) {\n var parentTask = this.parent.getParentTask(updateRecord.parentItem);\n if (parentTask) {\n if (parentTask.ganttProperties.taskName === this.parent.localeObj.getConstant('unassignedTask')) {\n this.removeChildRecord(updateRecord);\n }\n }\n }\n //Assign resource to unassigned task\n if (currentLength === 0) {\n this.checkWithUnassignedTask(updateRecord);\n }\n };\n /**\n * @param {IGanttData} updateRecord .\n * @returns {void} .\n * @private\n */\n Edit.prototype.checkWithUnassignedTask = function (updateRecord) {\n var unassignedTasks = null;\n // Block for check the unassigned task.\n for (var i = 0; i < this.parent.flatData.length; i++) {\n if (this.parent.flatData[i].ganttProperties.taskName === this.parent.localeObj.getConstant('unassignedTask')) {\n unassignedTasks = this.parent.flatData[i];\n }\n }\n if (!isNullOrUndefined(unassignedTasks)) {\n this.addNewRecord(updateRecord, unassignedTasks);\n }\n else {\n // Block for create the unassigned task.\n var unassignTaskObj = {};\n unassignTaskObj[this.parent.taskFields.id] = 0;\n unassignTaskObj[this.parent.taskFields.name] = this.parent.localeObj.getConstant('unassignedTask');\n var beforeEditStatus = this.parent.isOnEdit;\n this.parent.isOnEdit = false;\n var cAddedRecord = this.parent.dataOperation.createRecord(unassignTaskObj, 0);\n this.parent.isOnEdit = beforeEditStatus;\n this.addRecordAsBottom(cAddedRecord);\n var parentRecord = this.parent.flatData[this.parent.flatData.length - 1];\n this.addNewRecord(updateRecord, parentRecord);\n var source = this.parent.dataSource;\n source.push(updateRecord.taskData);\n }\n var updatedData = this.parent.currentViewData.filter(function (data) {\n return (data.ganttProperties.taskId === updateRecord.ganttProperties.taskId &&\n (data.hasChildRecords === updateRecord.hasChildRecords));\n })[0];\n updateRecord.parentItem = updatedData.parentItem;\n updateRecord.parentUniqueID = updatedData.parentUniqueID;\n };\n Edit.prototype.addRecordAsBottom = function (cAddedRecord) {\n var recordIndex1 = this.parent.flatData.length;\n this.parent.currentViewData.splice(recordIndex1 + 1, 0, cAddedRecord);\n this.parent.flatData.splice(recordIndex1 + 1, 0, cAddedRecord);\n this.parent.ids.splice(recordIndex1 + 1, 0, cAddedRecord.ganttProperties.rowUniqueID.toString());\n var taskId = cAddedRecord.level === 0 ? 'R' + cAddedRecord.ganttProperties.taskId : 'T' + cAddedRecord.ganttProperties.taskId;\n this.parent.getTaskIds().splice(recordIndex1 + 1, 0, taskId);\n this.updateTreeGridUniqueID(cAddedRecord, 'add');\n };\n Edit.prototype.addNewRecord = function (updateRecord, parentRecord) {\n var cAddedRecord = null;\n cAddedRecord = extend({}, {}, updateRecord, true);\n this.parent.setRecordValue('uniqueID', getUid(this.parent.element.id + '_data_'), cAddedRecord);\n this.parent.setRecordValue('uniqueID', cAddedRecord.uniqueID, cAddedRecord.ganttProperties, true);\n var uniqueId = cAddedRecord.uniqueID.replace(this.parent.element.id + '_data_', '');\n this.parent.setRecordValue('rowUniqueID', uniqueId, cAddedRecord);\n this.parent.setRecordValue('rowUniqueID', uniqueId, cAddedRecord.ganttProperties, true);\n this.parent.setRecordValue('level', 1, cAddedRecord);\n if (this.parent.taskFields.parentID) {\n this.parent.setRecordValue('parentId', parentRecord.ganttProperties.taskId, cAddedRecord.ganttProperties, true);\n }\n this.parent.setRecordValue('parentItem', this.parent.dataOperation.getCloneParent(parentRecord), cAddedRecord);\n var parentUniqId = cAddedRecord.parentItem ? cAddedRecord.parentItem.uniqueID : null;\n this.parent.setRecordValue('parentUniqueID', parentUniqId, cAddedRecord);\n updateRecord.ganttProperties.sharedTaskUniqueIds.push(uniqueId);\n cAddedRecord.ganttProperties.sharedTaskUniqueIds = updateRecord.ganttProperties.sharedTaskUniqueIds;\n this.addRecordAsChild(parentRecord, cAddedRecord);\n };\n Edit.prototype.removeChildRecord = function (record) {\n var gObj = this.parent;\n var data = [];\n if (this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.json.length > 0) {\n data = this.parent.dataSource.dataSource.json;\n }\n else {\n data = this.parent.currentViewData;\n }\n var dataSource = this.parent.dataSource;\n var deletedRow = record;\n var flatParentData = this.parent.getParentTask(deletedRow.parentItem);\n if (deletedRow) {\n if (deletedRow.parentItem) {\n var deleteChildRecords = flatParentData ? flatParentData.childRecords : [];\n var childIndex = 0;\n if (deleteChildRecords && deleteChildRecords.length > 0) {\n if (deleteChildRecords.length === 1) {\n //For updating the parent record which has no child reords.\n this.parent.isOnDelete = true;\n deleteChildRecords[0].isDelete = true;\n this.parent.dataOperation.updateParentItems(flatParentData);\n this.parent.isOnDelete = false;\n deleteChildRecords[0].isDelete = false;\n }\n childIndex = deleteChildRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n // collection for updating parent record\n this.updateParentRecords.push(flatParentData);\n }\n }\n if (deletedRow.ganttProperties.sharedTaskUniqueIds.length) {\n var uniqueIDIndex = deletedRow.ganttProperties.sharedTaskUniqueIds.indexOf(deletedRow.ganttProperties.rowUniqueID);\n deletedRow.ganttProperties.sharedTaskUniqueIds.splice(uniqueIDIndex, 1);\n }\n this.updateTreeGridUniqueID(deletedRow, 'delete');\n //method to delete the record from datasource collection\n if (!this.parent.taskFields.parentID) {\n var deleteRecordIDs = [];\n deleteRecordIDs.push(deletedRow.ganttProperties.rowUniqueID.toString());\n this.parent.editModule.removeFromDataSource(deleteRecordIDs);\n }\n var flatRecordIndex = this.parent.flatData.indexOf(deletedRow);\n if (gObj.taskFields.parentID) {\n var idx = void 0;\n var ganttData = this.parent.currentViewData;\n for (var i = 0; i < ganttData.length; i++) {\n if (ganttData[i].ganttProperties.rowUniqueID === deletedRow.ganttProperties.rowUniqueID) {\n idx = i;\n }\n }\n if (idx !== -1) {\n if (dataSource.length > 0) {\n dataSource.splice(idx, 1);\n }\n data.splice(idx, 1);\n this.parent.flatData.splice(flatRecordIndex, 1);\n this.parent.ids.splice(flatRecordIndex, 1);\n this.parent.getTaskIds().splice(flatRecordIndex, 1);\n }\n }\n var recordIndex = data.indexOf(deletedRow);\n if (!gObj.taskFields.parentID) {\n var deletedRecordCount = this.parent.editModule.getChildCount(deletedRow, 0);\n data.splice(recordIndex, deletedRecordCount + 1);\n this.parent.flatData.splice(flatRecordIndex, deletedRecordCount + 1);\n this.parent.ids.splice(flatRecordIndex, deletedRecordCount + 1);\n this.parent.getTaskIds().splice(flatRecordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n this.parent.setRecordValue('expanded', false, flatParentData);\n this.parent.setRecordValue('hasChildRecords', false, flatParentData);\n }\n }\n };\n // Method to add new record after resource edit\n Edit.prototype.addRecordAsChild = function (droppedRecord, draggedRecord) {\n var gObj = this.parent;\n var recordIndex1 = this.parent.flatData.indexOf(droppedRecord);\n var childRecords = this.parent.editModule.getChildCount(droppedRecord, 0);\n var childRecordsLength;\n if (!isNullOrUndefined(this.addRowIndex) && this.addRowPosition && droppedRecord.childRecords && this.addRowPosition !== 'Child') {\n var dropChildRecord = droppedRecord.childRecords[this.addRowIndex];\n var position = this.addRowPosition === 'Above' || this.addRowPosition === 'Below' ? this.addRowPosition :\n 'Child';\n childRecordsLength = dropChildRecord ? this.addRowIndex + recordIndex1 + 1 :\n childRecords + recordIndex1 + 1;\n childRecordsLength = position === 'Above' ? childRecordsLength : childRecordsLength + 1;\n }\n else {\n childRecordsLength = (isNullOrUndefined(childRecords) ||\n childRecords === 0) ? recordIndex1 + 1 :\n childRecords + recordIndex1 + 1;\n }\n //this.ganttData.splice(childRecordsLength, 0, this.draggedRecord);\n this.parent.currentViewData.splice(childRecordsLength, 0, draggedRecord);\n this.parent.flatData.splice(childRecordsLength, 0, draggedRecord);\n this.parent.ids.splice(childRecordsLength, 0, draggedRecord.ganttProperties.rowUniqueID.toString());\n this.updateTreeGridUniqueID(draggedRecord, 'add');\n var recordId = draggedRecord.level === 0 ? 'R' + draggedRecord.ganttProperties.taskId : 'T' + draggedRecord.ganttProperties.taskId;\n this.parent.getTaskIds().splice(childRecordsLength, 0, recordId);\n if (!droppedRecord.hasChildRecords) {\n this.parent.setRecordValue('hasChildRecords', true, droppedRecord);\n this.parent.setRecordValue('expanded', true, droppedRecord);\n if (!droppedRecord.childRecords.length) {\n droppedRecord.childRecords = [];\n if (!gObj.taskFields.parentID && isNullOrUndefined(droppedRecord.taskData[this.parent.taskFields.child])) {\n droppedRecord.taskData[this.parent.taskFields.child] = [];\n }\n }\n }\n droppedRecord.childRecords.splice(droppedRecord.childRecords.length, 0, draggedRecord);\n if (!isNullOrUndefined(draggedRecord) && !this.parent.taskFields.parentID\n && !isNullOrUndefined(droppedRecord.taskData[this.parent.taskFields.child])) {\n droppedRecord.taskData[this.parent.taskFields.child].splice(droppedRecord.childRecords.length, 0, draggedRecord.taskData);\n }\n if (!isNullOrUndefined(draggedRecord.parentItem)) {\n //collection to update the parent records\n this.updateParentRecords.push(droppedRecord);\n }\n };\n Edit.prototype.resetEditProperties = function (args) {\n this.parent.currentEditedArgs = {};\n this.resetValidateArgs();\n this.parent.editedTaskBarItem = null;\n this.parent.isOnEdit = false;\n this.validatedChildItems = [];\n this.parent.isConnectorLineUpdate = false;\n this.parent.editedTaskBarItem = null;\n this.taskbarMoved = false;\n this.predecessorUpdated = false;\n if (!isNullOrUndefined(this.dialogModule) && (isNullOrUndefined(args) ||\n (!isNullOrUndefined(args) && args['requestType'] === 'beforeSave' && !args['cancel']))) {\n if (this.dialogModule.dialog && !this.dialogModule.dialogObj.isDestroyed) {\n this.dialogModule.dialogObj.hide();\n }\n this.dialogModule.dialogClose();\n }\n this.parent.hideSpinner();\n this.parent.initiateEditAction(false);\n };\n /**\n * @param {ITaskAddedEventArgs} args .\n * @returns {void} .\n * @private\n */\n Edit.prototype.endEditAction = function (args) {\n this.resetEditProperties();\n if (args.action === 'TaskbarEditing') {\n this.parent.trigger('taskbarEdited', args);\n }\n else if (args.action === 'CellEditing') {\n this.parent.trigger('endEdit', args);\n }\n else if (args.action === 'DialogEditing') {\n if (this.dialogModule.dialog && !this.dialogModule.dialogObj.isDestroyed) {\n this.dialogModule.dialogObj.hide();\n }\n this.dialogModule.dialogClose();\n }\n };\n // eslint-disable-next-line\n Edit.prototype.saveFailed = function (args) {\n this.reUpdatePreviousRecords();\n this.parent.hideSpinner();\n //action failure event trigger\n };\n /**\n * To render delete confirmation dialog\n *\n * @returns {void} .\n */\n Edit.prototype.renderDeleteConfirmDialog = function () {\n var dialogObj = new Dialog({\n width: '320px',\n isModal: true,\n visible: false,\n enableRtl: this.parent.enableRtl,\n content: this.parent.localeObj.getConstant('confirmDelete'),\n buttons: [\n {\n click: this.confirmDeleteOkButton.bind(this),\n buttonModel: { content: this.parent.localeObj.getConstant('okText'), isPrimary: true }\n },\n {\n click: this.closeConfirmDialog.bind(this),\n buttonModel: { content: this.parent.localeObj.getConstant('cancel') }\n }\n ],\n target: this.parent.element,\n animationSettings: { effect: 'None' }\n });\n dialogObj.appendTo('#' + this.parent.element.id + '_deleteConfirmDialog');\n this.confirmDialog = dialogObj;\n };\n Edit.prototype.closeConfirmDialog = function () {\n this.confirmDialog.hide();\n };\n Edit.prototype.confirmDeleteOkButton = function () {\n this.deleteSelectedItems();\n this.confirmDialog.hide();\n var focussedElement = this.parent.element.querySelector('.e-treegrid');\n focussedElement.focus();\n };\n /**\n * @returns {void} .\n * @private\n */\n Edit.prototype.startDeleteAction = function () {\n if (this.parent.editSettings.allowDeleting && !this.parent.readOnly) {\n if (this.parent.editSettings.showDeleteConfirmDialog) {\n this.confirmDialog.show();\n }\n else {\n this.deleteSelectedItems();\n var focusingElement = this.parent.element.querySelector('.e-treegrid');\n focusingElement.focus();\n }\n }\n };\n /**\n *\n * @param {IGanttData[]} selectedRecords - Defines the deleted records\n * @returns {void} .\n * Method to delete the records from resource view Gantt.\n */\n Edit.prototype.deleteResourceRecords = function (selectedRecords) {\n var deleteRecords = [];\n var _loop_1 = function (i) {\n if (selectedRecords[i].parentItem) {\n if (selectedRecords[i].ganttProperties.sharedTaskUniqueIds.length === 1) {\n var data = selectedRecords[i];\n var ids = data.ganttProperties.sharedTaskUniqueIds;\n for (var j = 0; j < ids.length; j++) {\n if (this_1.parent.ids.indexOf(ids[j].toString()) !== -1) {\n deleteRecords.push(this_1.parent.flatData[this_1.parent.ids.indexOf(ids[j].toString())]);\n }\n }\n if (this_1.parent.ids.indexOf(data.ganttProperties.rowUniqueID) !== -1) {\n deleteRecords.push(this_1.parent.flatData[this_1.parent.ids.indexOf(data.ganttProperties.rowUniqueID)]);\n }\n }\n }\n else {\n var resourceParent = this_1.parent.flatData.filter(function (data) {\n return (data.ganttProperties.taskId === selectedRecords[i].ganttProperties.taskId &&\n data.hasChildRecords);\n })[0];\n deleteRecords.push(resourceParent);\n }\n };\n var this_1 = this;\n for (var i = 0; i < selectedRecords.length; i++) {\n _loop_1(i);\n }\n this.deleteRow(deleteRecords);\n };\n Edit.prototype.deleteSelectedItems = function () {\n if (!this.isFromDeleteMethod) {\n var selectedRecords = [];\n if (this.parent.selectionSettings.mode !== 'Cell') {\n selectedRecords = this.parent.selectionModule.getSelectedRecords();\n }\n else if (this.parent.selectionSettings.mode === 'Cell') {\n selectedRecords = this.parent.selectionModule.getCellSelectedRecords();\n }\n if (this.parent.viewType === 'ResourceView') {\n this.deleteResourceRecords(selectedRecords);\n }\n else {\n this.deleteRow(selectedRecords);\n }\n }\n else {\n if (this.targetedRecords.length) {\n if (this.parent.viewType === 'ResourceView') {\n this.deleteResourceRecords(this.targetedRecords);\n }\n else {\n this.deleteRow(this.targetedRecords);\n }\n }\n this.isFromDeleteMethod = false;\n }\n };\n /**\n * Method to delete record.\n *\n * @param {number | string | number[] | string[] | IGanttData | IGanttData[]} taskDetail - Defines the details of data to delete.\n * @returns {void} .\n * @public\n */\n Edit.prototype.deleteRecord = function (taskDetail) {\n this.isFromDeleteMethod = true;\n var variableType = typeof (taskDetail);\n this.targetedRecords = [];\n switch (variableType) {\n case 'number':\n case 'string':\n {\n var taskId = taskDetail.toString();\n if (this.parent.viewType === 'ResourceView') {\n if (!isNullOrUndefined(taskId) && this.parent.getTaskIds().indexOf('T' + taskId) !== -1) {\n this.targetedRecords.push(this.parent.flatData[this.parent.getTaskIds().indexOf('T' + taskId)]);\n }\n }\n else {\n if (!isNullOrUndefined(taskId) && this.parent.ids.indexOf(taskId) !== -1) {\n this.targetedRecords.push(this.parent.getRecordByID(taskId));\n }\n }\n break;\n }\n case 'object':\n if (!Array.isArray(taskDetail)) {\n this.targetedRecords.push(taskDetail.valueOf());\n }\n else {\n this.updateTargetedRecords(taskDetail);\n }\n break;\n default:\n }\n this.startDeleteAction();\n };\n /**\n * To update 'targetedRecords collection' from given array collection\n *\n * @param {object[]} taskDetailArray .\n * @returns {void} .\n */\n Edit.prototype.updateTargetedRecords = function (taskDetailArray) {\n if (taskDetailArray.length) {\n var variableType = typeof (taskDetailArray[0]);\n if (variableType === 'object') {\n this.targetedRecords = taskDetailArray;\n }\n else {\n // Get record from array of task ids\n for (var i = 0; i < taskDetailArray.length; i++) {\n var id = taskDetailArray[i].toString();\n if (this.parent.viewType === 'ResourceView') {\n if (!isNullOrUndefined(id) && this.parent.getTaskIds().indexOf('T' + id) !== -1) {\n this.targetedRecords.push(this.parent.flatData[this.parent.getTaskIds().indexOf('T' + id)]);\n }\n }\n else if (!isNullOrUndefined(id) && this.parent.ids.indexOf(id) !== -1) {\n this.targetedRecords.push(this.parent.getRecordByID(id));\n }\n }\n }\n }\n };\n Edit.prototype.deleteRow = function (tasks) {\n var rowItems = tasks && tasks.length ? tasks :\n this.parent.selectionModule.getSelectedRecords();\n this.parent.addDeleteRecord = true;\n if (rowItems.length) {\n this.parent.isOnDelete = true;\n rowItems.forEach(function (item) {\n item.isDelete = true;\n });\n if (this.parent.viewType === 'ResourceView' && !tasks.length) {\n rowItems = [];\n }\n for (var i = 0; i < rowItems.length; i++) {\n var deleteRecord = rowItems[i];\n if (this.deletedTaskDetails.indexOf(deleteRecord) !== -1) {\n continue;\n }\n var parentTask = this.parent.getParentTask(deleteRecord.parentItem);\n if (deleteRecord.parentItem) {\n var childRecord = parentTask.childRecords;\n var filteredRecord = childRecord.length === 1 ?\n childRecord : childRecord.filter(function (data) {\n return !data.isDelete;\n });\n if (filteredRecord.length > 0) {\n this.parent.dataOperation.updateParentItems(deleteRecord.parentItem);\n }\n }\n var predecessor = deleteRecord.ganttProperties.predecessor;\n var canDeletePredecessor = true;\n if (this.parent.viewType === 'ResourceView' && parentTask && parentTask.ganttProperties.taskName !==\n this.parent.localeObj.getConstant('unassignedTask')) {\n canDeletePredecessor = false;\n }\n if (predecessor && predecessor.length && canDeletePredecessor) {\n this.removePredecessorOnDelete(deleteRecord);\n }\n this.deletedTaskDetails.push(deleteRecord);\n if (deleteRecord.hasChildRecords) {\n this.deleteChildRecords(deleteRecord);\n }\n }\n if (this.parent.selectionModule && this.parent.allowSelection) {\n // clear selection\n this.parent.selectionModule.clearSelection();\n }\n var delereArgs = {};\n delereArgs.deletedRecordCollection = this.deletedTaskDetails;\n delereArgs.updatedRecordCollection = this.parent.editedRecords;\n delereArgs.cancel = false;\n delereArgs.action = 'delete';\n this.initiateDeleteAction(delereArgs);\n this.parent.isOnDelete = false;\n }\n if (!isNullOrUndefined(this.parent.toolbarModule)) {\n this.parent.toolbarModule.refreshToolbarItems();\n }\n };\n Edit.prototype.removePredecessorOnDelete = function (record) {\n var predecessors = record.ganttProperties.predecessor;\n for (var i = 0; i < predecessors.length; i++) {\n var predecessor = predecessors[i];\n var recordId = this.parent.viewType === 'ResourceView' ? record.ganttProperties.taskId :\n record.ganttProperties.rowUniqueID;\n if (predecessor.from.toString() === recordId.toString()) {\n var toRecord = this.parent.connectorLineModule.getRecordByID(predecessor.to.toString());\n if (!isNullOrUndefined(toRecord)) {\n var toRecordPredcessor = extend([], [], toRecord.ganttProperties.predecessor, true);\n var index = void 0;\n for (var t = 0; t < toRecordPredcessor.length; t++) {\n var toId = this.parent.viewType === 'ResourceView' ? toRecord.ganttProperties.taskId :\n toRecord.ganttProperties.rowUniqueID;\n if (toRecordPredcessor[t].to.toString() === toId.toString()\n && toRecordPredcessor[t].from.toString() === recordId.toString()) {\n index = t;\n break;\n }\n }\n toRecordPredcessor.splice(index, 1);\n this.updatePredecessorValues(toRecord, toRecordPredcessor);\n }\n }\n else if (predecessor.to.toString() === recordId.toString()) {\n var fromRecord = this.parent.connectorLineModule.getRecordByID(predecessor.from.toString());\n if (!isNullOrUndefined(fromRecord)) {\n var fromRecordPredcessor = extend([], [], fromRecord.ganttProperties.predecessor, true);\n var index = void 0;\n for (var t = 0; t < fromRecordPredcessor.length; t++) {\n var fromId = this.parent.viewType === 'ResourceView' ? fromRecord.ganttProperties.taskId :\n fromRecord.ganttProperties.rowUniqueID;\n if (fromRecordPredcessor[t].from.toString() === fromId.toString()\n && fromRecordPredcessor[t].to.toString() === recordId.toString()) {\n index = t;\n break;\n }\n }\n fromRecordPredcessor.splice(index, 1);\n this.updatePredecessorValues(fromRecord, fromRecordPredcessor);\n }\n }\n }\n };\n Edit.prototype.updatePredecessorValues = function (record, predcessorArray) {\n this.parent.setRecordValue('predecessor', predcessorArray, record.ganttProperties, true);\n var predecessorString = this.parent.predecessorModule.getPredecessorStringValue(record);\n this.parent.setRecordValue('predecessorsName', predecessorString, record.ganttProperties, true);\n this.parent.setRecordValue('taskData.' + this.parent.taskFields.dependency, predecessorString, record);\n this.parent.setRecordValue(this.parent.taskFields.dependency, predecessorString, record);\n };\n /**\n * Method to update TaskID of a gantt record\n *\n * @param {string | number} currentId .\n * @param {number | string} newId .\n * @returns {void} .\n */\n Edit.prototype.updateTaskId = function (currentId, newId) {\n if (!this.parent.readOnly) {\n var cId = typeof currentId === 'number' ? currentId.toString() : currentId;\n var nId = typeof newId === 'number' ? newId.toString() : newId;\n var ids = this.parent.ids;\n if (!isNullOrUndefined(cId) && !isNullOrUndefined(nId)) {\n var cIndex = ids.indexOf(cId);\n var nIndex = ids.indexOf(nId);\n // return false for invalid taskID\n if (cIndex === -1 || nIndex > -1) {\n return;\n }\n var thisRecord = this.parent.flatData[cIndex];\n thisRecord.ganttProperties.taskId = thisRecord.ganttProperties.rowUniqueID = nId;\n thisRecord.taskData[this.parent.taskFields.id] = nId;\n thisRecord[this.parent.taskFields.id] = nId;\n ids[cIndex] = nId;\n if (thisRecord.hasChildRecords && this.parent.taskFields.parentID) {\n var childRecords = thisRecord.childRecords;\n for (var count = 0; count < childRecords.length; count++) {\n var childRecord = childRecords[count];\n childRecord[this.parent.taskFields.parentID] = newId;\n this.parent.chartRowsModule.refreshRecords([childRecord]);\n }\n }\n if (this.parent.taskFields.dependency && !isNullOrUndefined(thisRecord.ganttProperties.predecessor)) {\n var predecessors = thisRecord.ganttProperties.predecessor;\n var currentGanttRecord = void 0;\n for (var i = 0; i < predecessors.length; i++) {\n var predecessor = predecessors[i];\n if (predecessor.to === cId) {\n currentGanttRecord = this.parent.flatData[ids.indexOf(predecessor.from)];\n }\n else if (predecessor.from === cId) {\n currentGanttRecord = this.parent.flatData[ids.indexOf(predecessor.to)];\n }\n this.updatePredecessorOnUpdateId(currentGanttRecord, cId, nId);\n }\n }\n this.parent.treeGrid.parentData = [];\n this.parent.treeGrid.refresh();\n }\n }\n };\n Edit.prototype.updatePredecessorOnUpdateId = function (currentGanttRecord, cId, nId) {\n if (this.parent.flatData.indexOf(currentGanttRecord) > -1) {\n var pred = currentGanttRecord.ganttProperties.predecessor;\n for (var j = 0; j < pred.length; j++) {\n var pre = pred[j];\n if (pre.to === cId) {\n pre.to = nId;\n }\n else if (pre.from === cId) {\n pre.from = nId;\n }\n }\n }\n this.updatePredecessorValues(currentGanttRecord, currentGanttRecord.ganttProperties.predecessor);\n };\n Edit.prototype.deleteChildRecords = function (record) {\n var childRecords = record.childRecords;\n for (var c = 0; c < childRecords.length; c++) {\n var childRecord = childRecords[c];\n if (this.deletedTaskDetails.indexOf(childRecord) !== -1) {\n continue;\n }\n var predecessor = childRecord.ganttProperties.predecessor;\n var canDeletePredecessor = true;\n var parentTask = this.parent.getParentTask(childRecord.parentItem);\n if (this.parent.viewType === 'ResourceView' && parentTask && parentTask.ganttProperties.taskName !==\n this.parent.localeObj.getConstant('unassignedTask')) {\n canDeletePredecessor = false;\n }\n if (predecessor && predecessor.length && canDeletePredecessor) {\n this.removePredecessorOnDelete(childRecord);\n }\n this.deletedTaskDetails.push(childRecord);\n if (childRecord.hasChildRecords) {\n this.deleteChildRecords(childRecord);\n }\n }\n };\n Edit.prototype.removeFromDataSource = function (deleteRecordIDs) {\n var dataSource;\n if (this.parent.dataSource instanceof DataManager) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n this.removeData(dataSource, deleteRecordIDs);\n this.isBreakLoop = false;\n };\n Edit.prototype.removeData = function (dataCollection, record) {\n for (var i = 0; i < dataCollection.length; i++) {\n if (this.isBreakLoop) {\n break;\n }\n if (record.indexOf(getValue(this.parent.taskFields.id, dataCollection[i]).toString()) !== -1) {\n if (dataCollection[i][this.parent.taskFields.child]) {\n var childRecords = dataCollection[i][this.parent.taskFields.child];\n this.removeData(childRecords, record);\n }\n record.splice(record.indexOf(getValue(this.parent.taskFields.id, dataCollection[i]).toString()), 1);\n dataCollection.splice(i, 1);\n if (record.length === 0) {\n this.isBreakLoop = true;\n break;\n }\n }\n else if (dataCollection[i][this.parent.taskFields.child]) {\n var childRecords = dataCollection[i][this.parent.taskFields.child];\n this.removeData(childRecords, record);\n }\n }\n };\n Edit.prototype.initiateDeleteAction = function (args) {\n var _this = this;\n this.parent.showSpinner();\n var eventArgs = {};\n eventArgs.requestType = 'beforeDelete';\n eventArgs.data = args.deletedRecordCollection;\n eventArgs.modifiedRecords = args.updatedRecordCollection;\n eventArgs.modifiedTaskData = getTaskData(args.updatedRecordCollection, null, null, this.parent);\n this.parent.trigger('actionBegin', eventArgs, function (eventArg) {\n if (!isNullOrUndefined(_this.parent.loadingIndicator) && _this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n _this.parent.showMaskRow();\n }\n else {\n _this.parent.showSpinner();\n }\n if (eventArg.cancel) {\n var deleteRecords = _this.deletedTaskDetails;\n for (var d = 0; d < deleteRecords.length; d++) {\n deleteRecords[d].isDelete = false;\n }\n _this.deletedTaskDetails = [];\n _this.reUpdatePreviousRecords();\n _this.parent.initiateEditAction(false);\n _this.parent.hideSpinner();\n }\n else {\n if (isRemoteData(_this.parent.dataSource)) {\n var data_1 = _this.parent.dataSource;\n if (_this.parent.timezone) {\n updateDates(eventArg.modifiedTaskData, _this.parent);\n }\n var updatedData_1 = {\n deletedRecords: getTaskData(eventArg.data, null, null, _this.parent),\n changedRecords: eventArg.modifiedTaskData\n };\n var adaptor = data_1.adaptor;\n var query_1 = _this.parent.query instanceof Query ? _this.parent.query : new Query();\n if (!(adaptor instanceof WebApiAdaptor && adaptor instanceof ODataAdaptor) || data_1.dataSource.batchUrl) {\n var crud = data_1.saveChanges(updatedData_1, _this.parent.taskFields.id, null, query_1);\n crud.then(function () { return _this.deleteSuccess(args); })\n .catch(function (e) { return _this.dmFailure(e, args); });\n }\n else {\n var deletedRecords = 'deletedRecords';\n var deleteCrud = null;\n for (var i = 0; i < updatedData_1[deletedRecords].length; i++) {\n deleteCrud = data_1.remove(_this.parent.taskFields.id, updatedData_1[deletedRecords][i], null, query_1);\n }\n deleteCrud.then(function () {\n var changedRecords = 'changedRecords';\n var updateCrud = data_1.update(_this.parent.taskFields.id, updatedData_1[changedRecords], null, query_1);\n updateCrud.then(function () { return _this.deleteSuccess(args); })\n .catch(function (e) { return _this.dmFailure(e, args); });\n }).catch(function (e) { return _this.dmFailure(e, args); });\n }\n }\n else {\n _this.deleteSuccess(args);\n }\n }\n });\n };\n Edit.prototype.deleteSuccess = function (args) {\n var _this = this;\n var flatData = this.parent.flatData;\n var currentData = this.parent.currentViewData;\n var deletedRecords = this.parent.getRecordFromFlatdata(args.deletedRecordCollection);\n var deleteRecordIDs = [];\n if (deletedRecords.length > 0) {\n this.parent.selectedRowIndex = deletedRecords[deletedRecords.length - 1].index;\n }\n for (var i = 0; i < deletedRecords.length; i++) {\n var deleteRecord = deletedRecords[i];\n var currentIndex = currentData.indexOf(deleteRecord);\n var flatIndex = flatData.indexOf(deleteRecord);\n var treeGridParentIndex = this.parent.treeGrid.parentData.indexOf(deleteRecord);\n var tempData = getValue('dataOperation.dataArray', this.parent);\n var dataIndex = tempData.indexOf(deleteRecord.taskData);\n var childIndex = void 0;\n if (currentIndex !== -1) {\n currentData.splice(currentIndex, 1);\n }\n if (flatIndex !== -1) {\n flatData.splice(flatIndex, 1);\n }\n if (dataIndex !== -1) {\n tempData.splice(dataIndex, 1);\n }\n if (!isNullOrUndefined(deleteRecord)) {\n deleteRecordIDs.push(deleteRecord.ganttProperties.taskId.toString());\n if (flatIndex !== -1) {\n this.parent.ids.splice(flatIndex, 1);\n if (this.parent.viewType === 'ResourceView') {\n this.parent.getTaskIds().splice(flatIndex, 1);\n this.isResourceTaskDeleted = true;\n if (!deleteRecord.hasChildRecords) {\n deleteRecord.ganttProperties.resourceInfo = null;\n delete deleteRecord.ganttProperties.resourceNames;\n deleteRecord[this.parent.taskFields.resourceInfo] = null;\n deleteRecord.ganttProperties.sharedTaskUniqueIds = [];\n delete deleteRecord.taskData[this.parent.taskFields.resourceInfo];\n }\n }\n }\n if (deleteRecord.level === 0 && treeGridParentIndex !== -1) {\n this.parent.treeGrid.parentData.splice(treeGridParentIndex, 1);\n }\n if (deleteRecord.parentItem) {\n var parentItem = this.parent.getParentTask(deleteRecord.parentItem);\n if (parentItem) {\n var childRecords = parentItem.childRecords;\n childIndex = childRecords.indexOf(deleteRecord);\n if (childIndex !== -1) {\n childRecords.splice(childIndex, 1);\n }\n if (!childRecords.length) {\n this.parent.setRecordValue('hasChildRecords', false, parentItem);\n }\n }\n }\n this.updateTreeGridUniqueID(deleteRecord, 'delete');\n }\n }\n if (deleteRecordIDs.length > 0) {\n this.removeFromDataSource(deleteRecordIDs);\n }\n var eventArgs = {};\n this.parent.updatedConnectorLineCollection = [];\n this.parent.connectorLineIds = [];\n this.parent.predecessorModule.createConnectorLinesCollection(this.parent.flatData);\n this.parent.treeGrid.parentData = [];\n this.parent.treeGrid.refresh();\n if (this.parent.enableImmutableMode) {\n this.refreshRecordInImmutableMode();\n }\n // Trigger actioncomplete event for delete action\n eventArgs.requestType = 'delete';\n eventArgs.data = args.deletedRecordCollection;\n eventArgs.modifiedRecords = args.updatedRecordCollection;\n eventArgs.modifiedTaskData = getTaskData(args.updatedRecordCollection, null, null, this.parent);\n setValue('action', args.action, eventArgs);\n this.parent.isOnDelete = false;\n if (this.parent.viewType === 'ResourceView') {\n var updateUnAssignedResources_1 = eventArgs.data.filter(function (data) {\n return !data.hasChildRecords;\n });\n var _loop_2 = function (i) {\n var unassignedTask = this_2.parent.flatData.filter(function (data) {\n return data.ganttProperties.taskName === _this.parent.localeObj.getConstant('unassignedTask');\n })[0];\n var isDuplicate = [];\n if (unassignedTask) {\n isDuplicate = unassignedTask.childRecords.filter(function (data) {\n return data.ganttProperties.taskId === updateUnAssignedResources_1[i].ganttProperties.taskId;\n });\n }\n var parentTask = this_2.parent.getParentTask(updateUnAssignedResources_1[i].parentItem);\n if (parentTask && parentTask.ganttProperties.taskName !==\n this_2.parent.localeObj.getConstant('unassignedTask') && isDuplicate.length === 0) {\n this_2.checkWithUnassignedTask(updateUnAssignedResources_1[i]);\n }\n else if (!parentTask && (!isDuplicate || isDuplicate.length === 0)) {\n this_2.checkWithUnassignedTask(updateUnAssignedResources_1[i]);\n }\n unassignedTask = this_2.parent.flatData.filter(function (data) {\n return data.ganttProperties.taskName === _this.parent.localeObj.getConstant('unassignedTask');\n })[0];\n var parentItem = this_2.parent.currentViewData.filter(function (data) {\n if (data.ganttProperties.taskId == updateUnAssignedResources_1[i].ganttProperties.taskId && (!data.hasChildRecords && data.parentItem)\n && unassignedTask.uniqueID === data.parentItem.uniqueID) {\n return data;\n }\n else {\n return null;\n }\n });\n if (parentItem[0]) {\n this_2.parent.dataOperation.updateParentItems(parentItem[0]);\n }\n };\n var this_2 = this;\n for (var i = 0; i < updateUnAssignedResources_1.length; i++) {\n _loop_2(i);\n }\n }\n this.parent.trigger('actionComplete', eventArgs);\n this.deletedTaskDetails = [];\n this.parent.initiateEditAction(false);\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.hideMaskRow();\n }\n else {\n this.parent.hideSpinner();\n }\n };\n /**\n *\n * @returns {number | string} .\n * @private\n */\n Edit.prototype.getNewTaskId = function () {\n var ids = this.parent.viewType === 'ResourceView' ? this.parent.getTaskIds() : this.parent.ids;\n var maxId = ids.length;\n var newTaskId = maxId + 1;\n if (this.parent.viewType === 'ResourceView') {\n if (ids.indexOf('T' + newTaskId) !== -1 || ids.indexOf('R' + newTaskId) !== -1) {\n newTaskId = newTaskId + 1;\n if (ids.indexOf('T' + newTaskId) !== -1 || ids.indexOf('R' + newTaskId) !== -1) {\n do {\n newTaskId = newTaskId + 1;\n } while (ids.indexOf('T' + newTaskId) !== -1 || ids.indexOf('R' + newTaskId) !== -1);\n }\n }\n }\n else {\n if (ids.indexOf(newTaskId.toString()) != -1) {\n newTaskId = newTaskId + 1;\n if (ids.indexOf(newTaskId.toString()) != -1) {\n do {\n newTaskId = newTaskId + 1;\n } while (ids.indexOf(newTaskId.toString()) != -1);\n }\n }\n }\n if (this.parent.columnByField[this.parent.taskFields.id].editType === \"stringedit\") {\n return newTaskId = newTaskId.toString();\n }\n else {\n return newTaskId;\n }\n };\n /**\n * @param {object} obj .\n * @param {RowPosition} rowPosition .\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n Edit.prototype.prepareNewlyAddedData = function (obj, rowPosition) {\n var taskModel = this.parent.taskFields;\n var id;\n var newTaskIDmd;\n var ids = this.parent.ids;\n /*Validate Task Id of data*/\n if (obj[taskModel.id]) {\n if (ids.indexOf(obj[taskModel.id].toString()) !== -1) {\n obj[taskModel.id] = null;\n }\n else {\n if (typeof (obj[taskModel.id]) === \"string\") {\n newTaskIDmd = obj[taskModel.id];\n }\n else {\n newTaskIDmd = parseInt(obj[taskModel.id], 10);\n }\n obj[taskModel.id] = isNullOrUndefined(newTaskIDmd) ? null : newTaskIDmd;\n }\n }\n if (!obj[taskModel.id]) {\n id = this.getNewTaskId();\n obj[taskModel.id] = id;\n }\n if (!this.parent.allowUnscheduledTasks && !obj[taskModel.startDate]) {\n obj[taskModel.startDate] = this.parent.projectStartDate;\n }\n if (!this.parent.allowUnscheduledTasks && taskModel.duration && isNullOrUndefined(obj[taskModel.duration])) {\n if (!obj[taskModel.endDate]) {\n obj[taskModel.duration] = '5';\n }\n }\n if (taskModel.progress) {\n obj[taskModel.progress] = obj[taskModel.progress] ? (obj[taskModel.progress] > 100 ? 100 : obj[taskModel.progress]) : 0;\n }\n if (!this.parent.allowUnscheduledTasks && !obj[taskModel.endDate] && taskModel.endDate) {\n if (!obj[taskModel.duration]) {\n var startDate = this.parent.dataOperation.getDateFromFormat(this.parent.projectStartDate);\n startDate.setDate(startDate.getDate() + 4);\n obj[taskModel.endDate] = this.parent.getFormatedDate(startDate, this.parent.getDateFormat());\n }\n }\n };\n /**\n * @param {object} obj .\n * @param {number} level .\n * @param {RowPosition} rowPosition .\n * @param {IGanttData} parentItem .\n * @returns {IGanttData} .\n * @private\n */\n Edit.prototype.updateNewlyAddedDataBeforeAjax = function (obj, level, rowPosition, parentItem) {\n var cAddedRecord = this.parent.dataOperation.createRecord(obj, level);\n cAddedRecord.index = parseInt(cAddedRecord.ganttProperties.rowUniqueID.toString(), 10) - 1;\n if (!isNullOrUndefined(parentItem)) {\n this.parent.setRecordValue('parentItem', this.parent.dataOperation.getCloneParent(parentItem), cAddedRecord);\n var pIndex = cAddedRecord.parentItem ? cAddedRecord.parentItem.index : null;\n this.parent.setRecordValue('parentIndex', pIndex, cAddedRecord);\n var parentUniqId = cAddedRecord.parentItem ? cAddedRecord.parentItem.uniqueID : null;\n this.parent.setRecordValue('parentUniqueID', parentUniqId, cAddedRecord);\n if (!isNullOrUndefined(this.parent.taskFields.id) &&\n !isNullOrUndefined(this.parent.taskFields.parentID) && cAddedRecord.parentItem) {\n if (this.parent.viewType === 'ProjectView') {\n this.parent.setRecordValue(this.parent.taskFields.parentID, cAddedRecord.parentItem.taskId, cAddedRecord.taskData, true);\n }\n this.parent.setRecordValue('parentId', cAddedRecord.parentItem.taskId, cAddedRecord.ganttProperties, true);\n this.parent.setRecordValue(this.parent.taskFields.parentID, cAddedRecord.parentItem.taskId, cAddedRecord, true);\n }\n }\n this.parent.isOnEdit = true;\n this.backUpAndPushNewlyAddedRecord(cAddedRecord, rowPosition, parentItem);\n // need to push in dataSource also.\n if (this.parent.taskFields.dependency && cAddedRecord.ganttProperties.predecessorsName) {\n this.parent.predecessorModule.ensurePredecessorCollectionHelper(cAddedRecord, cAddedRecord.ganttProperties);\n this.parent.predecessorModule.updatePredecessorHelper(cAddedRecord);\n this.parent.predecessorModule.validatePredecessorDates(cAddedRecord);\n }\n if (cAddedRecord.parentItem && this.parent.getParentTask(cAddedRecord.parentItem).ganttProperties.isAutoSchedule) {\n this.parent.dataOperation.updateParentItems(cAddedRecord.parentItem);\n }\n this.parent.isOnEdit = false;\n return cAddedRecord;\n };\n /**\n * @param {IGanttData} record .\n * @param {number} count .\n * @returns {number} .\n * @private\n */\n Edit.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n /**\n * @param {IGanttData} data .\n * @param {number} count .\n * @param {IGanttData[]} collection .\n * @returns {number} .\n * @private\n */\n Edit.prototype.getVisibleChildRecordCount = function (data, count, collection) {\n var childRecords;\n var length;\n if (data.hasChildRecords) {\n childRecords = data.childRecords;\n length = childRecords.length;\n for (var i = 0; i < length; i++) {\n if (collection.indexOf(childRecords[i]) !== -1) {\n count++;\n }\n if (childRecords[i].hasChildRecords) {\n count = this.getVisibleChildRecordCount(childRecords[i], count, collection);\n }\n }\n }\n else {\n if (collection.indexOf(data) !== -1) {\n count++;\n }\n }\n return count;\n };\n /**\n * @param {IGanttData} parentRecord .\n * @returns {void} .\n * @private\n */\n Edit.prototype.updatePredecessorOnIndentOutdent = function (parentRecord) {\n var len = parentRecord.ganttProperties.predecessor.length;\n var parentRecordTaskData = parentRecord.ganttProperties;\n var predecessorCollection = parentRecordTaskData.predecessor;\n var childRecord;\n var predecessorIndex;\n var updatedPredecessor = [];\n for (var count = 0; count < len; count++) {\n if (predecessorCollection[count].to === parentRecordTaskData.rowUniqueID.toString()) {\n childRecord = this.parent.getRecordByID(predecessorCollection[count].from);\n predecessorIndex = getIndex(predecessorCollection[count], 'from', childRecord.ganttProperties.predecessor, 'to');\n // eslint-disable-next-line\n var predecessorCollections = (extend([], childRecord.ganttProperties.predecessor, [], true));\n predecessorCollections.splice(predecessorIndex, 1);\n this.parent.setRecordValue('predecessor', predecessorCollections, childRecord.ganttProperties, true);\n }\n else if (predecessorCollection[count].from === parentRecordTaskData.rowUniqueID.toString()) {\n childRecord = this.parent.getRecordByID(predecessorCollection[count].to);\n var prdcList = (childRecord.ganttProperties.predecessorsName.toString()).split(',');\n var str = predecessorCollection[count].from + predecessorCollection[count].type;\n var ind = prdcList.indexOf(str);\n prdcList.splice(ind, 1);\n this.parent.setRecordValue('predecessorsName', prdcList.join(','), childRecord.ganttProperties, true);\n this.parent.setRecordValue(this.parent.taskFields.dependency, prdcList.join(','), childRecord);\n predecessorIndex = getIndex(predecessorCollection[count], 'from', childRecord.ganttProperties.predecessor, 'to');\n // eslint-disable-next-line\n var temppredecessorCollection = (extend([], childRecord.ganttProperties.predecessor, [], true));\n temppredecessorCollection.splice(predecessorIndex, 1);\n this.parent.setRecordValue('predecessor', temppredecessorCollection, childRecord.ganttProperties, true);\n this.parent.predecessorModule.validatePredecessorDates(childRecord);\n }\n }\n this.parent.setRecordValue('predecessor', updatedPredecessor, parentRecord.ganttProperties, true);\n this.parent.setRecordValue('predecessorsName', '', parentRecord.ganttProperties, true);\n };\n /**\n * @param {IPredecessor[]} predecessorCollection .\n * @param {IGanttData} record .\n * @returns {string} .\n * @private\n */\n Edit.prototype.predecessorToString = function (predecessorCollection, record) {\n var predecessorString = [];\n var count = 0;\n var length = predecessorCollection.length;\n for (count; count < length; count++) {\n if (record.ganttProperties.rowUniqueID.toString() !== predecessorCollection[count].from) {\n var tem = predecessorCollection[count].from + predecessorCollection[count].type;\n predecessorCollection[count].offset =\n isNaN(predecessorCollection[count].offset) ? 0 : predecessorCollection[count].offset;\n if (predecessorCollection[count].offset !== 0) {\n if (predecessorCollection[count].offset < 0) {\n tem += predecessorCollection[count].offset.toString() + 'd';\n }\n else if (predecessorCollection[count].offset > 0) {\n tem += '+' + predecessorCollection[count].offset.toString() + 'd';\n }\n }\n predecessorString.push(tem);\n }\n }\n return predecessorString.join(',');\n };\n /**\n * @param {IGanttData} record .\n * @param {RowPosition} rowPosition .\n * @param {IGanttData} parentItem .\n * @returns {void} .\n * @private\n */\n Edit.prototype.backUpAndPushNewlyAddedRecord = function (record, rowPosition, parentItem) {\n var flatRecords = this.parent.flatData;\n var currentViewData = this.parent.currentViewData;\n var ids = this.parent.ids;\n var currentItemIndex;\n var recordIndex;\n var updatedCollectionIndex;\n var childIndex;\n switch (rowPosition) {\n case 'Top':\n flatRecords.splice(0, 0, record);\n currentViewData.splice(0, 0, record);\n ids.splice(0, 0, record.ganttProperties.rowUniqueID.toString()); // need to check NAN\n break;\n case 'Bottom':\n flatRecords.push(record);\n currentViewData.push(record);\n ids.push(record.ganttProperties.rowUniqueID.toString()); // need to check NAN\n if (this.parent.viewType === 'ResourceView') {\n var taskId = record.level === 0 ? 'R' + record.ganttProperties.taskId : 'T' + record.ganttProperties.taskId;\n this.parent.getTaskIds().push(taskId);\n }\n break;\n case 'Above':\n /*Record Updates*/\n recordIndex = flatRecords.indexOf(this.addRowSelectedItem);\n updatedCollectionIndex = currentViewData.indexOf(this.addRowSelectedItem);\n this.recordCollectionUpdate(childIndex, recordIndex, updatedCollectionIndex, record, parentItem, rowPosition);\n break;\n case 'Below':\n currentItemIndex = flatRecords.indexOf(this.addRowSelectedItem);\n if (this.addRowSelectedItem.hasChildRecords) {\n var dataChildCount = this.getChildCount(this.addRowSelectedItem, 0);\n recordIndex = currentItemIndex + dataChildCount + 1;\n updatedCollectionIndex = currentViewData.indexOf(this.addRowSelectedItem) +\n this.getVisibleChildRecordCount(this.addRowSelectedItem, 0, currentViewData) + 1;\n }\n else {\n recordIndex = currentItemIndex + 1;\n updatedCollectionIndex = currentViewData.indexOf(this.addRowSelectedItem) + 1;\n }\n this.recordCollectionUpdate(childIndex + 1, recordIndex, updatedCollectionIndex, record, parentItem, rowPosition);\n break;\n case 'Child':\n currentItemIndex = flatRecords.indexOf(this.addRowSelectedItem);\n if (this.addRowSelectedItem.hasChildRecords) {\n var dataChildCount = this.getChildCount(this.addRowSelectedItem, 0);\n recordIndex = currentItemIndex + dataChildCount + 1;\n //Expand Add record's parent item for project view\n if (!this.addRowSelectedItem.expanded && !this.parent.enableMultiTaskbar) {\n this.parent.expandByID(this.addRowSelectedItem.ganttProperties.rowUniqueID);\n }\n updatedCollectionIndex = currentViewData.indexOf(this.addRowSelectedItem) +\n this.getVisibleChildRecordCount(this.addRowSelectedItem, 0, currentViewData) + 1;\n }\n else {\n this.parent.setRecordValue('hasChildRecords', true, this.addRowSelectedItem);\n this.parent.setRecordValue('isMilestone', false, this.addRowSelectedItem.ganttProperties, true);\n this.parent.setRecordValue('expanded', true, this.addRowSelectedItem);\n this.parent.setRecordValue('childRecords', [], this.addRowSelectedItem);\n recordIndex = currentItemIndex + 1;\n updatedCollectionIndex = currentViewData.indexOf(this.addRowSelectedItem) + 1;\n if (this.addRowSelectedItem.ganttProperties.predecessor) {\n this.updatePredecessorOnIndentOutdent(this.addRowSelectedItem);\n }\n if (!isNullOrUndefined(this.addRowSelectedItem.ganttProperties.segments)) {\n this.addRowSelectedItem.ganttProperties.segments = null;\n }\n }\n this.recordCollectionUpdate(childIndex + 1, recordIndex, updatedCollectionIndex, record, parentItem, rowPosition);\n break;\n }\n this.newlyAddedRecordBackup = record;\n };\n /**\n * @param {number} childIndex .\n * @param {number} recordIndex .\n * @param {number} updatedCollectionIndex .\n * @param {IGanttData} record .\n * @param {IGanttData} parentItem .\n * @returns {void} .\n * @private\n */\n Edit.prototype.recordCollectionUpdate = function (childIndex, recordIndex, updatedCollectionIndex, record, parentItem, rowPosition) {\n var flatRecords = this.parent.flatData;\n var currentViewData = this.parent.currentViewData;\n var ids = this.parent.ids;\n /* Record collection update */\n flatRecords.splice(recordIndex, 0, record);\n currentViewData.splice(updatedCollectionIndex, 0, record);\n if (this.parent.viewType === 'ResourceView' && typeof (record.ganttProperties.taskId) === \"number\") {\n var taskString = record.ganttProperties.taskId;\n ids.push(taskString.toString());\n }\n ids.splice(recordIndex, 0, record.ganttProperties.rowUniqueID.toString());\n if (this.parent.viewType === 'ResourceView') {\n var taskId = record.level === 0 ? 'R' + record.ganttProperties.taskId : 'T' + record.ganttProperties.taskId;\n this.parent.getTaskIds().splice(recordIndex, 0, taskId);\n }\n /* data Source update */\n if (!isNullOrUndefined(parentItem)) {\n if (rowPosition == 'Above') {\n childIndex = parentItem.childRecords.indexOf(this.addRowSelectedItem);\n }\n else if (rowPosition == 'Below') {\n childIndex = parentItem.childRecords.indexOf(this.addRowSelectedItem) + 1;\n }\n else {\n childIndex = parentItem.childRecords.length;\n }\n /*Child collection update*/\n parentItem.childRecords.splice(childIndex, 0, record);\n if (!this.parent.taskFields.child) {\n this.parent.taskFields.child = 'Children';\n }\n if ((this.parent.dataSource instanceof DataManager &&\n isNullOrUndefined(parentItem.taskData[this.parent.taskFields.parentID])) ||\n !isNullOrUndefined(this.parent.dataSource)) {\n var child = this.parent.taskFields.child;\n if (parentItem.taskData[child] && parentItem.taskData[child].length > 0) {\n if (rowPosition === 'Above' || rowPosition === 'Below') {\n parentItem.taskData[child].splice(childIndex, 0, record.taskData);\n }\n else {\n parentItem.taskData[child].push(record.taskData);\n }\n }\n else {\n parentItem.taskData[child] = [];\n parentItem.taskData[child].push(record.taskData);\n }\n this.isNewRecordAdded = true;\n }\n }\n };\n /**\n * @param {IGanttData} cAddedRecord .\n * @param {IGanttData} modifiedRecords .\n * @param {string} event .\n * @returns {ITaskAddedEventArgs} .\n * @private\n */\n Edit.prototype.constructTaskAddedEventArgs = function (cAddedRecord, modifiedRecords, event) {\n var eventArgs = {};\n eventArgs.action = eventArgs.requestType = event;\n if (cAddedRecord.length > 1) {\n eventArgs.data = [];\n eventArgs.newTaskData = [];\n eventArgs.recordIndex = [];\n for (var i = 0; i < cAddedRecord.length; i++) {\n eventArgs.data[i] = cAddedRecord[i];\n (eventArgs.newTaskData[i]) = (getTaskData([cAddedRecord[i]], eventArgs.data[i], eventArgs, this.parent));\n eventArgs.recordIndex[i] = cAddedRecord[i].index;\n }\n }\n else if (cAddedRecord.length === 1) {\n for (var i = 0; i < cAddedRecord.length; i++) {\n (eventArgs.data) = (cAddedRecord[i]);\n (eventArgs.newTaskData) = (getTaskData([cAddedRecord[i]], eventArgs.data, eventArgs, this.parent));\n eventArgs.recordIndex = cAddedRecord[i].index;\n }\n }\n eventArgs.modifiedRecords = modifiedRecords;\n eventArgs.modifiedTaskData = getTaskData(modifiedRecords, null, null, this.parent);\n return eventArgs;\n };\n /**\n * @param {ITaskAddedEventArgs} args .\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n Edit.prototype.addSuccess = function (args) {\n // let addedRecords: IGanttData = args.addedRecord;\n // let eventArgs: IActionBeginEventArgs = {};\n // this.parent.updatedConnectorLineCollection = [];\n // this.parent.connectorLineIds = [];\n // this.parent.predecessorModule.createConnectorLinesCollection(this.parent.flatData);\n this.parent.treeGrid.parentData = [];\n this.parent.addDeleteRecord = true;\n this.parent.selectedRowIndex = 0;\n this.parent.treeGrid['isAddedFromGantt'] = true;\n this.parent.treeGrid.refresh();\n if (this.parent.enableImmutableMode) {\n this.parent.modifiedRecords = args.modifiedRecords;\n this.parent.modifiedRecords.push(args.data);\n this.refreshRecordInImmutableMode();\n }\n };\n Edit.prototype.refreshRecordInImmutableMode = function (data, dragged) {\n if (!dragged && !isNullOrUndefined(data)) {\n for (var i = data[0].index + 1; i < this.parent.currentViewData.length; i++) {\n if (data[0].level < this.parent.currentViewData[i].level) {\n this.parent.modifiedRecords.push(this.parent.currentViewData[i]);\n }\n else {\n break;\n }\n }\n }\n var _loop_3 = function (i) {\n var originalData = this_3.parent.modifiedRecords[i];\n var treeIndex = this_3.parent.allowRowDragAndDrop ? 1 : 0;\n var uniqueTaskID = this_3.parent.taskFields.id;\n var originalIndex = this_3.parent.currentViewData.findIndex(function (data) {\n return (data[uniqueTaskID] === originalData[uniqueTaskID]);\n });\n if (this_3.parent.treeGrid.getRows()[originalIndex]) {\n this_3.parent.treeGrid.renderModule.cellRender({\n data: originalData, cell: this_3.parent.treeGrid.getRows()[originalIndex].cells[this_3.parent.treeColumnIndex + treeIndex],\n column: this_3.parent.treeGrid.grid.getColumns()[this_3.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n this_3.parent.treeGrid.renderModule.RowModifier({\n data: originalData, row: this_3.parent.treeGrid.getRows()[originalIndex], rowHeight: this_3.parent.rowHeight\n });\n }\n };\n var this_3 = this;\n for (var i = 0; i < this.parent.modifiedRecords.length; i++) {\n _loop_3(i);\n }\n };\n /**\n * @param {IGanttData} addedRecord .\n * @param {RowPosition} rowPosition .\n * @returns {void} .\n * @private\n */\n Edit.prototype.updateRealDataSource = function (addedRecord, rowPosition) {\n var taskFields = this.parent.taskFields;\n var dataSource = isCountRequired(this.parent) ? getValue('result', this.parent.dataSource) :\n this.parent.dataSource;\n if (this.parent.dataSource instanceof DataManager) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n for (var i = 0; i < addedRecord.length; i++) {\n if (isNullOrUndefined(rowPosition) || isNullOrUndefined(this.addRowSelectedItem)) {\n rowPosition = rowPosition === 'Bottom' ? 'Bottom' : 'Top';\n }\n if (rowPosition === 'Top') {\n dataSource.splice(0, 0, addedRecord[i].taskData);\n }\n else if (rowPosition === 'Bottom') {\n dataSource.push(addedRecord[i].taskData);\n }\n else {\n if (!isNullOrUndefined(taskFields.id) && !isNullOrUndefined(taskFields.parentID)) {\n dataSource.push(addedRecord[i].taskData);\n }\n else {\n if (!this.isNewRecordAdded) {\n this.addDataInRealDataSource(dataSource, addedRecord[i].taskData, rowPosition);\n }\n this.isNewRecordAdded = false;\n }\n }\n this.isBreakLoop = false;\n }\n };\n /**\n * @param {object[]} dataCollection .\n * @param {IGanttData} record .\n * @param {RowPosition} rowPosition .\n * @returns {void} .\n * @private\n */\n Edit.prototype.addDataInRealDataSource = function (dataCollection, record, rowPosition) {\n for (var i = 0; i < dataCollection.length; i++) {\n var child = this.parent.taskFields.child;\n if (this.isBreakLoop) {\n break;\n }\n if (getValue(this.parent.taskFields.id, dataCollection[i]).toString() ===\n this.addRowSelectedItem.ganttProperties.rowUniqueID.toString()) {\n if (rowPosition === 'Above') {\n dataCollection.splice(i, 0, record);\n }\n else if (rowPosition === 'Below') {\n dataCollection.splice(i + 1, 0, record);\n }\n else if (rowPosition === 'Child') {\n if (dataCollection[i][child] && dataCollection[i][child].length > 0) {\n dataCollection[i][child].push(record);\n }\n else {\n dataCollection[i][child] = [];\n dataCollection[i][child].push(record);\n }\n }\n this.isBreakLoop = true;\n break;\n }\n else if (dataCollection[i][child]) {\n var childRecords = dataCollection[i][child];\n this.addDataInRealDataSource(childRecords, record, rowPosition);\n }\n }\n };\n /**\n * Method to update the values to client side from server side.\n *\n * @param {Object} e - Defines the new modified data from the server.\n * @param {ITaskAddedEventArgs} args - Defines the client side data.\n * @returns {void} .\n */\n Edit.prototype.updateClientDataFromServer = function (e, args) {\n var serverReturnedValue = e.addedRecords[0];\n var _aLength = Object.keys(serverReturnedValue).length;\n for (var j = 0, _a = Object.keys(serverReturnedValue); j < _aLength; j++) {\n var key = _a[parseInt(j.toString(), 10)];\n args.data[\"\" + key] = serverReturnedValue[\"\" + key];\n }\n if (this.parent.taskFields.id !== null) {\n args.data.ganttProperties['taskId'] = serverReturnedValue[this.parent.taskFields.id];\n }\n if (this.parent.taskFields.name !== null) {\n args.data.ganttProperties['taskName'] = serverReturnedValue[this.parent.taskFields.name];\n }\n if (this.parent.taskFields.startDate !== null) {\n args.data.ganttProperties['startDate'] = serverReturnedValue[this.parent.taskFields.startDate];\n }\n if (this.parent.taskFields.endDate !== null) {\n args.data.ganttProperties['endDate'] = serverReturnedValue[this.parent.taskFields.endDate];\n }\n if (this.parent.taskFields.duration !== null) {\n args.data.ganttProperties['duration'] = parseInt(serverReturnedValue[this.parent.taskFields.duration]);\n }\n if (this.parent.taskFields.durationUnit !== null) {\n args.data.ganttProperties['durationUnit'] = serverReturnedValue[this.parent.taskFields.durationUnit];\n }\n if (this.parent.taskFields.progress !== null) {\n args.data.ganttProperties['progress'] = serverReturnedValue[this.parent.taskFields.progress];\n }\n if (this.parent.taskFields.dependency !== null) {\n args.data.ganttProperties['dependency'] = serverReturnedValue[this.parent.taskFields.dependency];\n }\n if (this.parent.taskFields.parentID !== null) {\n args.data.ganttProperties['parentID'] = serverReturnedValue[this.parent.taskFields.parentID];\n }\n if (this.parent.taskFields.baselineEndDate !== null) {\n args.data.ganttProperties['baselineEndDate'] = serverReturnedValue[this.parent.taskFields.baselineEndDate];\n }\n if (this.parent.taskFields.baselineStartDate !== null) {\n args.data.ganttProperties['baselineStartDate'] = serverReturnedValue[this.parent.taskFields.baselineStartDate];\n }\n if (this.parent.taskFields.resourceInfo !== null) {\n args.data.ganttProperties['resources'] = serverReturnedValue[this.parent.taskFields.resourceInfo];\n }\n };\n /**\n * Method to add new record.\n *\n * @param {Object[] | Object} data - Defines the new data to add.\n * @param {RowPosition} rowPosition - Defines the position of row.\n * @param {number} rowIndex - Defines the row index.\n * @returns {void} .\n * @private\n */\n Edit.prototype.addRecord = function (data, rowPosition, rowIndex) {\n var _this = this;\n var tempTaskID = this.parent.taskFields.id;\n if (this.parent.editModule && this.parent.editSettings.allowAdding) {\n this.parent.isDynamicData = true;\n var cAddedRecord_1 = [];\n if (isNullOrUndefined(data)) {\n this.validateTaskPosition(data, rowPosition, rowIndex, cAddedRecord_1);\n }\n else if (data instanceof Array) {\n for (var i = 0; i < data.length; i++) {\n this.validateTaskPosition(data[i], rowPosition, rowIndex, cAddedRecord_1);\n }\n }\n else if (typeof (data) == 'object') {\n this.validateTaskPosition(data, rowPosition, rowIndex, cAddedRecord_1);\n }\n else {\n return;\n }\n var args = {};\n args = this.constructTaskAddedEventArgs(cAddedRecord_1, this.parent.editedRecords, 'beforeAdd');\n this.parent.trigger('actionBegin', args, function (args) {\n if (!isNullOrUndefined(_this.parent.loadingIndicator) && _this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n _this.parent.showMaskRow();\n }\n else {\n _this.parent.showSpinner();\n }\n var tasks = _this.parent.taskFields;\n var ganttData = _this.parent.viewType === 'ResourceView' ?\n _this.parent.flatData[_this.parent.getTaskIds().indexOf('T' + args.data[tasks.id])] : _this.parent.getRecordByID(args.data[tasks.id]);\n if (!isNullOrUndefined(ganttData)) {\n _this.validateUpdateValues(args.newTaskData, ganttData, true);\n }\n if (!isNullOrUndefined(args.data[\"\" + tempTaskID])) {\n if (args.data[tempTaskID] != args.data['ganttProperties']['taskId']) {\n args.data['ganttProperties']['taskId'] = args.data[tempTaskID];\n args.newTaskData[tempTaskID] = args.data[tempTaskID];\n }\n }\n if (!args.cancel) {\n if (isRemoteData(_this.parent.dataSource)) {\n var data_2 = _this.parent.dataSource;\n var updatedData_2 = {\n addedRecords: [args.newTaskData],\n changedRecords: args.modifiedTaskData\n };\n var prevID_1 = args.data.ganttProperties.taskId.toString();\n /* tslint:disable-next-line */\n var query = _this.parent.query instanceof Query ? _this.parent.query : new Query();\n var adaptor = data_2.adaptor;\n var moduleName = adaptor.getModuleName();\n if (!(moduleName == \"WebApiAdaptor\" || moduleName == \"ODataAdaptor\" || moduleName == \"ODataV4Adaptor\") || data_2.dataSource.batchUrl) {\n /* tslint:disable-next-line */\n var crud = data_2.saveChanges(updatedData_2, _this.parent.taskFields.id, null, query);\n crud.then(function (e) {\n if (_this.parent.taskFields.id && !isNullOrUndefined(e.addedRecords[0][_this.parent.taskFields.id]) &&\n e.addedRecords[0][_this.parent.taskFields.id].toString() == prevID_1) {\n _this.parent.setRecordValue('taskId', e.addedRecords[0][_this.parent.taskFields.id], args.data.ganttProperties, true);\n _this.parent.setRecordValue('taskData', e.addedRecords[0], args.data);\n _this.parent.setRecordValue(_this.parent.taskFields.id, e.addedRecords[0][_this.parent.taskFields.id], args.data);\n _this.parent.setRecordValue('rowUniqueID', e.addedRecords[0][_this.parent.taskFields.id].toString(), args.data.ganttProperties, true);\n _this.updateClientDataFromServer(e, args);\n var idsIndex = _this.parent.ids.indexOf(prevID_1);\n if (idsIndex !== -1) {\n _this.parent.ids[idsIndex] = e.addedRecords[0][_this.parent.taskFields.id].toString();\n }\n }\n _this.updateNewRecord(cAddedRecord_1, args);\n }).catch(function (e) {\n _this.removeAddedRecord();\n _this.dmFailure(e, args);\n _this._resetProperties();\n });\n }\n else {\n var addedRecords = 'addedRecords';\n var insertCrud = data_2.insert(updatedData_2[addedRecords], null, query);\n insertCrud.then(function (e) {\n var addedRecords;\n if (!isNullOrUndefined(e[0])) {\n addedRecords = e[0];\n }\n else {\n addedRecords = updatedData_2['addedRecords'][0];\n }\n _this.updateNewRecord(cAddedRecord_1, args);\n }).catch(function (e) {\n _this.removeAddedRecord();\n _this.dmFailure(e, args);\n _this._resetProperties();\n });\n }\n }\n else {\n if (_this.parent.viewType === 'ProjectView') {\n if ((rowPosition === 'Top' || rowPosition === 'Bottom') ||\n ((rowPosition === 'Above' || rowPosition === 'Below' || rowPosition === 'Child') || isNullOrUndefined(rowPosition) && !args.data.parentItem)) {\n if (args.data instanceof Array) {\n _this.updateRealDataSource(args.data, rowPosition);\n }\n else {\n var data_3 = [];\n data_3.push(args.data);\n _this.updateRealDataSource(data_3, rowPosition);\n _this.parent.currentSelection = cAddedRecord_1[0].ganttProperties;\n }\n }\n }\n else {\n var dataSource = isCountRequired(_this.parent) ? getValue('result', _this.parent.dataSource) :\n _this.parent.dataSource; // eslint-disable-line\n dataSource.push(args.data.taskData);\n }\n if (cAddedRecord_1.level === 0) {\n _this.parent.treeGrid.parentData.splice(0, 0, cAddedRecord_1);\n }\n _this.updateTreeGridUniqueID(cAddedRecord_1, 'add');\n _this.refreshNewlyAddedRecord(args, cAddedRecord_1);\n _this._resetProperties();\n }\n }\n else {\n args = args;\n _this.removeAddedRecord();\n _this.reUpdatePreviousRecords();\n _this._resetProperties();\n }\n });\n }\n };\n /**\n * Method to validateTaskPosition.\n *\n * @param {Object | object[] } data - Defines the new data to add.\n * @param {RowPosition} rowPosition - Defines the position of row.\n * @param {number} rowIndex - Defines the row index.\n * @param {IGanttData} cAddedRecord - Defines the single data to validate.\n * @returns {void} .\n * @private\n */\n Edit.prototype.createNewRecord = function () {\n var tempRecord = {};\n var ganttColumns = this.parent.ganttColumns;\n var taskSettingsFields = this.parent.taskFields;\n var taskId = this.parent.editModule.getNewTaskId();\n for (var i = 0; i < ganttColumns.length; i++) {\n var fieldName = ganttColumns[i].field;\n if (fieldName === taskSettingsFields.id) {\n tempRecord[fieldName] = taskId;\n }\n else if (ganttColumns[i].field === taskSettingsFields.startDate) {\n if (isNullOrUndefined(tempRecord[taskSettingsFields.endDate])) {\n tempRecord[fieldName] = this.parent.editModule.dialogModule.getMinimumStartDate();\n }\n else {\n tempRecord[fieldName] = new Date(tempRecord[taskSettingsFields.endDate]);\n }\n if (this.parent.timezone) {\n tempRecord[fieldName] = this.parent.dateValidationModule.remove(tempRecord[fieldName], this.parent.timezone);\n }\n }\n else if (ganttColumns[i].field === taskSettingsFields.endDate) {\n if (isNullOrUndefined(tempRecord[taskSettingsFields.startDate])) {\n tempRecord[fieldName] = this.parent.editModule.dialogModule.getMinimumStartDate();\n }\n else {\n tempRecord[fieldName] = new Date(tempRecord[taskSettingsFields.startDate]);\n }\n if (this.parent.timezone) {\n tempRecord[fieldName] = this.parent.dateValidationModule.remove(tempRecord[fieldName], this.parent.timezone);\n }\n }\n else if (ganttColumns[i].field === taskSettingsFields.duration) {\n tempRecord[fieldName] = 1;\n }\n else if (ganttColumns[i].field === taskSettingsFields.name) {\n tempRecord[fieldName] = this.parent.editModule.dialogModule['localeObj'].getConstant('addDialogTitle') + ' ' + taskId;\n }\n else if (ganttColumns[i].field === taskSettingsFields.progress) {\n tempRecord[fieldName] = 0;\n }\n else if (ganttColumns[i].field === taskSettingsFields.work) {\n tempRecord[fieldName] = 0;\n }\n else if (ganttColumns[i].field === 'taskType') {\n tempRecord[fieldName] = this.parent.taskType;\n }\n else if (ganttColumns[i].field === taskSettingsFields.milestone) {\n tempRecord[fieldName] = null;\n }\n else {\n tempRecord[this.parent.ganttColumns[i].field] = '';\n }\n }\n return tempRecord;\n };\n Edit.prototype.validateTaskPosition = function (data, rowPosition, rowIndex, cAddedRecord) {\n var selectedRowIndex = isNullOrUndefined(rowIndex) || isNaN(parseInt(rowIndex.toString(), 10)) ?\n this.parent.selectionModule ?\n (this.parent.selectionSettings.mode === 'Row' || this.parent.selectionSettings.mode === 'Both') &&\n this.parent.selectionModule.selectedRowIndexes.length === 1 ?\n this.parent.selectionModule.selectedRowIndexes[0] :\n this.parent.selectionSettings.mode === 'Cell' &&\n this.parent.selectionModule.getSelectedRowCellIndexes().length === 1 ?\n this.parent.selectionModule.getSelectedRowCellIndexes()[0].rowIndex : null : null : rowIndex;\n this.addRowSelectedItem = isNullOrUndefined(selectedRowIndex) ? null : this.parent.updatedRecords[selectedRowIndex];\n rowPosition = isNullOrUndefined(rowPosition) ? this.parent.editSettings.newRowPosition : rowPosition;\n data = isNullOrUndefined(data) ? this.createNewRecord() : data;\n if (((isNullOrUndefined(selectedRowIndex) || selectedRowIndex < 0 ||\n isNullOrUndefined(this.addRowSelectedItem)) && (rowPosition === 'Above'\n || rowPosition === 'Below'\n || rowPosition === 'Child')) || !rowPosition || (rowPosition !== 'Above'\n && rowPosition !== 'Below'\n && rowPosition !== 'Child' && rowPosition !== 'Top' &&\n rowPosition !== 'Bottom')) {\n rowPosition = 'Top';\n }\n var level = 0;\n var parentItem;\n switch (rowPosition) {\n case 'Top':\n case 'Bottom':\n if (this.parent.viewType === 'ResourceView') {\n level = 1;\n }\n else {\n level = 0;\n }\n break;\n case 'Above':\n case 'Below':\n level = this.addRowSelectedItem.level;\n parentItem = this.parent.getParentTask(this.addRowSelectedItem.parentItem);\n break;\n case 'Child':\n level = this.addRowSelectedItem.level + 1;\n parentItem = this.addRowSelectedItem;\n break;\n }\n this.prepareNewlyAddedData(data, rowPosition);\n var AddRecord = (this.updateNewlyAddedDataBeforeAjax(data, level, rowPosition, parentItem));\n cAddedRecord.push(AddRecord);\n };\n Edit.prototype.updateNewRecord = function (cAddedRecord, args) {\n if (cAddedRecord.level === 0) {\n this.parent.treeGrid.parentData.splice(0, 0, cAddedRecord);\n var tempData = getValue('dataOperation.dataArray', this.parent);\n tempData.splice(0, 0, cAddedRecord.taskData);\n }\n this.updateTreeGridUniqueID(cAddedRecord, 'add');\n this.refreshNewlyAddedRecord(args, cAddedRecord);\n this._resetProperties();\n };\n /**\n * Method to reset the flag after adding new record\n *\n * @returns {void} .\n */\n Edit.prototype._resetProperties = function () {\n this.parent.isOnEdit = false;\n this.parent.hideSpinner();\n this.addRowSelectedItem = null;\n this.newlyAddedRecordBackup = null;\n this.isBreakLoop = false;\n this.parent.element.tabIndex = 0;\n this.parent.initiateEditAction(false);\n };\n /**\n * Method to update unique id collection in TreeGrid\n *\n * @param {IGanttData} data .\n * @param {string} action .\n * @returns {void} .\n */\n Edit.prototype.updateTreeGridUniqueID = function (data, action) {\n if (action === 'add') {\n setValue('uniqueIDCollection.' + data.uniqueID, data, this.parent.treeGrid);\n }\n else if (action === 'delete') {\n deleteObject(getValue('uniqueIDCollection', this.parent.treeGrid), data.uniqueID);\n }\n };\n Edit.prototype.refreshNewlyAddedRecord = function (args, cAddedRecord) {\n if (this.parent.selectionModule && this.parent.allowSelection &&\n (this.parent.selectionSettings.mode === 'Row' || this.parent.selectionSettings.mode === 'Both')) {\n this.parent.staticSelectedRowIndex = this.parent.currentViewData.indexOf(args.data);\n }\n if (this.parent.timelineSettings.updateTimescaleView) {\n var tempArray = [];\n if (args.modifiedRecords.length > 0) {\n tempArray = args.data.length > 0 ? args.data : [args.data];\n // eslint-disable-next-line\n tempArray.push.apply(tempArray, args.modifiedRecords);\n }\n else {\n tempArray = args.data.length > 0 ? args.data : [args.data];\n }\n this.parent.timelineModule.updateTimeLineOnEditing([tempArray], args.action);\n }\n this.addSuccess(args);\n args = this.constructTaskAddedEventArgs(cAddedRecord, args.modifiedRecords, 'add');\n if (this.dialogModule.isAddNewResource && !this.parent.isEdit && this.parent.taskFields.work) {\n this.parent.dataOperation.updateWorkWithDuration(cAddedRecord[0]);\n }\n this.parent.trigger('actionComplete', args);\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.hideMaskRow();\n }\n else {\n this.parent.hideSpinner();\n }\n if (this.dialogModule.dialog && !this.dialogModule.dialogObj.isDestroyed) {\n this.dialogModule.dialogObj.hide();\n }\n this.dialogModule.dialogClose();\n if (this.parent.viewType === 'ResourceView') {\n if (cAddedRecord.length > 1) {\n for (var i = 0; i < cAddedRecord.length; i++) {\n args.data[i].ganttProperties.sharedTaskUniqueIds.push(args.data[i]\n .ganttProperties.rowUniqueID);\n if (args.data[i].ganttProperties.resourceInfo) {\n // if ((args.data[i] as IGanttData).ganttProperties.resourceInfo.length > 1) {\n var resources = extend([], [], args.data[i].ganttProperties.resourceInfo, true);\n resources.splice(0, 1);\n this.updateResoures([], resources, args.data[i]);\n // }\n }\n else {\n this.removeChildRecord(args.data[i]);\n this.parent.editModule.checkWithUnassignedTask(args.data[i]);\n }\n for (var k = 0; k < this.updateParentRecords.length; k++) {\n this.parent.dataOperation.updateParentItems(this.updateParentRecords[k]);\n }\n this.updateParentRecords = [];\n }\n }\n else {\n args.data.ganttProperties.sharedTaskUniqueIds.push(args.data.ganttProperties.rowUniqueID);\n // eslint-disable-next-line\n if (args.data.ganttProperties.resourceInfo && args.data.ganttProperties.resourceInfo.length) {\n if (args.data.ganttProperties.resourceInfo.length > 1) {\n // eslint-disable-next-line\n var resources = extend([], [], args.data.ganttProperties.resourceInfo, true);\n resources.splice(0, 1);\n this.updateResoures([], resources, args.data);\n }\n }\n else {\n this.removeChildRecord(args.data);\n this.parent.editModule.checkWithUnassignedTask(args.data);\n }\n for (var k = 0; k < this.updateParentRecords.length; k++) {\n this.parent.dataOperation.updateParentItems(this.updateParentRecords[k]);\n }\n this.updateParentRecords = [];\n }\n }\n };\n /**\n *\n * @returns {void} .\n * @private\n */\n Edit.prototype.removeAddedRecord = function () {\n var flatRecords = this.parent.flatData;\n var currentViewData = this.parent.currentViewData;\n var ids = this.parent.ids;\n var flatRecordsIndex = flatRecords.indexOf(this.newlyAddedRecordBackup);\n var currentViewDataIndex = currentViewData.indexOf(this.newlyAddedRecordBackup);\n var idsIndex = ids.indexOf(this.newlyAddedRecordBackup.ganttProperties.rowUniqueID.toString());\n deleteObject(this.parent.previousRecords, flatRecords[flatRecordsIndex].uniqueID);\n if (this.newlyAddedRecordBackup.parentItem) {\n var parentItem = this.parent.getParentTask(this.newlyAddedRecordBackup.parentItem);\n var parentIndex = parentItem.childRecords.indexOf(this.newlyAddedRecordBackup);\n parentItem.childRecords.splice(parentIndex, 1);\n }\n flatRecords.splice(flatRecordsIndex, 1);\n currentViewData.splice(currentViewDataIndex, 1);\n ids.splice(idsIndex, 1);\n };\n Edit.prototype.getPrevRecordIndex = function () {\n var prevRecord = this.parent.updatedRecords[this.parent.selectionModule.getSelectedRowIndexes()[0] - 1];\n var selectedRecord = this.parent.selectionModule.getSelectedRecords()[0];\n var parent = this.parent.getRootParent(prevRecord, selectedRecord.level);\n var prevIndex = this.parent.updatedRecords.indexOf(parent);\n return prevIndex;\n };\n /**\n * indent a selected record\n *\n * @returns {void} .\n */\n Edit.prototype.indent = function () {\n var index = this.parent.selectedRowIndex;\n var isSelected = this.parent.selectionModule ? this.parent.selectionModule.selectedRowIndexes.length === 1 ||\n this.parent.selectionModule.getSelectedRowCellIndexes().length === 1 ? true : false : false;\n var dropIndex;\n var prevRecord = this.parent.updatedRecords[this.parent.selectionModule.getSelectedRowIndexes()[0] - 1];\n var selectedRecord = this.parent.selectionModule.getSelectedRecords()[0];\n if (!this.parent.editSettings.allowEditing || index === 0 || index === -1 || !isSelected ||\n this.parent.viewType === 'ResourceView' || this.parent.updatedRecords[index].level - prevRecord.level === 1) {\n return;\n }\n else {\n if (prevRecord.level - selectedRecord.level === 0) {\n dropIndex = this.parent.selectionModule.getSelectedRowIndexes()[0] - 1;\n }\n else {\n dropIndex = this.getPrevRecordIndex();\n }\n this.indentOutdentRow([this.parent.selectionModule.getSelectedRowIndexes()[0]], dropIndex, 'child');\n }\n };\n /**\n * To perform outdent operation for selected row\n *\n * @returns {void} .\n */\n Edit.prototype.outdent = function () {\n var index = this.parent.selectionModule.getSelectedRowIndexes()[0];\n var dropIndex;\n var isSelected = this.parent.selectionModule ? this.parent.selectionModule.selectedRowIndexes.length === 1 ||\n this.parent.selectionModule.getSelectedRowCellIndexes().length === 1 ? true : false : false;\n if (!this.parent.editSettings.allowEditing || index === -1 || index === 0 || !isSelected ||\n this.parent.viewType === 'ResourceView' || this.parent.updatedRecords[index].level === 0) {\n return;\n }\n else {\n var thisParent = this.parent.getTaskByUniqueID(this.parent.selectionModule.getSelectedRecords()[0].parentItem.uniqueID);\n dropIndex = this.parent.updatedRecords.indexOf(thisParent);\n this.indentOutdentRow([index], dropIndex, 'below');\n }\n };\n Edit.prototype.indentOutdentRow = function (fromIndexes, toIndex, pos) {\n var _this = this;\n // eslint-disable-next-line\n if (fromIndexes[0] !== toIndex && pos === 'above' || 'below' || 'child') {\n if (pos === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (pos === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (pos === 'child') {\n this.dropPosition = 'middleSegment';\n }\n var action = void 0;\n var record = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n record[i] = this.parent.updatedRecords[fromIndexes[i]];\n }\n var isByMethod_1 = true;\n var args_1 = {\n data: record,\n dropIndex: toIndex,\n dropPosition: this.dropPosition\n };\n if (this.dropPosition === 'middleSegment') {\n action = 'indenting';\n }\n else if (this.dropPosition === 'bottomSegment') {\n action = 'outdenting';\n }\n var actionArgs = {\n action: action,\n data: record[0],\n cancel: false\n };\n this.parent.trigger('actionBegin', actionArgs, function (actionArg) {\n if (!isNullOrUndefined(_this.parent.loadingIndicator) && _this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n _this.parent.showMaskRow();\n }\n else {\n _this.parent.showSpinner();\n }\n if (!actionArg.cancel) {\n _this.reArrangeRows(args_1, isByMethod_1);\n }\n else {\n return;\n }\n });\n }\n else {\n return;\n }\n };\n Edit.prototype.reArrangeRows = function (args, isByMethod) {\n this.dropPosition = args.dropPosition;\n if (args.dropPosition !== 'Invalid' && this.parent.editModule) {\n var obj = this.parent;\n var draggedRec = void 0;\n this.droppedRecord = obj.updatedRecords[args.dropIndex];\n var dragRecords = [];\n var droppedRec = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n var c = 0;\n var dLength = dragRecords.length;\n for (var i = 0; i < dLength; i++) {\n this.parent.isOnEdit = true;\n draggedRec = dragRecords[i];\n this.draggedRecord = draggedRec;\n if (this.dropPosition !== 'Invalid') {\n if (isByMethod) {\n this.deleteDragRow();\n }\n var recordIndex1 = this.treeGridData.indexOf(droppedRec);\n if (this.dropPosition === 'bottomSegment') {\n if (!droppedRec.hasChildRecords) {\n if (this.parent.taskFields.parentID && this.ganttData.length > 0) {\n this.ganttData.splice(recordIndex1 + 1, 0, this.draggedRecord.taskData);\n }\n this.treeGridData.splice(recordIndex1 + 1, 0, this.draggedRecord);\n this.parent.ids.splice(recordIndex1 + 1, 0, this.draggedRecord.ganttProperties.rowUniqueID.toString());\n }\n else {\n c = this.parent.editModule.getChildCount(droppedRec, 0);\n if (this.parent.taskFields.parentID && this.ganttData.length > 0) {\n this.ganttData.splice(recordIndex1 + c + 1, 0, this.draggedRecord.taskData);\n }\n this.treeGridData.splice(recordIndex1 + c + 1, 0, this.draggedRecord);\n this.parent.ids.splice(recordIndex1 + c + 1, 0, this.draggedRecord.ganttProperties.rowUniqueID.toString());\n var idIndex = this.parent.ids.indexOf(this.draggedRecord[this.parent.taskFields.id].toString());\n if (idIndex !== recordIndex1 + c + 1) {\n this.parent.ids.splice(idIndex, 1);\n this.parent.ids.splice(recordIndex1 + c + 1, 0, this.draggedRecord[this.parent.taskFields.id].toString());\n }\n }\n this.parent.setRecordValue('parentItem', this.treeGridData[recordIndex1].parentItem, draggedRec);\n this.parent.setRecordValue('parentUniqueID', this.treeGridData[recordIndex1].parentUniqueID, draggedRec);\n this.parent.setRecordValue('level', this.treeGridData[recordIndex1].level, draggedRec);\n if (draggedRec.hasChildRecords) {\n var level = 1;\n this.updateChildRecordLevel(draggedRec, level);\n this.updateChildRecord(draggedRec, recordIndex1 + c + 1);\n }\n if (droppedRec.parentItem) {\n var record = this.parent.getParentTask(droppedRec.parentItem).childRecords;\n var childRecords = record;\n var droppedRecordIndex = childRecords.indexOf(droppedRec) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRec);\n }\n }\n if (this.dropPosition === 'middleSegment') {\n this.dropMiddle(recordIndex1);\n }\n if (!isNullOrUndefined(draggedRec.parentItem && this.updateParentRecords.indexOf(draggedRec.parentItem) !== -1)) {\n this.updateParentRecords.push(draggedRec.parentItem);\n }\n }\n if (isNullOrUndefined(draggedRec.parentItem)) {\n var parentRecords = this.parent.treeGrid.parentData;\n var newParentIndex = parentRecords.indexOf(this.droppedRecord);\n if (this.dropPosition === 'bottomSegment') {\n parentRecords.splice(newParentIndex + 1, 0, draggedRec);\n }\n }\n this.refreshDataSource();\n }\n if (this.dropPosition === 'middleSegment') {\n if (droppedRec.ganttProperties.predecessor) {\n this.parent.editModule.removePredecessorOnDelete(droppedRec);\n droppedRec.ganttProperties.predecessor = null;\n droppedRec.ganttProperties.predecessorsName = null;\n droppedRec[this.parent.taskFields.dependency] = null;\n droppedRec.taskData[this.parent.taskFields.dependency] = null;\n }\n if (droppedRec.ganttProperties.isMilestone) {\n this.parent.setRecordValue('isMilestone', false, droppedRec.ganttProperties, true);\n if (!isNullOrUndefined(droppedRec.taskData[this.parent.taskFields.milestone])) {\n if (droppedRec.taskData[this.parent.taskFields.milestone] === true) {\n droppedRec.taskData[this.parent.taskFields.milestone] = false;\n }\n }\n }\n }\n for (var k = 0; k < this.updateParentRecords.length; k++) {\n this.parent.dataOperation.updateParentItems(this.updateParentRecords[k]);\n }\n this.updateParentRecords = [];\n this.parent.isOnEdit = false;\n }\n this.refreshRecord(args);\n };\n /**\n * @returns {void} .\n * @private\n */\n Edit.prototype.refreshRecord = function (args, isDrag) {\n var _this = this;\n if (isRemoteData(this.parent.dataSource)) {\n var data = this.parent.dataSource;\n var updatedData = {\n changedRecords: getTaskData(this.parent.editedRecords, null, null, this.parent)\n };\n var queryValue = this.parent.query instanceof Query ? this.parent.query : new Query();\n var crud = null;\n var adaptor = data.adaptor;\n if (!(adaptor instanceof WebApiAdaptor && adaptor instanceof ODataAdaptor) || data.dataSource.batchUrl) {\n crud = data.saveChanges(updatedData, this.parent.taskFields.id, null, queryValue);\n }\n else {\n var changedRecords = 'changedRecords';\n crud = data.update(this.parent.taskFields.id, updatedData[changedRecords], null, queryValue);\n }\n crud.then(function (e) { return _this.indentSuccess(e, args, isDrag); })\n .catch(function (e) { return _this.indentFailure(e); });\n }\n else {\n this.indentOutdentSuccess(args, isDrag);\n }\n };\n Edit.prototype.indentSuccess = function (e, args, isDrag) {\n this.indentOutdentSuccess(args, isDrag);\n };\n Edit.prototype.indentFailure = function (e) {\n this.parent.trigger('actionFailure', { error: e });\n };\n Edit.prototype.indentOutdentSuccess = function (args, isDrag) {\n this.parent.treeGrid.parentData = [];\n this.parent.treeGrid.refresh();\n if (this.parent.enableImmutableMode) {\n this.refreshRecordInImmutableMode(args.data, isDrag);\n }\n if (isDrag) {\n args.requestType = 'rowDropped';\n }\n else {\n if (this.dropPosition === 'middleSegment') {\n args.requestType = 'indented';\n }\n else if (this.dropPosition === 'bottomSegment') {\n args.requestType = 'outdented';\n }\n }\n args.modifiedRecords = this.parent.editedRecords;\n if (this.parent.timezone) {\n for (var i = 0; i < args.modifiedRecords.length; i++) {\n updateDates(args.modifiedRecords[i], this.parent);\n }\n }\n this.parent.trigger('actionComplete', args);\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.hideMaskRow();\n }\n else {\n this.parent.hideSpinner();\n }\n this.parent.editedRecords = [];\n };\n Edit.prototype.refreshDataSource = function () {\n var draggedRec = this.draggedRecord;\n var droppedRec = this.droppedRecord;\n var proxy = this.parent;\n var tempData;\n var indx;\n if (this.parent.dataSource instanceof DataManager) {\n tempData = getValue('dataOperation.dataArray', this.parent);\n }\n else {\n tempData = proxy.dataSource;\n }\n if (tempData.length > 0 && (!isNullOrUndefined(droppedRec) && !droppedRec.parentItem)) {\n for (var i = 0; i < Object.keys(tempData).length; i++) {\n if (tempData[i][this.parent.taskFields.child] === droppedRec.taskData[this.parent.taskFields.child]) {\n indx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.taskFields.parentID) {\n tempData.splice(indx, 0, draggedRec.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.taskFields.parentID) {\n tempData.splice(indx + 1, 0, draggedRec.taskData);\n }\n }\n }\n else if (!this.parent.taskFields.parentID && (!isNullOrUndefined(droppedRec) && droppedRec.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var rowPos = this.dropPosition === 'topSegment' ? 'Above' : 'Below';\n this.parent.editModule.addRowSelectedItem = droppedRec;\n var dragRecord = [];\n if (!Array.isArray(draggedRec)) {\n dragRecord[0] = draggedRec;\n }\n else {\n dragRecord = draggedRec;\n }\n this.parent.editModule.updateRealDataSource(dragRecord, rowPos);\n delete this.parent.editModule.addRowSelectedItem;\n }\n }\n if (this.parent.taskFields.parentID) {\n if (draggedRec.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRec[this.parent.taskFields.parentID] = droppedRec[this.parent.taskFields.parentID];\n draggedRec.taskData[this.parent.taskFields.parentID] = droppedRec[this.parent.taskFields.parentID];\n draggedRec.ganttProperties['parentId'] = droppedRec[this.parent.taskFields.parentID];\n }\n else {\n draggedRec[this.parent.taskFields.parentID] = droppedRec[this.parent.taskFields.id];\n draggedRec.taskData[this.parent.taskFields.parentID] = droppedRec[this.parent.taskFields.id];\n draggedRec.ganttProperties['parentId'] = droppedRec[this.parent.taskFields.id];\n }\n }\n else {\n draggedRec[this.parent.taskFields.parentID] = null;\n draggedRec.taskData[this.parent.taskFields.parentID] = null;\n draggedRec.ganttProperties['parentId'] = null;\n }\n }\n };\n Edit.prototype.deleteDragRow = function () {\n if (this.parent.dataSource instanceof DataManager) {\n this.ganttData = getValue('dataOperation.dataArray', this.parent);\n }\n else {\n this.ganttData = isCountRequired(this.parent) ? getValue('result', this.parent.dataSource) :\n this.parent.dataSource;\n }\n this.treeGridData = isCountRequired(this.parent) ?\n getValue('result', this.parent.treeGrid.dataSource) : this.parent.treeGrid.dataSource;\n var delRow = this.parent.getTaskByUniqueID(this.draggedRecord.uniqueID);\n this.removeRecords(delRow);\n };\n Edit.prototype.updateIndentedChildRecords = function (indentedRecord) {\n var createParentItem = {\n uniqueID: indentedRecord.uniqueID,\n expanded: indentedRecord.expanded,\n level: indentedRecord.level,\n index: indentedRecord.index,\n taskId: indentedRecord.ganttProperties.rowUniqueID\n };\n for (var i = 0; i < indentedRecord.childRecords.length; i++) {\n this.parent.setRecordValue('parentItem', createParentItem, indentedRecord.childRecords[i]);\n this.parent.setRecordValue('parentUniqueID', indentedRecord.uniqueID, indentedRecord.childRecords[i]);\n }\n if (indentedRecord.hasChildRecords) {\n indentedRecord = indentedRecord.childRecords;\n for (var j = 0; j < indentedRecord['length']; j++) {\n this.updateIndentedChildRecords(indentedRecord[j]);\n }\n }\n };\n Edit.prototype.dropMiddle = function (recordIndex1) {\n var obj = this.parent;\n var childRec = this.parent.editModule.getChildCount(this.droppedRecord, 0);\n var childRecordsLength = (isNullOrUndefined(childRec) ||\n childRec === 0) ? recordIndex1 + 1 :\n childRec + recordIndex1 + 1;\n if (this.dropPosition === 'middleSegment') {\n if (obj.taskFields.parentID && this.ganttData.length > 0) {\n this.ganttData.splice(childRecordsLength, 0, this.draggedRecord.taskData);\n }\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n this.parent.ids.splice(childRecordsLength, 0, this.draggedRecord[this.parent.taskFields.id].toString());\n this.recordLevel();\n if (this.draggedRecord.hasChildRecords) {\n this.updateChildRecord(this.draggedRecord, childRecordsLength, this.droppedRecord.expanded);\n if (this.parent.enableImmutableMode) {\n var indentedRecord = this.draggedRecord;\n this.updateIndentedChildRecords(indentedRecord);\n }\n }\n if (isNullOrUndefined(this.draggedRecord.parentItem &&\n this.updateParentRecords.indexOf(this.draggedRecord.parentItem) !== -1)) {\n this.updateParentRecords.push(this.draggedRecord.parentItem);\n }\n }\n };\n Edit.prototype.updateChildRecordLevel = function (record, levl) {\n var length = 0;\n var currentRec;\n levl++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var j = 0; j < length; j++) {\n currentRec = record.childRecords[j];\n var parentData = void 0;\n if (record.parentItem) {\n var id = 'uniqueIDCollection';\n parentData = this.parent.treeGrid[id][record.parentItem.uniqueID];\n }\n currentRec.level = record.parentItem ? parentData.level + levl : record.level + 1;\n if (currentRec.hasChildRecords) {\n levl--;\n levl = this.updateChildRecordLevel(currentRec, levl);\n }\n }\n return levl;\n };\n /* eslint-disable-next-line */\n Edit.prototype.updateChildRecord = function (record, count, expanded) {\n var currentRec;\n var obj = this.parent;\n var length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRec = record.childRecords[i];\n count++;\n obj.flatData.splice(count, 0, currentRec);\n this.parent.ids.splice(count, 0, currentRec.ganttProperties.rowUniqueID.toString());\n if (obj.taskFields.parentID && this.ganttData.length > 0) {\n this.ganttData.splice(count, 0, currentRec.taskData);\n }\n if (currentRec.hasChildRecords) {\n count = this.updateChildRecord(currentRec, count);\n }\n }\n return count;\n };\n Edit.prototype.removeRecords = function (record) {\n var obj = this.parent;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager) {\n dataSource = getValue('dataOperation.dataArray', this.parent);\n }\n else {\n dataSource = this.parent.dataSource;\n }\n var delRow = record;\n var flatParent = this.parent.getParentTask(delRow.parentItem);\n if (delRow) {\n if (delRow.parentItem) {\n var childRecords = flatParent ? flatParent.childRecords : [];\n var childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(delRow);\n flatParent.childRecords.splice(childIndex, 1);\n if (!this.parent.taskFields.parentID) {\n flatParent.taskData[this.parent.taskFields.child].splice(childIndex, 1);\n }\n // collection for updating parent record\n this.updateParentRecords.push(flatParent);\n }\n }\n if (obj.taskFields.parentID) {\n if (delRow.hasChildRecords && delRow.childRecords.length > 0) {\n this.removeChildItem(delRow);\n }\n var indx = void 0;\n var ganttData = dataSource.length > 0 ?\n dataSource : this.parent.currentViewData;\n for (var i = 0; i < ganttData.length; i++) {\n if (ganttData[i][this.parent.taskFields.id] === delRow.taskData[this.parent.taskFields.id]) {\n indx = i;\n }\n }\n if (indx !== -1) {\n if (dataSource.length > 0) {\n dataSource.splice(indx, 1);\n }\n var gridIndx = void 0;\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.taskFields.id] === delRow.taskData[this.parent.taskFields.id]) {\n gridIndx = i;\n }\n }\n this.treeGridData.splice(gridIndx, 1);\n this.parent.ids.splice(gridIndx, 1);\n if (this.parent.treeGrid.parentData.indexOf(delRow) !== -1) {\n this.parent.treeGrid.parentData.splice(this.parent.treeGrid.parentData.indexOf(delRow), 1);\n }\n }\n }\n var recordIdx = this.treeGridData.indexOf(delRow);\n if (!obj.taskFields.parentID) {\n var deletedRecordCount = this.getChildCount(delRow, 0);\n this.treeGridData.splice(recordIdx, deletedRecordCount + 1);\n this.parent.ids.splice(recordIdx, deletedRecordCount + 1);\n var parentIndex = this.ganttData.indexOf(delRow.taskData);\n if (parentIndex !== -1) {\n this.ganttData.splice(parentIndex, 1);\n this.parent.treeGrid.parentData.splice(parentIndex, 1);\n }\n }\n if (delRow.parentItem && flatParent && flatParent.childRecords && !flatParent.childRecords.length) {\n this.parent.setRecordValue('expanded', false, flatParent);\n this.parent.setRecordValue('hasChildRecords', false, flatParent);\n }\n }\n };\n Edit.prototype.removeChildItem = function (record) {\n var currentRec;\n var indx;\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRec = record.childRecords[i];\n var data = void 0;\n if (this.parent.dataSource instanceof DataManager) {\n data = getValue('dataOperation.dataArray', this.parent);\n }\n else {\n data = this.parent.dataSource;\n }\n for (var j = 0; j < data.length; j++) {\n if (data[j][this.parent.taskFields.id] === currentRec.taskData[this.parent.taskFields.id]) {\n indx = j;\n }\n }\n if (indx !== -1) {\n if (data.length > 0) {\n data.splice(indx, 1);\n }\n var gridIndx = void 0;\n for (var i_1 = 0; i_1 < this.treeGridData.length; i_1++) {\n if (this.treeGridData[i_1][this.parent.taskFields.id] === currentRec.taskData[this.parent.taskFields.id]) {\n gridIndx = i_1;\n }\n }\n this.treeGridData.splice(gridIndx, 1);\n this.parent.ids.splice(gridIndx, 1);\n }\n if (currentRec.hasChildRecords) {\n this.removeChildItem(currentRec);\n }\n }\n };\n Edit.prototype.recordLevel = function () {\n var obj = this.parent;\n var draggedRec = this.draggedRecord;\n var droppedRec = this.droppedRecord;\n var childItem = obj.taskFields.child;\n if (!droppedRec.hasChildRecords) {\n droppedRec.hasChildRecords = true;\n if (!droppedRec.childRecords.length) {\n droppedRec.childRecords = [];\n if (!obj.taskFields.parentID && isNullOrUndefined(droppedRec.taskData[childItem])) {\n droppedRec.taskData[childItem] = [];\n }\n }\n }\n if (this.dropPosition === 'middleSegment') {\n var parentItem = extend({}, droppedRec);\n delete parentItem.childRecords;\n var createParentItem = {\n uniqueID: parentItem.uniqueID,\n expanded: parentItem.expanded,\n level: parentItem.level,\n index: parentItem.index,\n taskId: parentItem.ganttProperties.rowUniqueID\n };\n this.parent.setRecordValue('parentItem', createParentItem, draggedRec);\n this.parent.setRecordValue('parentUniqueID', droppedRec.uniqueID, draggedRec);\n droppedRec.childRecords.splice(droppedRec.childRecords.length, 0, draggedRec);\n if (!isNullOrUndefined(draggedRec) && !obj.taskFields.parentID && !isNullOrUndefined(droppedRec.taskData[childItem])) {\n droppedRec.taskData[obj.taskFields.child].splice(droppedRec.childRecords.length, 0, draggedRec.taskData);\n }\n if (!isNullOrUndefined(droppedRec.ganttProperties.segments) && droppedRec.ganttProperties.segments.length > 0) {\n droppedRec.ganttProperties.segments = null;\n droppedRec.taskData[obj.taskFields.segments] = null;\n }\n if (!draggedRec.hasChildRecords) {\n draggedRec.level = droppedRec.level + 1;\n }\n else {\n var level = 1;\n draggedRec.level = droppedRec.level + 1;\n this.updateChildRecordLevel(draggedRec, level);\n }\n droppedRec.expanded = true;\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { parentsUntil, getActualProperties } from '@syncfusion/ej2-grids';\nimport { setCssInGridPopUp } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, removeClass, getValue, addClass, closest, setValue, extend } from '@syncfusion/ej2-base';\nimport { Deferred } from '@syncfusion/ej2-data';\n/**\n * The Selection module is used to handle cell and row selection.\n */\nvar Selection = /** @class */ (function () {\n function Selection(gantt) {\n this.isSelectionFromChart = false;\n this.multipleIndexes = [];\n this.selectedRowIndexes = [];\n this.enableSelectMultiTouch = false;\n this.openPopup = false;\n this.parent = gantt;\n this.bindEvents();\n this.parent.treeGrid.selectedRowIndex = this.parent.selectedRowIndex;\n this.parent.treeGrid.allowSelection = this.parent.allowSelection;\n this.parent.treeGrid.grid.selectionSettings.enableToggle = this.parent.selectionSettings.enableToggle;\n this.parent.treeGrid.selectionSettings = getActualProperties(this.parent.selectionSettings);\n this.wireEvents();\n }\n /**\n * Get module\n *\n * @returns {string} .\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.wireEvents = function () {\n this.parent.on('selectRowByIndex', this.selectRowByIndex, this);\n if (this.parent.isAdaptive) {\n this.parent.on('chartMouseClick', this.mouseUpHandler, this);\n this.parent.on('treeGridClick', this.popUpClickHandler, this);\n }\n else {\n this.parent.on('chartMouseUp', this.mouseUpHandler, this);\n }\n };\n /**\n * To update selected index.\n *\n * @returns {void} .\n * @private\n */\n Selection.prototype.selectRowByIndex = function () {\n if ((this.parent.selectedRowIndex !== -1 || this.parent.staticSelectedRowIndex !== -1) && this.parent.isLoad) {\n this.selectRow(this.parent.staticSelectedRowIndex !== -1 ? this.parent.staticSelectedRowIndex : this.parent.selectedRowIndex);\n this.parent.staticSelectedRowIndex = -1;\n }\n };\n /**\n * To bind selection events.\n *\n * @returns {void} .\n * @private\n */\n Selection.prototype.bindEvents = function () {\n this.parent.treeGrid.rowSelecting = this.rowSelecting.bind(this);\n this.parent.treeGrid.rowSelected = this.rowSelected.bind(this);\n this.parent.treeGrid.rowDeselecting = this.rowDeselecting.bind(this);\n this.parent.treeGrid.rowDeselected = this.rowDeselected.bind(this);\n this.parent.treeGrid.cellSelecting = this.cellSelecting.bind(this);\n this.parent.treeGrid.cellSelected = this.cellSelected.bind(this);\n this.parent.treeGrid.cellDeselecting = this.cellDeselecting.bind(this);\n this.parent.treeGrid.cellDeselected = this.cellDeselected.bind(this);\n };\n Selection.prototype.rowSelecting = function (args) {\n if (!this.parent.isGanttChartRendered) {\n args.cancel = true;\n return;\n }\n args.isCtrlPressed = this.isMultiCtrlRequest;\n args.isShiftPressed = this.isMultiShiftRequest;\n args.target = this.actualTarget;\n if (!isNullOrUndefined(args.foreignKeyData) && Object.keys(args.foreignKeyData).length === 0) {\n delete args.foreignKeyData;\n }\n this.parent.trigger('rowSelecting', args);\n };\n Selection.prototype.rowSelected = function (args) {\n var rowIndexes = 'rowIndexes';\n var index = (this.parent.selectionSettings.type === 'Multiple' && !isNullOrUndefined(args[rowIndexes])) ?\n args[rowIndexes] : [args.rowIndex];\n this.addRemoveClass(index);\n this.selectedRowIndexes = extend([], this.getSelectedRowIndexes(), [], true);\n this.parent.setProperties({ selectedRowIndex: this.parent.treeGrid.grid.selectedRowIndex }, true);\n if (this.isMultiShiftRequest) {\n this.selectedRowIndexes = index;\n }\n if (this.parent.autoFocusTasks) {\n this.parent.ganttChartModule.updateScrollLeft(getValue('data.ganttProperties.left', args));\n }\n args.target = this.actualTarget;\n if (!isNullOrUndefined(args.foreignKeyData) && Object.keys(args.foreignKeyData).length === 0) {\n delete args.foreignKeyData;\n }\n this.prevRowIndex = args.rowIndex;\n if (!isNullOrUndefined(this.parent.toolbarModule)) {\n this.parent.toolbarModule.refreshToolbarItems(args);\n }\n this.parent.trigger('rowSelected', args);\n };\n Selection.prototype.rowDeselecting = function (args) {\n args.target = this.actualTarget;\n args.isInteracted = this.isInteracted;\n this.parent.trigger('rowDeselecting', args);\n };\n Selection.prototype.rowDeselected = function (args) {\n var index;\n var isContains;\n if (this.multipleIndexes.length !== 0) {\n index = this.multipleIndexes;\n }\n else {\n if (!isNullOrUndefined(args.rowIndexes)) {\n for (var i = 0; i < args.rowIndexes.length; i++) {\n if (args.rowIndexes[i] === args.rowIndex) {\n isContains = true;\n }\n }\n if (isContains) {\n index = args.rowIndexes;\n }\n else {\n index = [args.rowIndex];\n }\n }\n else {\n index = [args.rowIndex];\n }\n }\n this.addRemoveClass(index);\n this.selectedRowIndexes = extend([], this.getSelectedRowIndexes(), [], true);\n this.parent.setProperties({ selectedRowIndex: -1 }, true);\n if (this.selectedRowIndexes.length === 1) {\n this.parent.setProperties({ selectedRowIndex: this.selectedRowIndexes[0] }, true);\n }\n if (!isNullOrUndefined(this.parent.toolbarModule)) {\n this.parent.toolbarModule.refreshToolbarItems();\n }\n if (this.parent.selectionSettings.type === 'Multiple' && this.parent.isAdaptive\n && this.selectedRowIndexes.length === 0) {\n this.hidePopUp();\n }\n args.target = this.actualTarget;\n args.isInteracted = this.isInteracted;\n this.parent.trigger('rowDeselected', args);\n this.isInteracted = false;\n this.multipleIndexes = [];\n };\n Selection.prototype.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n this.parent.trigger('cellSelecting', args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n Selection.prototype.cellSelected = function (args) {\n this.parent.trigger('cellSelected', args);\n if (!isNullOrUndefined(this.parent.toolbarModule)) {\n this.parent.toolbarModule.refreshToolbarItems();\n }\n };\n Selection.prototype.cellDeselecting = function (args) {\n this.parent.trigger('cellDeselecting', args);\n };\n Selection.prototype.cellDeselected = function (args) {\n this.parent.trigger('cellDeselected', args);\n if (!isNullOrUndefined(this.parent.toolbarModule)) {\n this.parent.toolbarModule.refreshToolbarItems();\n }\n };\n /**\n * Selects a cell by given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void} .\n */\n Selection.prototype.selectCell = function (cellIndex, isToggle) {\n this.parent.treeGrid.selectCell(cellIndex, isToggle);\n };\n /**\n * Selects a collection of cells by row and column indexes.\n *\n * @param {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n * @returns {void} .\n */\n Selection.prototype.selectCells = function (rowCellIndexes) {\n this.parent.treeGrid.grid.selectCells(rowCellIndexes);\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @param {boolean} isPreventFocus .\n * @returns {void} .\n */\n Selection.prototype.selectRow = function (index, isToggle, isPreventFocus) {\n var ganttRow = [].slice.call(this.parent.ganttChartModule.chartBodyContent.querySelector('tbody').children);\n // eslint-disable-next-line\n if (this.parent.enableVirtualization && this.parent.treeGridModule.addedRecord) {\n index = this.parent.flatData.indexOf(this.parent.currentViewData[index]);\n this.parent.treeGridModule.addedRecord = false;\n }\n var selectedRow = ganttRow.filter(function (e) { return parseInt(e.getAttribute('aria-rowindex'), 0) === index; })[0];\n var condition;\n if (index === -1 || isNullOrUndefined(selectedRow) || this.parent.selectionSettings.mode === 'Cell') {\n return;\n }\n if (this.parent.showActiveElement && !isPreventFocus) {\n this.parent.treeGrid.grid.selectionModule.preventFocus = true;\n }\n else {\n this.parent.treeGrid.grid.selectionModule.preventFocus = false;\n }\n if ((!isNullOrUndefined(this.selectedClass) && (this.selectedClass === selectedRow) && (!isToggle))) {\n condition = true;\n }\n if (condition !== true) {\n this.parent.treeGrid.selectRow(index, isToggle);\n }\n this.parent.treeGrid.grid.selectionModule.preventFocus = this.parent.treeGrid.grid.selectionModule.preventFocus === true ?\n false : this.parent.treeGrid.grid.selectionModule.preventFocus;\n this.prevRowIndex = index;\n this.selectedClass = selectedRow;\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} records - Defines the collection of row indexes.\n * @returns {void} .\n */\n Selection.prototype.selectRows = function (records) {\n if (!isNullOrUndefined(records) && records.length > 0) {\n this.parent.treeGrid.selectRows(records);\n }\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} .\n */\n Selection.prototype.getSelectedRowIndexes = function () {\n return this.parent.treeGrid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {number[]} .\n */\n Selection.prototype.getSelectedRowCellIndexes = function () {\n return this.parent.treeGrid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @returns {Object[]} .\n */\n Selection.prototype.getSelectedRecords = function () {\n return this.parent.treeGrid.getSelectedRecords();\n };\n /**\n * Get the selected records for cell selection.\n *\n * @returns {IGanttData[]} .\n */\n Selection.prototype.getCellSelectedRecords = function () {\n var cellDetails = this.parent.selectionModule.getSelectedRowCellIndexes();\n var cellSelectedRecords = [];\n for (var i = 0; i < cellDetails.length; i++) {\n cellSelectedRecords.push(this.parent.currentViewData[cellDetails[i].rowIndex]);\n }\n return cellSelectedRecords;\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} .\n */\n Selection.prototype.getSelectedRows = function () {\n return this.parent.treeGrid.getSelectedRows();\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void} .\n */\n Selection.prototype.clearSelection = function () {\n this.addRemoveClass(this.selectedRowIndexes);\n this.parent.treeGrid.clearSelection();\n this.parent.selectedRowIndex = -1;\n this.selectedRowIndexes = [];\n this.selectedClass = null;\n if (!isNullOrUndefined(this.parent.toolbarModule)) {\n this.parent.toolbarModule.refreshToolbarItems();\n }\n this.isInteracted = false;\n };\n Selection.prototype.highlightSelectedRows = function (e, fromChart) {\n this.isMultiCtrlRequest = e.ctrlKey || this.enableSelectMultiTouch;\n this.isMultiShiftRequest = e.shiftKey;\n this.actualTarget = e.target;\n this.isInteracted = true;\n this.isSelectionFromChart = fromChart;\n if (fromChart) {\n var selectedRow = closest(e.target, 'tr.e-chart-row');\n var rIndex = parseInt(selectedRow.getAttribute('aria-rowindex'), 10);\n var isToggle = this.parent.selectionSettings.enableToggle;\n if (this.parent.selectionSettings.type === 'Single' || (!this.isMultiCtrlRequest && !this.isMultiShiftRequest)) {\n if (!this.parent.allowTaskbarDragAndDrop || (this.parent.allowTaskbarDragAndDrop && (this.parent.rowDragAndDropModule &&\n !this.parent.rowDragAndDropModule['draggedRecord']))) {\n this.selectRow(rIndex, isToggle);\n }\n }\n else {\n if (this.isMultiShiftRequest) {\n this.selectRowsByRange(isNullOrUndefined(this.prevRowIndex) ? rIndex : this.prevRowIndex, rIndex);\n }\n else {\n setValue('isMultiCtrlRequest', true, this.parent.treeGrid.grid.selectionModule);\n this.parent.treeGrid.grid.selectionModule.addRowsToSelection([rIndex]);\n var isUnSelected = this.selectedRowIndexes.indexOf(rIndex) > -1;\n if (isUnSelected) {\n this.addRemoveClass([rIndex]);\n }\n }\n }\n }\n };\n Selection.prototype.getselectedrowsIndex = function (startIndex, endIndex) {\n var indexes = [];\n // eslint-disable-next-line\n var _a = (startIndex < endIndex) ?\n { i: startIndex, max: endIndex } : { i: endIndex, max: startIndex }, i = _a.i, max = _a.max;\n for (; i <= max; i++) {\n indexes.push(i);\n }\n if (startIndex > endIndex) {\n indexes.reverse();\n }\n this.selectedRowIndexes = indexes;\n };\n /**\n * Selects a range of rows from start and end row indexes.\n *\n * @param {number} startIndex - Defines the start row index.\n * @param {number} endIndex - Defines the end row index.\n * @returns {void} .\n */\n Selection.prototype.selectRowsByRange = function (startIndex, endIndex) {\n this.isSelectionFromChart = true;\n this.getselectedrowsIndex(startIndex, endIndex);\n this.selectRows(this.selectedRowIndexes);\n };\n Selection.prototype.addRemoveClass = function (records) {\n if (typeof (records) == \"number\") {\n records = [records];\n }\n var ganttRow = [].slice.call(this.parent.ganttChartModule.chartBodyContent.querySelector('tbody').children);\n var _loop_1 = function (i) {\n var selectedRow = ganttRow.filter(function (e) {\n // eslint-disable-next-line\n return parseInt(e.getAttribute('aria-rowindex'), 0) === records[i];\n })[0];\n if (!isNullOrUndefined(selectedRow)) {\n // eslint-disable-next-line\n this_1.getSelectedRowIndexes().indexOf(records[i]) > -1 ? this_1.addClass(selectedRow) : this_1.removeClass(selectedRow);\n }\n };\n var this_1 = this;\n for (var i = 0; i < records.length; i++) {\n _loop_1(i);\n }\n };\n Selection.prototype.addClass = function (selectedRow) {\n addClass([selectedRow], 'e-active');\n selectedRow.setAttribute('aria-selected', 'true');\n };\n Selection.prototype.removeClass = function (selectedRow) {\n removeClass([selectedRow], 'e-active');\n selectedRow.removeAttribute('aria-selected');\n };\n Selection.prototype.showPopup = function (e) {\n if (this.isSelectionFromChart) {\n setCssInGridPopUp(this.parent.element.querySelector('.e-ganttpopup'), e, 'e-rowselect e-icons e-icon-rowselect' +\n ((this.enableSelectMultiTouch &&\n (this.getSelectedRecords().length > 1 || this.getSelectedRowCellIndexes().length > 1)) ? ' e-spanclicked' : ''));\n document.getElementsByClassName('e-gridpopup')[0].style.display = 'none';\n this.openPopup = true;\n }\n else if (this.selectedRowIndexes.length === 0) {\n this.hidePopUp();\n }\n };\n /**\n * @returns {void} .\n * @private\n */\n Selection.prototype.hidePopUp = function () {\n if (this.openPopup) {\n document.getElementsByClassName('e-ganttpopup')[0].style.display = 'none';\n this.openPopup = false;\n }\n else {\n document.getElementsByClassName('e-gridpopup')[0].style.display = 'none';\n }\n };\n Selection.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n var grid = this.parent.treeGrid.grid;\n var $popUpElemet = closest(target, '.e-ganttpopup') ?\n closest(target, '.e-ganttpopup') : closest(target, '.e-gridpopup');\n if ($popUpElemet) {\n var spanElement = $popUpElemet.querySelector('.' + 'e-rowselect');\n if (closest(target, '.e-ganttpopup') &&\n !spanElement.classList.contains('e-spanclicked')) {\n this.enableSelectMultiTouch = true;\n spanElement.classList.add('e-spanclicked');\n }\n else if (closest(target, '.e-gridpopup') &&\n spanElement.classList.contains('e-spanclicked')) {\n this.openPopup = true;\n this.enableSelectMultiTouch = true;\n }\n else {\n this.hidePopUp();\n this.enableSelectMultiTouch = false;\n if (closest(target, '.e-ganttpopup')) {\n spanElement.classList.remove('e-spanclicked');\n }\n }\n }\n else if (this.parent.selectionSettings.type === 'Multiple' && this.parent.isAdaptive) {\n var $tr = closest(target, '.e-rowcell');\n if ($tr && this.selectedRowIndexes.length === 0) {\n this.hidePopUp();\n }\n }\n if (grid) {\n setValue('enableSelectMultiTouch', this.enableSelectMultiTouch, grid.selectionModule);\n }\n };\n /**\n * @param {PointerEvent} e .\n * @returns {void} .\n * @private\n */\n Selection.prototype.mouseUpHandler = function (e) {\n var isTaskbarEdited = false;\n var elements = document.querySelectorAll('.e-drag-item');\n var targetElement = null;\n if (e.target.closest('.e-rowcell')) {\n targetElement = e.target;\n }\n else if (e.target.closest('.e-chart-row')) {\n targetElement = e.target.closest('.e-left-label-container') ||\n e.target.closest('.e-taskbar-main-container') || e.target.closest('.e-right-label-container');\n }\n if (this.parent.focusModule) {\n this.parent.focusModule.setActiveElement(targetElement);\n }\n if (this.parent.editModule && this.parent.editSettings.allowTaskbarEditing && this.parent.editModule.taskbarEditModule) {\n var taskbarEdit = this.parent.editModule.taskbarEditModule;\n if (taskbarEdit.isMouseDragged || taskbarEdit.tapPointOnFocus) {\n isTaskbarEdited = true;\n }\n }\n if (!isTaskbarEdited && this.parent.element.contains(e.target) && !(elements.length === 1)) {\n var parent_1 = parentsUntil(e.target, 'e-chart-row');\n var isSelected = e.target.classList.contains('e-rowcell') ||\n e.target.classList.contains('e-row') ||\n e.target.classList.contains('e-treegridexpand') ||\n e.target.classList.contains('e-treegridcollapse') || !isNullOrUndefined(parent_1);\n this.popUpClickHandler(e);\n if (this.parent.selectionSettings.mode !== 'Cell' && isSelected) {\n if (closest(e.target, 'tr.e-chart-row')) {\n if (this.parent.enableVirtualization) {\n this.parent.treeGrid.grid.selectionModule.isInteracted = true;\n }\n this.highlightSelectedRows(e, true);\n }\n else {\n this.highlightSelectedRows(e, false);\n }\n if (this.parent.selectionSettings.type === 'Multiple' && this.parent.isAdaptive) {\n if (this.selectedRowIndexes.length > 0) {\n this.showPopup(e);\n }\n else {\n this.hidePopUp();\n }\n }\n }\n else {\n this.isSelectionFromChart = false;\n }\n }\n };\n /**\n * To add class for selected records in virtualization mode.\n *\n * @param {number} i .\n * @returns {void} .\n * @hidden\n */\n Selection.prototype.maintainSelectedRecords = function (i) {\n var index = this.parent.selectionModule.getSelectedRowIndexes().indexOf(i);\n if (index > -1) {\n this.addRemoveClass([i]);\n }\n };\n /**\n * To destroy the selection module.\n *\n * @returns {void} .\n * @private\n */\n Selection.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('selectRowByIndex', this.selectRowByIndex);\n if (this.parent.isAdaptive) {\n this.parent.off('chartMouseClick', this.mouseUpHandler);\n this.parent.off('treeGridClick', this.popUpClickHandler);\n }\n else {\n this.parent.off('chartMouseUp', this.mouseUpHandler);\n }\n };\n return Selection;\n}());\nexport { Selection };\n","/**\n * This file was to define all public and internal events\n */\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n","import { Toolbar as NavToolbar } from '@syncfusion/ej2-navigations';\nimport { createElement, extend, isNullOrUndefined, remove, getValue, EventHandler, addClass } from '@syncfusion/ej2-base';\nimport * as cls from '../base/css-constants';\nimport * as events from '../base/constant';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n this.predefinedItems = {};\n this.items = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'ExpandAll', 'CollapseAll', 'Search',\n 'PrevTimeSpan', 'NextTimeSpan', 'ZoomIn', 'ZoomOut', 'ZoomToFit', 'ExcelExport',\n 'CsvExport', 'PdfExport', 'Indent', 'Outdent', 'CriticalPath'];\n this.parent = parent;\n this.id = this.parent.element.id;\n this.parent.on('ui-toolbarupdate', this.propertyChanged, this);\n }\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @returns {void} .\n * @private\n */\n Toolbar.prototype.renderToolbar = function () {\n var toolbarItems = this.parent.toolbar || [];\n if (toolbarItems.length > 0) {\n this.element = createElement('div', { id: this.parent.controlId + '_Gantt_Toolbar', className: cls.toolbar });\n if (this.parent.treeGrid.grid.headerModule) {\n this.parent.element.insertBefore(this.element, this.parent.treeGridPane.offsetParent);\n }\n else {\n this.parent.element.appendChild(this.element);\n }\n var preItems = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'ExpandAll', 'CollapseAll',\n 'PrevTimeSpan', 'NextTimeSpan', 'ZoomIn', 'ZoomOut', 'ZoomToFit', 'ExcelExport', 'CsvExport',\n 'PdfExport', 'Indent', 'Outdent', 'CriticalPath'];\n for (var _i = 0, preItems_1 = preItems; _i < preItems_1.length; _i++) {\n var item = preItems_1[_i];\n var itemStr = void 0;\n var localeName = void 0;\n if (item === 'CriticalPath') {\n itemStr = \"critical-path\";\n localeName = \"criticalPath\";\n }\n else {\n itemStr = item.toLowerCase();\n localeName = item[0].toLowerCase() + item.slice(1);\n }\n this.predefinedItems[item] = {\n id: this.parent.element.id + '_' + itemStr, prefixIcon: 'e-' + itemStr,\n text: this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant(localeName),\n tooltipText: this.parent.localeObj.getConstant(localeName) + ((localeName === 'add' ||\n localeName === 'edit' || localeName === 'delete') ? this.parent.localeObj.getConstant('task') :\n (localeName === 'expandAll' || localeName === 'collapseAll') ?\n this.parent.localeObj.getConstant('tasks') : ''),\n align: this.parent.isAdaptive ? 'Right' : 'Left'\n };\n if (this.parent.enableRtl) {\n if (item === 'PrevTimeSpan') {\n this.predefinedItems[item].prefixIcon = 'e-nexttimespan';\n }\n if (item === 'NextTimeSpan') {\n this.predefinedItems[item].prefixIcon = 'e-prevtimespan';\n }\n }\n }\n var searchLocalText = this.parent.localeObj.getConstant('search');\n if (this.parent.isAdaptive) {\n this.predefinedItems.Search = {\n id: this.id + '_searchbutton',\n prefixIcon: 'e-search-icon',\n tooltipText: searchLocalText,\n align: 'Right'\n };\n }\n else {\n this.predefinedItems.Search = {\n id: this.id + '_search',\n template: '
      ' +\n '' +\n '' +\n '
      ',\n tooltipText: searchLocalText,\n align: 'Right', cssClass: 'e-search-wrapper'\n };\n }\n this.createToolbar();\n }\n };\n Toolbar.prototype.addReactToolbarPortals = function (args) {\n if (this.parent.isReact && args) {\n this.parent.portals = this.parent.portals.concat(args);\n this.parent.renderTemplates();\n }\n };\n Toolbar.prototype.createToolbar = function () {\n var items = this.getItems();\n this.toolbar = new NavToolbar({\n items: items,\n enableRtl: this.parent.enableRtl,\n clicked: this.toolbarClickHandler.bind(this),\n height: this.parent.isAdaptive ? 48 : 'auto'\n });\n this.toolbar.isStringTemplate = true;\n this.toolbar.isReact = this.parent.isReact;\n this.toolbar.on('render-react-toolbar-template', this.addReactToolbarPortals, this);\n this.toolbar.appendTo(this.element);\n var cancelItem = this.element.querySelector('#' + this.parent.element.id + '_cancel');\n var updateItem = this.element.querySelector('#' + this.parent.element.id + '_update');\n if (cancelItem) {\n addClass([cancelItem], cls.focusCell);\n }\n if (updateItem) {\n addClass([updateItem], cls.focusCell);\n }\n if (this.parent.isAdaptive) {\n this.element.insertBefore(this.getSearchBarElement(), this.element.childNodes[0]);\n this.searchElement = this.element.querySelector('#' + this.parent.element.id + '_searchbar');\n var textObj = new TextBox({\n placeholder: this.parent.localeObj.getConstant('search'),\n enableRtl: this.parent.enableRtl,\n floatLabelType: 'Never',\n showClearButton: true\n });\n textObj.appendTo(this.searchElement);\n }\n else {\n this.searchElement = this.element.querySelector('#' + this.parent.element.id + '_searchbar');\n }\n if (this.parent.filterModule) {\n this.wireEvent();\n if (this.parent.searchSettings) {\n this.updateSearchTextBox();\n }\n }\n if (this.parent.readOnly) {\n this.enableItems([this.parent.element.id + '_add', this.parent.element.id + '_update', this.parent.element.id + '_delete',\n this.parent.element.id + '_cancel', this.parent.element.id + '_indent', this.parent.element.id + '_outdent'], false);\n }\n };\n Toolbar.prototype.getSearchBarElement = function () {\n var _this = this;\n var div = createElement('div', { className: 'e-adaptive-searchbar', styles: 'display: none' });\n var textbox = createElement('input', { attrs: { type: 'text' }, id: this.parent.element.id + '_searchbar' });\n var span = createElement('span', { className: 'e-backarrowspan e-icons' });\n span.onclick = function () {\n div.style.display = 'none';\n _this.element.childNodes[1].style.display = 'block';\n };\n div.appendChild(span);\n div.appendChild(textbox);\n return div;\n };\n Toolbar.prototype.wireEvent = function () {\n if (this.searchElement) {\n EventHandler.add(this.searchElement, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.searchElement, 'focus', this.focusHandler, this);\n EventHandler.add(this.searchElement, 'blur', this.blurHandler, this);\n }\n };\n Toolbar.prototype.propertyChanged = function (property) {\n var module = getValue('module', property);\n if (module !== this.getModuleName() || !this.parent.toolbar) {\n return;\n }\n if (this.element && this.element.parentNode) {\n remove(this.element);\n }\n this.renderToolbar();\n this.refreshToolbarItems();\n };\n Toolbar.prototype.unWireEvent = function () {\n if (this.searchElement) {\n EventHandler.remove(this.searchElement, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.searchElement, 'focus', this.focusHandler);\n EventHandler.remove(this.searchElement, 'blur', this.blurHandler);\n this.searchElement = null;\n }\n this.parent.off('ui-toolbarupdate', this.propertyChanged);\n };\n Toolbar.prototype.keyUpHandler = function (e) {\n if (e.keyCode === 13 && this.parent.searchSettings.key !== this.searchElement.value) {\n this.parent.searchSettings.key = this.searchElement.value;\n this.parent.dataBind();\n }\n };\n Toolbar.prototype.focusHandler = function (e) {\n e.target.parentElement.classList.add('e-input-focus');\n };\n Toolbar.prototype.blurHandler = function (e) {\n e.target.parentElement.classList.remove('e-input-focus');\n };\n /**\n * Method to set value for search input box\n *\n * @returns {void} .\n * @hidden\n */\n Toolbar.prototype.updateSearchTextBox = function () {\n if (this.searchElement && this.searchElement.value !== this.parent.searchSettings.key) {\n this.searchElement.value = this.parent.searchSettings.key;\n }\n };\n Toolbar.prototype.getItems = function () {\n var items = [];\n var toolbarItems = this.parent.toolbar;\n var searchIndex = -1;\n toolbarItems.forEach(function (item, index) {\n if ((typeof (item) === 'string' && item === 'Search') ||\n ((typeof (item) === 'object') && item.text === 'Search')) {\n searchIndex = index;\n }\n });\n if (searchIndex > -1) {\n var searchItem = toolbarItems.splice(searchIndex, 1);\n toolbarItems.push(searchItem[0]);\n }\n for (var _i = 0, toolbarItems_1 = toolbarItems; _i < toolbarItems_1.length; _i++) {\n var item = toolbarItems_1[_i];\n if (typeof item === 'string') {\n items.push(this.getItemObject(item));\n }\n else {\n items.push(this.getItem(item));\n }\n }\n return items;\n };\n Toolbar.prototype.getItem = function (itemObject) {\n var item = this.predefinedItems[itemObject.text];\n return item ? extend(item, item, itemObject) : itemObject;\n };\n Toolbar.prototype.getItemObject = function (itemName) {\n return this.predefinedItems[itemName] || { text: itemName, id: this.id + '_' + itemName };\n };\n Toolbar.prototype.toolbarClickHandler = function (arg) {\n var _this = this;\n var gObj = this.parent;\n var gID = this.id;\n this.parent.isToolBarClick = false;\n extend(arg, { cancel: false });\n if (arg.item['properties'].id === this.parent.element.id + \"_pdfexport\" || arg.item['properties'].id === this.parent.element.id + \"_critical-path\") {\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === \"Shimmer\") {\n this.parent.showMaskRow();\n }\n else {\n this.parent.showSpinner();\n }\n }\n gObj.trigger(events.toolbarClick, arg, function (args) {\n if (args.cancel) {\n return;\n }\n else {\n if (_this.parent.isAdaptive === true) {\n if (args.item.id === gID + '_edit' || args.item.id === gID + '_add' || args.item.id === gID + '_delete'\n || args.item.id === gID + '_searchbutton' || args.item.id === gID + '_expandall'\n || args.item.id === gID + '_collapseall') {\n if (_this.parent.selectionModule && _this.parent.selectionSettings.type === 'Multiple') {\n _this.parent.selectionModule.hidePopUp();\n document.getElementsByClassName('e-gridpopup')[0].style.display = 'none';\n }\n }\n }\n switch (!isNullOrUndefined(args.item) && args.item.id) {\n case gID + '_edit':\n if (gObj.editModule && gObj.editSettings.allowEditing) {\n gObj.editModule.dialogModule.openToolbarEditDialog();\n }\n break;\n case gID + '_indent':\n if (gObj.editModule && gObj.selectionModule.getSelectedRecords().length) {\n gObj.indent();\n }\n break;\n case gID + '_critical-path':\n if (gObj.enableCriticalPath) {\n gObj.enableCriticalPath = false;\n }\n else {\n gObj.enableCriticalPath = true;\n }\n break;\n case gID + '_outdent':\n if (gObj.editModule && gObj.selectionModule.getSelectedRecords().length) {\n gObj.outdent();\n }\n break;\n case gID + '_update':\n gObj.editModule.cellEditModule.isCellEdit = false;\n gObj.treeGrid.grid.saveCell();\n break;\n case gID + '_cancel':\n gObj.cancelEdit();\n break;\n case gID + '_add':\n if (gObj.editModule && gObj.editSettings.allowAdding) {\n gObj.editModule.dialogModule.openAddDialog();\n }\n break;\n case gID + '_delete':\n if (_this.parent.selectionModule && _this.parent.editModule) {\n if ((_this.parent.selectionSettings.mode !== 'Cell' && _this.parent.selectionModule.selectedRowIndexes.length)\n || (_this.parent.selectionSettings.mode === 'Cell' &&\n _this.parent.selectionModule.getSelectedRowCellIndexes().length)) {\n _this.parent.editModule.startDeleteAction();\n }\n }\n break;\n case gID + '_search':\n {\n var searchButtonId = getValue('originalEvent.target.id', args);\n if (searchButtonId === _this.parent.element.id + '_searchbutton' && _this.parent.filterModule) {\n var keyVal = _this.element.querySelector('#' + _this.parent.element.id + '_searchbar').value;\n if (_this.parent.searchSettings.key !== keyVal) {\n _this.parent.searchSettings.key = keyVal;\n _this.parent.dataBind();\n }\n }\n break;\n }\n case gID + '_searchbutton':\n {\n var adaptiveSearchbar = _this.element.querySelector('.e-adaptive-searchbar');\n adaptiveSearchbar.parentElement.childNodes[1].style.display = 'none';\n adaptiveSearchbar.style.display = 'block';\n break;\n }\n case gID + '_expandall':\n _this.parent.ganttChartModule.expandCollapseAll('expand');\n break;\n case gID + '_collapseall':\n _this.parent.ganttChartModule.expandCollapseAll('collapse');\n break;\n case gID + '_prevtimespan':\n _this.parent.previousTimeSpan();\n break;\n case gID + '_nexttimespan':\n _this.parent.nextTimeSpan();\n break;\n case gID + '_zoomin':\n _this.zoomIn();\n break;\n case gID + '_zoomout':\n _this.zoomOut();\n break;\n case gID + '_zoomtofit':\n _this.zoomToFit();\n break;\n }\n }\n });\n };\n /**\n *\n * @returns {void} .\n * @private\n */\n Toolbar.prototype.zoomIn = function () {\n this.parent.timelineModule.processZooming(true);\n };\n /**\n *\n * @returns {void} .\n * @private\n */\n Toolbar.prototype.zoomToFit = function () {\n if (this.parent.timelineModule.isZoomIn) {\n this.parent.timelineModule.isZoomIn = false;\n }\n this.parent.timelineModule.processZoomToFit();\n this.parent.ganttChartModule.updateScrollLeft(0);\n };\n /**\n *\n * @returns {void} .\n * @private\n */\n Toolbar.prototype.zoomOut = function () {\n this.parent.timelineModule.processZooming(false);\n };\n /**\n * To refresh toolbar items bases current state of tasks\n *\n * @param {RowSelectEventArgs} args .\n * @returns {void} .\n */\n Toolbar.prototype.refreshToolbarItems = function (args) {\n var gObj = this.parent;\n var enableItems = [];\n var disableItems = [];\n var edit = gObj.editSettings;\n var gID = this.id;\n var ind = gObj.selectedRowIndex;\n var previousGanttRecord;\n var isSelected = gObj.selectionModule ? gObj.selectionModule.selectedRowIndexes.length === 1 ||\n gObj.selectionModule.getSelectedRowCellIndexes().length === 1 ? true : false : false;\n var toolbarItems = this.toolbar ? this.toolbar.items : [];\n var toolbarDefaultItems = [gID + '_add', gID + '_edit', gID + '_delete',\n gID + '_update', gID + '_cancel', gID + '_indent', gID + '_outdent'];\n var isResouceParent = (this.parent.viewType === 'ResourceView' && getValue('data.level', args) !== 0\n || this.parent.viewType === 'ProjectView');\n if (!isNullOrUndefined(this.parent.editModule)) {\n var touchEdit = gObj.editModule.taskbarEditModule ?\n gObj.editModule.taskbarEditModule.touchEdit : false;\n var hasData = gObj.flatData && gObj.flatData.length;\n // eslint-disable-next-line\n edit.allowAdding && !touchEdit ? enableItems.push(gID + '_add') : disableItems.push(gID + '_add');\n // eslint-disable-next-line\n edit.allowEditing && isResouceParent && hasData && isSelected && !touchEdit ?\n enableItems.push(gID + '_edit') : disableItems.push(gID + '_edit');\n if (!edit.allowEditing || ind === 0 || ind === -1 || !hasData || !isSelected || this.parent.viewType === 'ResourceView') {\n disableItems.push(gID + '_indent');\n disableItems.push(gID + '_outdent');\n }\n else {\n if (gObj.updatedRecords[ind].level === 0 && hasData && !touchEdit) {\n enableItems.push(gID + '_indent');\n disableItems.push(gID + '_outdent');\n }\n else {\n previousGanttRecord = gObj.updatedRecords[ind - 1];\n if ((gObj.updatedRecords[ind].level - previousGanttRecord.level === 1) && ind !== -1) {\n disableItems.push(gID + '_indent');\n enableItems.push(gID + '_outdent');\n }\n else if (ind !== -1) {\n enableItems.push(gID + '_indent');\n enableItems.push(gID + '_outdent');\n }\n }\n }\n var isDeleteSelected = gObj.selectionModule ? gObj.selectionModule.selectedRowIndexes.length > 0 ||\n gObj.selectionModule.getSelectedRowCellIndexes().length > 0 ? true : false : false;\n // eslint-disable-next-line\n edit.allowDeleting && hasData && isDeleteSelected && !touchEdit ?\n enableItems.push(gID + '_delete') : disableItems.push(gID + '_delete');\n if (gObj.editSettings.mode === 'Auto' && !isNullOrUndefined(gObj.editModule.cellEditModule)\n && gObj.editModule.cellEditModule.isCellEdit) {\n // New initialization for enableItems and disableItems during isCellEdit\n enableItems = [];\n enableItems.push(gID + '_update', gID + '_cancel');\n disableItems = [];\n for (var t = 0; t < toolbarItems.length; t++) {\n if (toolbarItems[t].id !== gID + '_update' && toolbarItems[t].id !== gID + '_cancel' &&\n toolbarDefaultItems.indexOf(toolbarItems[t].id) !== -1) {\n disableItems.push(toolbarItems[t].id);\n }\n }\n }\n else {\n disableItems.push(gID + '_update', gID + '_cancel');\n for (var t = 0; t < toolbarItems.length; t++) {\n if (enableItems.indexOf(toolbarItems[t].id) === -1 &&\n disableItems.indexOf(toolbarItems[t].id) === -1) {\n enableItems.push(toolbarItems[t].id);\n }\n }\n }\n }\n else {\n disableItems.push(gID + '_delete');\n disableItems.push(gID + '_add');\n disableItems.push(gID + '_edit');\n disableItems.push(gID + '_update');\n disableItems.push(gID + '_cancel');\n disableItems.push(gID + '_indent');\n disableItems.push(gID + '_outdent');\n }\n for (var e = 0; e < enableItems.length; e++) {\n var index = void 0;\n for (var t = 0; t < toolbarItems.length; t++) {\n if (toolbarItems[t].id === enableItems[e]) {\n index = t;\n break;\n }\n }\n if (toolbarItems.length > 0) {\n this.toolbar.hideItem(index, false);\n }\n }\n for (var d = 0; d < disableItems.length; d++) {\n var index = void 0;\n for (var t = 0; t < toolbarItems.length; t++) {\n if (toolbarItems[t].id === disableItems[d]) {\n index = t;\n break;\n }\n }\n if (toolbarItems.length > 0) {\n this.toolbar.hideItem(index, true);\n }\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void} .\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n var element = this.element.querySelector('#' + item);\n if (element) {\n this.toolbar.enableItems(element.parentElement, isEnable);\n }\n }\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void} .\n * @private\n */\n Toolbar.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.toolbar.off('render-react-toolbar-template', this.addReactToolbarPortals);\n this.toolbar.destroy();\n if (this.parent.filterModule) {\n this.unWireEvent();\n }\n remove(this.element);\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { EventHandler, detach, formatUnit, Browser, closest } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as events from '../base/constant';\nimport { getScrollBarWidth, parentsUntil, gridActionHandler, Global, getExactFrozenMovableColumn } from '../base/util';\nimport { isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport * as literals from '../base/string-literals';\nexport var resizeClassList = {\n root: 'e-rhandler',\n suppress: 'e-rsuppress',\n icon: 'e-ricon',\n helper: 'e-rhelper',\n header: 'th.e-headercell',\n cursor: 'e-rcursor'\n};\n/**\n * `Resize` module is used to handle Resize to fit for columns.\n *\n * @hidden\n * @private\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for the Grid resize module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @hidden\n */\n function Resize(parent) {\n this.tapped = false;\n this.isDblClk = true;\n /** @hidden */\n this.resizeProcess = false;\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.widthService = new ColumnWidthService(parent);\n this.addEventListener();\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n var columnName = (fName === undefined || fName === null || fName.length <= 0) ?\n this.parent.getColumns().map(function (x) { return x.field; }) : (typeof fName === 'string') ? [fName] : fName;\n this.parent.isAutoFitColumns = true;\n this.findColumn(columnName);\n };\n Resize.prototype.autoFit = function () {\n var newarray = this.parent.getColumns().filter(function (c) { return c.autoFit === true; })\n .map(function (c) { return c.field || c.headerText; });\n if (newarray.length > 0) {\n this.autoFitColumns(newarray);\n }\n if (this.parent.resizeSettings.mode === 'Auto') {\n this.widthService.setWidthToTable();\n }\n };\n Resize.prototype.resizeColumn = function (fName, index, id) {\n var gObj = this.parent;\n var tWidth = 0;\n var headerTable;\n var contentTable;\n var footerTable;\n var headerDivTag = 'e-gridheader';\n var contentDivTag = literals.gridContent;\n var footerDivTag = literals.gridFooter;\n var indentWidth = 0;\n var uid = id ? id : this.parent.getUidByColumnField(fName);\n var columnIndex = this.parent.getNormalizedColumnIndex(uid);\n var headerTextClone;\n var contentTextClone;\n var footerTextClone;\n var columnIndexByField = this.parent.getColumnIndexByField(fName);\n var left = gObj.getFrozenColumns() || gObj.getFrozenLeftColumnsCount();\n var movable = gObj.getMovableColumnsCount();\n if (!isNullOrUndefined(gObj.getFooterContent())) {\n footerTable = gObj.getFooterContentTable();\n }\n if (gObj.isFrozenGrid()) {\n var col = gObj.getColumnByField(fName);\n if (col.getFreezeTableName() === literals.frozenLeft) {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelector('[e-mappinguid=\"' + uid + '\"]').parentElement.cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \")\");\n if (footerTable) {\n footerTextClone = footerTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \")\");\n }\n }\n else if (col.getFreezeTableName() === 'movable') {\n headerTable = gObj.getHeaderContent().querySelector('.' + literals.movableHeader).children[0];\n contentTable = gObj.getContent().querySelector('.' + literals.movableContent).children[0];\n headerTextClone = headerTable.querySelector('[e-mappinguid=\"' + uid + '\"]').parentElement.cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + ((columnIndex - left) + 1) + \")\");\n if (footerTable) {\n footerTable = gObj.getFooterContent().querySelector('.e-movablefootercontent').children[0];\n footerTextClone = footerTable.querySelectorAll(\"td:nth-child(\" + ((columnIndex - left) + 1) + \")\");\n }\n }\n else if (col.getFreezeTableName() === literals.frozenRight) {\n headerTable = gObj.getHeaderContent().querySelector('.e-frozen-right-header').children[0];\n contentTable = gObj.getContent().querySelector('.e-frozen-right-content').children[0];\n headerTextClone = headerTable.querySelector('[e-mappinguid=\"' + uid + '\"]').parentElement.cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + ((columnIndex - (left + movable)) + 1) + \")\");\n if (footerTable) {\n footerTable = gObj.getFooterContent().querySelector('.e-movablefootercontent').children[0];\n footerTextClone = footerTable.querySelectorAll(\"td:nth-child(\" + ((columnIndex - (left + movable)) + 1) + \")\");\n }\n }\n }\n else {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelector('[e-mappinguid=\"' + uid + '\"]').parentElement.cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td.e-rowcell:nth-child(\" + (columnIndex + 1) + \"):not(.e-groupcaption):not(.e-detailcell)\");\n if (footerTable) {\n footerTextClone = footerTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \"):not(.e-groupcaption)\");\n }\n }\n var indentWidthClone = [].slice.call(headerTable.querySelector('tr').getElementsByClassName('e-grouptopleftcell'));\n if (indentWidthClone.length > 0) {\n for (var i = 0; i < indentWidthClone.length; i++) {\n indentWidth += indentWidthClone[parseInt(i.toString(), 10)].offsetWidth;\n }\n }\n var detailsElement = contentTable.querySelector('.e-detailrowcollapse') ||\n contentTable.querySelector('.e-detailrowexpand');\n if ((this.parent.detailTemplate || this.parent.childGrid) && detailsElement) {\n indentWidth += detailsElement.offsetWidth;\n }\n var headerText = [headerTextClone];\n var contentText = [];\n var footerText = [];\n if (footerTable) {\n for (var i = 0; i < footerTextClone.length; i++) {\n footerText[parseInt(i.toString(), 10)] = footerTextClone[parseInt(i.toString(), 10)].cloneNode(true);\n }\n }\n for (var i = 0; i < contentTextClone.length; i++) {\n contentText[parseInt(i.toString(), 10)] = contentTextClone[parseInt(i.toString(), 10)].cloneNode(true);\n }\n var wHeader = this.createTable(headerTable, headerText, headerDivTag);\n var wFooter = null;\n var wContent = null;\n if (gObj.getCurrentViewRecords().length) {\n wContent = this.createTable(contentTable, contentText, contentDivTag);\n }\n if (footerText.length) {\n wFooter = this.createTable(footerTable, footerText, footerDivTag);\n }\n var columnbyindex = gObj.getColumns()[parseInt(columnIndexByField.toString(), 10)];\n var width = columnbyindex.width = formatUnit(Math.max(wHeader, wContent, wFooter));\n var colMaxWidth = columnbyindex.maxWidth && parseFloat(columnbyindex.maxWidth.toString());\n if (parseInt(width, 10) > colMaxWidth) {\n columnbyindex.width = colMaxWidth;\n }\n this.widthService.setColumnWidth(gObj.getColumns()[parseInt(columnIndexByField.toString(), 10)]);\n var result = gObj.getColumns().some(function (x) { return x.width === null\n || x.width === undefined || x.width.length <= 0; });\n if (result === false) {\n var element = void 0;\n if (this.parent.isAutoFitColumns && gObj.isFrozenGrid()) {\n var frozenMovableColumns = getExactFrozenMovableColumn(this.parent);\n if (columnbyindex.freezeTable === 'frozen-left') {\n element = frozenMovableColumns.frozenLeft;\n }\n else if (columnbyindex.freezeTable === 'movable') {\n element = frozenMovableColumns.movable;\n }\n else {\n element = frozenMovableColumns.frozenRight;\n }\n }\n else {\n element = gObj.getColumns();\n }\n for (var i = 0; i < element.length; i++) {\n if (element[parseInt(i.toString(), 10)].visible) {\n tWidth = tWidth + parseFloat(element[parseInt(i.toString(), 10)].width);\n }\n }\n }\n var calcTableWidth = tWidth + indentWidth;\n if (tWidth > 0 && !gObj.isFrozenGrid()) {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.widthService.setColumnWidth(new Column({ width: '30px' }));\n }\n if (this.parent.resizeSettings.mode === 'Auto') {\n calcTableWidth = '100%';\n }\n headerTable.style.width = formatUnit(calcTableWidth);\n contentTable.style.width = formatUnit(calcTableWidth);\n if (!isNullOrUndefined(footerTable)) {\n footerTable.style.width = formatUnit(calcTableWidth);\n }\n }\n if (gObj.isFrozenGrid()) {\n if (this.parent.isAutoFitColumns) {\n headerTable.style.width = formatUnit(calcTableWidth);\n contentTable.style.width = formatUnit(calcTableWidth);\n }\n this.widthService.refreshFrozenScrollbar();\n }\n var tableWidth = headerTable.offsetWidth;\n var contentwidth = (gObj.getContent().scrollWidth);\n if (contentwidth > tableWidth) {\n headerTable.classList.add('e-tableborder');\n contentTable.classList.add('e-tableborder');\n }\n else {\n headerTable.classList.remove('e-tableborder');\n contentTable.classList.remove('e-tableborder');\n }\n if (!isNullOrUndefined(footerTable)) {\n footerTable.classList.add('e-tableborder');\n }\n };\n /**\n * To destroy the resize\n *\n * @returns {void}\n * @hidden\n */\n Resize.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n return;\n }\n this.widthService = null;\n this.unwireEvents();\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n Resize.prototype.findColumn = function (fName) {\n for (var i = 0; i < fName.length; i++) {\n var fieldName = fName[parseInt(i.toString(), 10)];\n var columnIndex = this.parent.getColumnIndexByField(fieldName);\n var column = this.parent.getColumns()[parseInt(columnIndex.toString(), 10)];\n if (columnIndex > -1 && !isNullOrUndefined(column) && column.visible === true) {\n this.resizeColumn(fieldName, columnIndex);\n }\n }\n if (this.parent.allowTextWrap) {\n this.parent.notify(events.freezeRender, { case: 'refreshHeight', isModeChg: true });\n }\n };\n /**\n * To create table for autofit\n *\n * @param {Element} table - specifies the table\n * @param {Element[]} text - specifies the text\n * @param {string} tag - specifies the tag name\n * @returns {number} returns the number\n * @hidden\n */\n Resize.prototype.createTable = function (table, text, tag) {\n var myTableDiv = this.parent.createElement('div');\n myTableDiv.className = this.parent.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = this.parent.createElement('div');\n mySubDiv.className = tag;\n var myTable = this.parent.createElement('table', { attrs: { role: 'grid' } });\n myTable.className = table.className;\n myTable.classList.add('e-resizetable');\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var myTr = this.parent.createElement('tr');\n for (var i = 0; i < text.length; i++) {\n var tr = myTr.cloneNode();\n tr.className = table.querySelector('tr').className;\n tr.appendChild(text[parseInt(i.toString(), 10)]);\n myTable.appendChild(tr);\n }\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n var offsetWidthValue = myTable.getBoundingClientRect().width;\n document.body.removeChild(myTableDiv);\n return Math.ceil(offsetWidthValue);\n };\n /**\n * @returns {void}\n * @hidden\n */\n Resize.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerRefreshed, this.refreshHeight, this);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n this.parent.on(events.contentReady, this.autoFit, this);\n this.parent.on(events.refreshHandlers, this.refreshHeight, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @returns {void}\n * @hidden\n */\n Resize.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.headerRefreshed, this.refreshHeight);\n this.parent.off(events.initialEnd, this.wireEvents);\n this.parent.off(events.refreshHandlers, this.refreshHeight);\n this.parent.off(events.destroy, this.destroy);\n };\n /**\n * @returns {void}\n * @hidden\n */\n Resize.prototype.render = function () {\n this.unwireEvents();\n this.wireEvents();\n this.setHandlerHeight();\n };\n Resize.prototype.refreshHeight = function () {\n if (this.parent.getHeaderTable()) {\n var element = this.getResizeHandlers();\n for (var i = 0; i < element.length; i++) {\n if (element[parseInt(i.toString(), 10)].parentElement.offsetHeight > 0) {\n element[parseInt(i.toString(), 10)].style.height = element[parseInt(i.toString(), 10)].parentElement.offsetHeight + 'px';\n }\n }\n this.setHandlerHeight();\n }\n };\n Resize.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), Browser.touchStartEvent, this.touchResizeStart, this);\n EventHandler.add(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit, this);\n };\n Resize.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), Browser.touchStartEvent, this.touchResizeStart);\n EventHandler.remove(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit);\n };\n Resize.prototype.getResizeHandlers = function () {\n return this.parent.isFrozenGrid() ?\n [].slice.call(this.parent.getHeaderContent().getElementsByClassName(resizeClassList.root))\n : [].slice.call(this.parent.getHeaderTable().getElementsByClassName(resizeClassList.root));\n };\n Resize.prototype.setHandlerHeight = function () {\n var element = [].slice.call(this.parent.getHeaderTable().getElementsByClassName(resizeClassList.suppress));\n for (var i = 0; i < element.length; i++) {\n element[parseInt(i.toString(), 10)].style.height = element[parseInt(i.toString(), 10)].parentElement.offsetHeight + 'px';\n }\n };\n Resize.prototype.callAutoFit = function (e) {\n if (e.target.classList.contains('e-rhandler')) {\n var col = this.getTargetColumn(e);\n if (col.columns) {\n return;\n }\n this.resizeColumn(col.field, this.parent.getNormalizedColumnIndex(col.uid), col.uid);\n var header = closest(e.target, resizeClassList.header);\n header.classList.add('e-resized');\n }\n };\n Resize.prototype.touchResizeStart = function (e) {\n if (!Global.timer) {\n Global.timer = setTimeout(function () {\n Global.timer = null;\n }, 300);\n return this.resizeStart(e);\n }\n else {\n clearTimeout(Global.timer);\n Global.timer = null;\n this.callAutoFit(e);\n }\n };\n Resize.prototype.resizeStart = function (e) {\n var _this = this;\n if (e.target.classList.contains('e-rhandler')) {\n if (!this.helper) {\n if (this.getScrollBarWidth() === 0) {\n this.resizeProcess = true;\n if (this.parent.allowGrouping) {\n for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n this.widthService.setColumnWidth(new Column({ width: '30px' }), i);\n }\n }\n for (var _i = 0, _a = this.refreshColumnWidth(); _i < _a.length; _i++) {\n var col = _a[_i];\n this.widthService.setColumnWidth(col);\n }\n this.widthService.setWidthToTable();\n this.resizeProcess = false;\n }\n this.refreshStackedColumnWidth();\n this.element = e.target;\n if (this.parent.getVisibleFrozenColumns()) {\n var mtbody = this.parent.getMovableContentTbody();\n var ftbody = this.parent.getFrozenLeftContentTbody();\n var frtbody = this.parent.getFrozenRightContentTbody();\n var mtr = [].slice.call(mtbody.childNodes);\n var ftr = [].slice.call(ftbody.childNodes);\n var frTr = [];\n if (this.parent.getFrozenMode() === literals.leftRight && frtbody) {\n frTr = [].slice.call(frtbody.childNodes);\n }\n var _loop_1 = function (i) {\n gridActionHandler(this_1.parent, function (tableName, row) {\n if (_this.parent.rowHeight) {\n row[parseInt(i.toString(), 10)].style.height = _this.parent.rowHeight + 'px';\n }\n else {\n row[parseInt(i.toString(), 10)].style.removeProperty('height');\n }\n }, [ftr, mtr, frTr]);\n };\n var this_1 = this;\n for (var i = 0; i < mtr.length; i++) {\n _loop_1(i);\n }\n }\n this.parentElementWidth = this.parent.element.getBoundingClientRect().width;\n this.appendHelper();\n this.column = this.getTargetColumn(e);\n this.pageX = this.getPointX(e);\n if (this.column.getFreezeTableName() === literals.frozenRight) {\n if (this.parent.enableRtl) {\n this.minMove = (this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 0)\n - parseFloat(isNullOrUndefined(this.column.width) ? '' : this.column.width.toString());\n }\n else {\n this.minMove = parseFloat(isNullOrUndefined(this.column.width) ? '' : this.column.width.toString())\n - (this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 0);\n }\n }\n else if (this.parent.enableRtl) {\n this.minMove = parseFloat(this.column.width.toString())\n - (this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 0);\n }\n else {\n this.minMove = (this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 0)\n - parseFloat(isNullOrUndefined(this.column.width) ? '' : this.column.width.toString());\n }\n this.minMove += this.pageX;\n }\n if (Browser.isDevice && !this.helper.classList.contains(resizeClassList.icon)) {\n this.helper.classList.add(resizeClassList.icon);\n EventHandler.add(document, Browser.touchStartEvent, this.removeHelper, this);\n EventHandler.add(this.helper, Browser.touchStartEvent, this.resizeStart, this);\n }\n else {\n var args = { e: e, column: this.column };\n this.parent.trigger(events.resizeStart, args, function (args) {\n if (args.cancel || _this.parent.isEdit) {\n _this.cancelResizeAction();\n return;\n }\n EventHandler.add(document, Browser.touchEndEvent, _this.resizeEnd, _this);\n EventHandler.add(_this.parent.element, Browser.touchMoveEvent, _this.resizing, _this);\n _this.updateCursor('add');\n });\n }\n }\n };\n Resize.prototype.cancelResizeAction = function (removeEvents) {\n if (removeEvents) {\n EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n this.updateCursor('remove');\n }\n if (Browser.isDevice) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n }\n detach(this.helper);\n this.refresh();\n };\n Resize.prototype.getWidth = function (width, minWidth, maxWidth) {\n if (minWidth && width < minWidth) {\n return minWidth;\n }\n else if ((maxWidth && width > maxWidth)) {\n return maxWidth;\n }\n else {\n return width;\n }\n };\n Resize.prototype.updateResizeEleHeight = function () {\n var elements = [].slice.call(this.parent.getHeaderContent().getElementsByClassName('e-rhandler'));\n for (var i = 0; i < elements.length; i++) {\n elements[parseInt(i.toString(), 10)].style.height = this.element.parentElement.offsetHeight + 'px';\n }\n };\n Resize.prototype.getColData = function (column, mousemove) {\n return {\n width: parseFloat(isNullOrUndefined(this.widthService.getWidth(column)) || this.widthService.getWidth(column) === 'auto' ? '0'\n : this.widthService.getWidth(column).toString()) + mousemove,\n minWidth: column.minWidth ? parseFloat(column.minWidth.toString()) : null,\n maxWidth: column.maxWidth ? parseFloat(column.maxWidth.toString()) : null\n };\n };\n Resize.prototype.resizing = function (e) {\n if (isNullOrUndefined(this.column)) {\n return;\n }\n var offsetWidth = 0;\n if (isNullOrUndefined(this.column)) {\n offsetWidth = parentsUntil(this.element, 'th').offsetWidth;\n }\n if (this.parent.allowTextWrap) {\n this.updateResizeEleHeight();\n this.setHelperHeight();\n }\n var pageX = this.getPointX(e);\n var mousemove = this.parent.enableRtl ? -(pageX - this.pageX) : (pageX - this.pageX);\n if (this.column.getFreezeTableName() === literals.frozenRight) {\n mousemove = this.parent.enableRtl ? (pageX - this.pageX) : (this.pageX - pageX);\n }\n var colData = this.getColData(this.column, mousemove);\n if (!colData.width) {\n colData.width = closest(this.element, 'th').offsetWidth;\n }\n var width = this.getWidth(colData.width, colData.minWidth, colData.maxWidth);\n this.parent.log('resize_min_max', { column: this.column, width: width });\n if (this.column.getFreezeTableName() === literals.frozenRight) {\n if ((this.parent.enableRtl && this.minMove >= pageX) || (!this.parent.enableRtl && this.minMove <= pageX)) {\n width = this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 10;\n this.pageX = pageX = this.minMove;\n }\n }\n if ((this.column.getFreezeTableName() !== literals.frozenRight\n && ((!this.parent.enableRtl && this.minMove >= pageX) || (this.parent.enableRtl && this.minMove <= pageX)))\n || (this.column.getFreezeTableName() === literals.frozenRight && ((this.parent.enableRtl && this.minMove >= pageX)\n || (!this.parent.enableRtl && this.minMove <= pageX)))) {\n width = this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 10;\n this.pageX = pageX = this.minMove;\n }\n if (width !== parseFloat(isNullOrUndefined(this.column.width) || this.column.width === 'auto' ?\n offsetWidth.toString() : this.column.width.toString())) {\n this.pageX = pageX;\n this.column.width = formatUnit(width);\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.onResize, args);\n if (args.cancel) {\n this.cancelResizeAction(true);\n return;\n }\n var columns = [this.column];\n var finalColumns = [this.column];\n if (this.column.columns) {\n columns = this.getSubColumns(this.column, []);\n columns = this.calulateColumnsWidth(columns, false, mousemove);\n finalColumns = this.calulateColumnsWidth(columns, true, mousemove);\n }\n this.resizeProcess = true;\n for (var _i = 0, finalColumns_1 = finalColumns; _i < finalColumns_1.length; _i++) {\n var col = finalColumns_1[_i];\n this.widthService.setColumnWidth(col, null, 'resize');\n }\n this.resizeProcess = false;\n this.updateHelper();\n }\n this.isDblClk = false;\n };\n Resize.prototype.calulateColumnsWidth = function (columns, isUpdate, mousemove) {\n var finalColumns = [];\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n var totalWidth = 0;\n for (var i = 0; i < columns.length; i++) {\n totalWidth += parseFloat(columns[parseInt(i.toString(), 10)].width.toString());\n }\n var colData = this.getColData(col, (parseFloat(col.width)) * mousemove / totalWidth);\n var colWidth = this.getWidth(colData.width, colData.minWidth, colData.maxWidth);\n if ((colWidth !== parseFloat(col.width.toString()))) {\n if (isUpdate) {\n col.width = formatUnit(colWidth < 1 ? 1 : colWidth);\n }\n finalColumns.push(col);\n }\n }\n return finalColumns;\n };\n Resize.prototype.getSubColumns = function (column, subColumns) {\n for (var _i = 0, _a = column.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible !== false && col.allowResizing) {\n if (col.columns) {\n this.getSubColumns(col, subColumns);\n }\n else {\n subColumns.push(col);\n }\n }\n }\n return subColumns;\n };\n Resize.prototype.resizeEnd = function (e) {\n if (!this.helper || this.parent.isDestroyed) {\n return;\n }\n var gObj = this.parent;\n EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n this.updateCursor('remove');\n detach(this.helper);\n var args = { e: e, column: this.column };\n var content = this.parent.getContent().querySelector('.' + literals.content);\n var cTable = content.querySelector('.' + literals.movableContent) ? content.querySelector('.' + literals.movableContent) : content;\n if (cTable.scrollHeight > cTable.clientHeight) {\n this.parent.scrollModule.setPadding();\n cTable.style.overflowY = 'scroll';\n }\n this.parent.trigger(events.resizeStop, args);\n closest(this.element, '.e-headercell').classList.add('e-resized');\n if (parentsUntil(this.element, 'e-frozenheader')) {\n this.isFrozenColResized = true;\n }\n else {\n this.isFrozenColResized = false;\n }\n if (this.parent.isFrozenGrid()) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n if (this.parent.allowTextWrap) {\n this.updateResizeEleHeight();\n this.parent.notify(events.textWrapRefresh, { case: 'textwrap' });\n }\n var headerTable;\n var contentTable;\n var footerTable;\n var rightCnt = gObj.getFrozenRightColumnsCount();\n if (!isNullOrUndefined(gObj.getFooterContent())) {\n footerTable = gObj.getFooterContentTable();\n }\n if (gObj.isFrozenGrid()) {\n if (rightCnt > 0) {\n headerTable = gObj.getHeaderContent().querySelector('.e-frozen-right-header').children[0];\n contentTable = gObj.getContent().querySelector('.e-frozen-right-content').children[0];\n }\n else {\n headerTable = gObj.getHeaderContent().querySelector('.' + literals.movableHeader).children[0];\n contentTable = gObj.getContent().querySelector('.' + literals.movableContent).children[0];\n }\n }\n else {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n }\n var tableWidth = headerTable.offsetWidth;\n var contentwidth = (gObj.getContent().scrollWidth);\n if (contentwidth > tableWidth) {\n addClass([headerTable, contentTable], ['e-tableborder']);\n }\n else {\n removeClass([headerTable, contentTable], ['e-tableborder']);\n }\n if (!isNullOrUndefined(footerTable)) {\n footerTable.classList.add('e-tableborder');\n }\n this.refresh();\n this.doubleTapEvent(e);\n this.isDblClk = true;\n };\n Resize.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Resize.prototype.refreshColumnWidth = function () {\n var columns = this.parent.getColumns();\n for (var _i = 0, _a = [].slice.apply(this.parent.getHeaderContent().querySelectorAll('th.e-headercell')); _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, columns_2 = columns; _b < columns_2.length; _b++) {\n var column = columns_2[_b];\n if (ele.querySelector('[e-mappinguid]') &&\n ele.querySelector('[e-mappinguid]').getAttribute('e-mappinguid') === column.uid && column.visible) {\n column.width = ele.getBoundingClientRect().width;\n break;\n }\n }\n }\n return columns;\n };\n Resize.prototype.refreshStackedColumnWidth = function () {\n for (var _i = 0, _a = this.parent.getStackedColumns(this.parent.columns); _i < _a.length; _i++) {\n var stackedColumn = _a[_i];\n stackedColumn.width = this.getStackedWidth(stackedColumn, 0);\n }\n };\n Resize.prototype.getStackedWidth = function (column, width) {\n for (var _i = 0, _a = column.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible !== false) {\n if (col.columns) {\n this.getStackedWidth(col, width);\n }\n else {\n width += col.width;\n }\n }\n }\n return width;\n };\n Resize.prototype.getTargetColumn = function (e) {\n var cell = closest(e.target, resizeClassList.header);\n cell = cell.querySelector('.e-headercelldiv') || cell.querySelector('.e-stackedheadercelldiv');\n var uid = cell.getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n };\n Resize.prototype.updateCursor = function (action) {\n var headerRows = [].slice.call(this.parent.getHeaderContent().querySelectorAll('th'));\n headerRows.push(this.parent.element);\n for (var _i = 0, headerRows_1 = headerRows; _i < headerRows_1.length; _i++) {\n var row = headerRows_1[_i];\n row.classList[\"\" + action](resizeClassList.cursor);\n }\n };\n Resize.prototype.refresh = function () {\n this.column = null;\n this.pageX = null;\n this.element = null;\n this.helper = null;\n };\n Resize.prototype.appendHelper = function () {\n this.helper = this.parent.createElement('div', {\n className: resizeClassList.helper\n });\n this.parent.element.appendChild(this.helper);\n this.setHelperHeight();\n };\n Resize.prototype.setHelperHeight = function () {\n var isFrozen = this.parent.isFrozenGrid();\n var height = isFrozen ? this.parent.getContent().querySelector('.' + literals.content).offsetHeight\n : this.parent.getContent().offsetHeight - this.getScrollBarWidth();\n var rect = closest(this.element, resizeClassList.header);\n var tr = [].slice.call(this.parent.getHeaderContent().querySelectorAll('tr'));\n var right = this.parent.getFrozenRightColumnsCount();\n if (isFrozen) {\n if (parentsUntil(rect, literals.movableHeader)) {\n tr = [].slice.call(this.parent.getHeaderContent().querySelector('.' + literals.movableHeader).querySelectorAll('tr'));\n }\n else if (right && parentsUntil(rect, 'e-frozen-right-header')) {\n tr = [].slice.call(this.parent.getHeaderContent().querySelector('.e-frozen-right-header').querySelectorAll('tr'));\n }\n else {\n tr = [].slice.call(this.parent.getHeaderContent().querySelector('.e-frozen-left-header').querySelectorAll('tr'));\n }\n }\n for (var i = tr.indexOf(rect.parentElement); i < tr.length && i > -1; i++) {\n height += tr[parseInt(i.toString(), 10)].offsetHeight;\n }\n var pos = this.calcPos(rect);\n if (parentsUntil(rect, 'e-frozen-right-header')) {\n pos.left += (this.parent.enableRtl ? rect.offsetWidth - 2 : 0 - 1);\n }\n else {\n pos.left += (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2);\n }\n this.helper.style.cssText = 'height: ' + height + 'px; top: ' + pos.top + 'px; left:' + Math.floor(pos.left) + 'px;';\n if (this.parent.enableVirtualization) {\n this.helper.classList.add('e-virtual-rhandler');\n }\n };\n Resize.prototype.getScrollBarWidth = function (height) {\n var ele = this.parent.getContent().firstChild;\n return (ele.scrollHeight > ele.clientHeight && height) ||\n ele.scrollWidth > ele.clientWidth ? getScrollBarWidth() : 0;\n };\n Resize.prototype.removeHelper = function (e) {\n var cls = e.target.classList;\n if (!(cls.contains(resizeClassList.root) || cls.contains(resizeClassList.icon)) && this.helper) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n detach(this.helper);\n this.refresh();\n }\n };\n Resize.prototype.updateHelper = function () {\n var rect = closest(this.element, resizeClassList.header);\n var left;\n if (parentsUntil(rect, 'e-frozen-right-header')) {\n left = Math.floor(this.calcPos(rect).left + (this.parent.enableRtl ? rect.offsetWidth - 2 : 0 - 1));\n }\n else {\n left = Math.floor(this.calcPos(rect).left + (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2));\n }\n var borderWidth = 2; // to maintain the helper inside of grid element.\n if (left > this.parentElementWidth) {\n left = this.parentElementWidth - borderWidth;\n }\n if (this.parent.isFrozenGrid()) {\n var table = closest(rect, '.' + literals.table);\n var fLeft = table.offsetLeft;\n if (left < fLeft) {\n left = fLeft;\n }\n }\n this.helper.style.left = left + 'px';\n };\n Resize.prototype.calcPos = function (elem) {\n var parentOffset = {\n top: 0,\n left: 0\n };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = parentsUntil(elem, 'e-grid') || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Resize.prototype.doubleTapEvent = function (e) {\n var _this = this;\n if (this.getUserAgent() && this.isDblClk) {\n if (!this.tapped) {\n this.tapped = setTimeout(function () {\n _this.tapped = null;\n }, 300);\n }\n else {\n clearTimeout(this.tapped);\n this.callAutoFit(e);\n this.tapped = null;\n }\n }\n };\n Resize.prototype.getUserAgent = function () {\n var userAgent = Browser.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n Resize.prototype.timeoutHandler = function () {\n this.tapped = null;\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { TreeGrid, Resize as TreeGridResize } from '@syncfusion/ej2-treegrid';\n/**\n * Column resize action related code goes here\n */\nvar Resize = /** @class */ (function () {\n function Resize(gantt) {\n this.parent = gantt;\n TreeGrid.Inject(TreeGridResize);\n this.parent.treeGrid.allowResizing = this.parent.allowResizing;\n this.bindEvents();\n }\n /**\n * Get module name\n *\n * @returns {void} .\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * To bind resize events.\n *\n * @returns {void} .\n * @private\n */\n Resize.prototype.bindEvents = function () {\n var _this = this;\n this.parent.treeGrid.resizeStart = function (args) {\n _this.parent.trigger('resizeStart', args);\n };\n this.parent.treeGrid.resizing = function (args) {\n _this.parent.trigger('resizing', args);\n };\n this.parent.treeGrid.resizeStop = function (args) {\n _this.parent.trigger('resizeStop', args);\n };\n };\n /**\n * To destroy the column-resizer.\n *\n * @returns {void} .\n * @private\n */\n Resize.prototype.destroy = function () {\n // Destroy Method\n };\n return Resize;\n}());\nexport { Resize };\n","\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OperationTimeline.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OperationTimeline.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./OperationTimeline.vue?vue&type=template&id=091938f2\"\nimport script from \"./OperationTimeline.vue?vue&type=script&lang=js\"\nexport * from \"./OperationTimeline.vue?vue&type=script&lang=js\"\nimport style0 from \"./OperationTimeline.vue?vue&type=style&index=0&id=091938f2&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}